一點小感悟關於df lsblk fdisk命令關於三種存儲


物理塊與文件系統之間的關系圖:

映射關系:扇區→物理塊→邏輯塊→文件系統

dfisk:物理塊  lsblk:邏輯塊  df:文件系統


 

分布式存儲的應用場景根據其存儲接口,即提供的訪問接口,現在流行分為三種:

tip:所謂數據存儲的接口,就是數據傳到哪里你就得接走去存,接走后,剩下的工作就是你做,由你落盤,至於從誰手里接,得看你打交道的對象的支撐。
對象存儲: 也就是通常意義的鍵值存儲,其接口就是簡單的GET、PUT、DEL和其他擴展,如七牛、又拍、Swift、S3。我認為是從應用層把數據接走,數據來的時候就是二進制數據

塊存儲:這種接口通常以QEMU Driver或者Kernel Module的方式存在,這種接口需要實現Linux的Block Device的接口或者QEMU提供的Block Driver接口(yz補充:eg:iscsi就是一種block drive),塊存儲軟件如Sheepdog,如j金山雲的ebs,AWS的EBS,青雲的雲硬盤和阿里雲的盤古系統,還有Ceph的RBD(RBD是Ceph面向塊存儲的接口)。我認為是從qemu-driver或者kernel-module的手里把數據接走,這些數據來的形式是盤符和二進制數據和偏移。


 

三種分布式存儲的存儲設備:即數據最終落到哪里

【塊存儲】典型設備:磁盤陣列,硬盤,虛擬硬盤

【文件存儲】典型設備:FTP、NFS服務器,SamBa

【對象存儲】典型設備:內置大容量硬盤的分布式服務器


 本質是一樣的,底層都是塊存儲,只是在對外接口上表現不一致,分別應用於不同的業務場景。

首先,我說下塊存儲。塊存儲可以看作為是裸盤,最明顯的特征是不能被操作系統直接訪問。可以通過划分邏輯卷、做RAID、LVM(邏輯卷)等方式將它格式化,可以格式化為你所指定的文件系統(Ext3,Ext4,NTFS,FAT32等),然后才可以被操作系統訪問。常見的DAS、FC-SAN、IP-SAN都是塊存儲。

 

優點:讀寫速度快(帶寬和IOPS);缺點:太過於底層,不利於擴展,不能被共享;

 

其次,與塊存儲對應的是文件存儲。文件存儲可以分為本地文件存儲和網絡文件存儲。

 

  • 本地文件存儲:ext3,ext4,NTFS,FAT32
  • 網絡文件存儲(NAS存儲):CIFS,NFS

 

文件存儲最明顯的特征是支持POSIX的文件訪問接口:open、read、write、seek、close等; 

優點:便於擴展&共享;缺點:讀寫速度慢;

對象存儲,相對來說是比較新的一種存儲。有一種說法是這樣的,對象存儲一定是分布式存儲,因為分布式文件存儲可能是分布式存儲而未必是對象存儲。常見的對象存儲的開源實現有Ceph的RADOS、Openstack的swift、AWS s3等;常見分布式文件系統有lustre、glusterfs、HDFS等;

表面區別:對象存儲支持的訪問接口基本是restful接口,而分布式文件存儲提供的是POSIX兼容的文件操作接口;

本質區別:分布式文件存儲文件組織方式為目錄樹,對象存儲采用的是扁平的組織方式;對象存儲不支持隨機讀取和寫入,put和get都是針對整個文件。

 


 

【塊存儲】

 

典型設備:磁盤陣列,硬盤

 

塊存儲主要是將裸磁盤空間整個映射給主機使用的,就是說例如磁盤陣列里面有5塊硬盤(為方便說明,假設每個硬盤1G),然后可以通過划邏輯盤、做Raid、或者LVM(邏輯卷)等種種方式邏輯划分出N個邏輯的硬盤。(假設划分完的邏輯盤也是5個,每個也是1G,但是這5個1G的邏輯盤已經於原來的5個物理硬盤意義完全不同了。例如第一個邏輯硬盤A里面,可能第一個200M是來自物理硬盤1,第二個200M是來自物理硬盤2,所以邏輯硬盤A是由多個物理硬盤邏輯虛構出來的硬盤。)

 

接着塊存儲會采用映射的方式將這幾個邏輯盤映射給主機,主機上面的操作系統會識別到有5塊硬盤,但是操作系統是區分不出到底是邏輯還是物理的,它一概就認為只是5塊裸的物理硬盤而已,跟直接拿一塊物理硬盤掛載到操作系統沒有區別的,至少操作系統感知上沒有區別。

 

此種方式下,操作系統還需要對掛載的裸硬盤進行分區、格式化后,才能使用,與平常主機內置硬盤的方式完全無異。

 

優點:

 

1、 這種方式的好處當然是因為通過了Raid與LVM等手段,對數據提供了保護。

 

2、 另外也可以將多塊廉價的硬盤組合起來,成為一個大容量的邏輯盤對外提供服務,提高了容量。

 

3、 寫入數據的時候,由於是多塊磁盤組合出來的邏輯盤,所以幾塊磁盤可以並行寫入的,提升了讀寫效率。

 

4、 很多時候塊存儲采用SAN架構組網,傳輸速率以及封裝協議的原因,使得傳輸速度與讀寫速率得到提升。

 

缺點:

 

1、采用SAN架構組網時,需要額外為主機購買光纖通道卡,還要買光纖交換機,造價成本高。

 

2、主機之間的數據無法共享,在服務器不做集群的情況下,塊存儲裸盤映射給主機,再格式化使用后,對於主機來說相當於本地盤,那么主機A的本地盤根本不能給主機B去使用,無法共享數據。

 

3、不利於不同操作系統主機間的數據共享:另外一個原因是因為操作系統使用不同的文件系統,格式化完之后,不同文件系統間的數據是共享不了的。例如一台裝了WIN7/XP,文件系統是FAT32/NTFS,而Linux是EXT4,EXT4是無法識別NTFS的文件系統的。就像一只NTFS格式的U盤,插進Linux的筆記本,根本無法識別出來。所以不利於文件共享。


 

 

 

【對象存儲】

典型設備:內置大容量硬盤的分布式服務器

對象存儲最常用的方案,就是多台服務器內置大容量硬盤,再裝上對象存儲軟件,然后再額外搞幾台服務作為管理節點,安裝上對象存儲管理軟件。管理節點可以管理其他服務器對外提供讀寫訪問功能。

之所以出現了對象存儲這種東西,是為了克服塊存儲與文件存儲各自的缺點,發揚它倆各自的優點。簡單來說塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。能否弄一個讀寫快,利 於共享的出來呢。於是就有了對象存儲。

首先,一個文件包含了了屬性(術語叫metadata,元數據,例如該文件的大小、修改時間、存儲路徑等)以及內容(以下簡稱數據)。

以往像FAT32這種文件系統,是直接將一份文件的數據與metadata一起存儲的,存儲過程先將文件按照文件系統的最小塊大小來打散(如4M的文件,假設文件系統要求一個塊4K,那么就將文件打散成為1000個小塊),再寫進硬盤里面,過程中沒有區分數據/metadata的。而每個塊最后會告知你下一個要讀取的塊的地址,然后一直這樣順序地按圖索驥,最后完成整份文件的所有塊的讀取。

這種情況下讀寫速率很慢,因為就算你有100個機械手臂在讀寫,但是由於你只有讀取到第一個塊,才能知道下一個塊在哪里,其實相當於只能有1個機械手臂在實際工作。

而對象存儲則將元數據獨立了出來,控制節點叫元數據服務器(服務器+對象存儲管理軟件),里面主要負責存儲對象的屬性(主要是對象的數據被打散存放到了那幾台分布式服務器中的信息),而其他負責存儲數據的分布式服務器叫做OSD,主要負責存儲文件的數據部分。當用戶訪問對象,會先訪問元數據服務器,元數據服務器只負責反饋對象存儲在哪些OSD,假設反饋文件A存儲在B、C、D三台OSD,那么用戶就會再次直接訪問3台OSD服務器去讀取數據。

這時候由於是3台OSD同時對外傳輸數據,所以傳輸的速度就加快了。當OSD服務器數量越多,這種讀寫速度的提升就越大,通過此種方式,實現了讀寫快的目的。

另一方面,對象存儲軟件是有專門的文件系統的,所以OSD對外又相當於文件服務器,那么就不存在文件共享方面的困難了,也解決了文件共享方面的問題。

所以對象存儲的出現,很好地結合了塊存儲與文件存儲的優點。


 

最后為什么對象存儲兼具塊存儲與文件存儲的好處,還要使用塊存儲或文件存儲呢?

1、有一類應用是需要存儲直接裸盤映射的,例如數據庫。因為數據庫需要存儲裸盤映射給自己后,再根據自己的數據庫文件系統來對裸盤進行格式化的,所以是不能夠采用其他已經被格式化為某種文件系統的存儲的。此類應用更適合使用塊存儲。

2、對象存儲的成本比起普通的文件存儲還是較高,需要購買專門的對象存儲軟件以及大容量硬盤。如果對數據量要求不是海量,只是為了做文件共享的時候,直接用文件存儲的形式好了,性價比高。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM