RAID中條帶的概念


  raid把數據分成條帶,一個條帶橫跨所有數據磁盤,每個磁盤上存儲條帶的一部分,稱為sagment,也稱為條帶深度。一個條帶包含的扇區或塊的個數,稱為條帶長度。

  raid向操作系統提供的是卷,是連續的扇區(或者叫LBA)空間地址,而卷向文件系統所展示的是分區,相對於卷,分區就是將大片連續地址再次切開。文件系統用扇區組成所謂“簇”,或者叫cluster,或者叫分配單元,fs存放數據只以簇為單位,而不會出現“讀入或者寫出半個簇”這種io命令。而卷之下的各層都可以以單個扇區為單位了,扇區是存儲系統最小的io單位。明白了底層這些映射關系,就可以着手研究io行為了。

  剛說了raid提供一片連續扇區地址,假如文件系統選擇了扇區1024-1027號這4個連續的扇區作為這個2k文件的存放空間,則文件系統寫入這個文件的時候,卷接受到這個指令之后,會將這段扇區號碼傳送給raid驅動,raid驅動接受之后會將號碼傳送給raid芯片進行地址翻譯(硬raid卡)或者直接在驅動層面進行地址翻譯(軟raid卡),地址翻譯這里的意思是將這段連續的地址映射到實際的物理硬盤地址,因為raid提供給上層的是虛擬磁盤/lun,一個lun可以分步在多個物理硬盤上。地址翻譯的過程一定要查詢stripe也就是條帶映射表,當初你怎么分的,此時就會影響翻譯之后實際的硬盤扇區地址。再回來說你的raid5的128KB條帶,128KB條帶=磁盤數量乘以每個磁盤上組成這個條帶的segment大小,也就是說一個條帶把排列的多個磁盤橫向切成了一條一條的,硬盤本身相當於豎條,而橫條和豎條切開之后形成的小格子就是segment,也叫條帶深度,stripedepth。比如8個盤的raid5系統,其中一塊用於存放parity,128KB條帶除以8等於16KB,也就是說segment=條帶深度=16KB=每個磁盤上貢獻一個條帶所使用的空間。再回來說2k的文件寫入,這個情況下,地址翻譯會將2k的地址翻譯為“磁盤m上的n到磁盤m上的n+3號扇區”,當然也可能是“磁盤x上的y到磁盤a上的b”,總之地址落在物理硬盤上的哪個區域,條帶中央/條帶邊緣/單個物理硬盤/多個物理硬盤,文件系統是不知道的,由raid層面決定。這種不知道稱為“盲”,現在大多文件系統都盲,但是也有不盲或者半盲的。我們在raid層面來設計條帶,分步等,實際上都是盲操作,效果不會很大,包括raid5本身的並發io特點,也是盲並發。所謂並發,拿你剛才的例子,某個io需要寫入2k的數據,如果地址翻譯結果為這4個扇區落在一個segment里,則這個io只會占用一個數據盤,外加需要占用parity區域,如果此時還有一個io需要寫入2k數據,而這次的4個扇區落在了另一塊數據盤上,而它需要的parity數據恰好與前一個io及其所需要的parity區域不在同一個盤上,則這兩個io可以並行操作,4塊磁盤同時讀寫。由於這種並發是基於“恰好”的,所以raid5提供的是盲並發,要實現不盲的並發只能靠上層文件系統。


免責聲明!

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



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