【大話存儲(chǔ)】學(xué)習(xí)筆記(4,5章),RAID

RAID

上一章介紹了磁盤(pán)的基本原理,我們知道一塊磁盤(pán)的容量和速度是有限的,對(duì)于一些應(yīng)用來(lái)說(shuō),可能需要幾個(gè)TB的大小的來(lái)存放數(shù)據(jù),我們必須要制造更大單盤(pán)容量的磁盤(pán)嗎?實(shí)際上,可以使用多塊磁盤(pán)并行起來(lái)解決這個(gè)問(wèn)題,這就是RAID技術(shù)。

RAID:獨(dú)立的磁盤(pán)組成具有冗余特性的陣列。Redundant Array of Independent Disks

image.png

n

七種RAID

RAID 0

實(shí)現(xiàn)RAID 0 有兩種方式,一種是非條帶化的模式,一種是條帶化的模式。

對(duì)于非條帶化的模式:

RAID 0 : 一塊磁盤(pán)寫(xiě)滿(mǎn)了,就往另一塊上寫(xiě), 一次IO只用到一塊磁盤(pán),對(duì)整個(gè)系統(tǒng)來(lái)說(shuō)容量增大了。

因?yàn)閷?xiě)滿(mǎn)一塊物理盤(pán)以后再寫(xiě)另一塊盤(pán)。對(duì)寫(xiě)IO沒(méi)有任何優(yōu)化,但是對(duì)讀IO能提高一定的并發(fā)IO讀幾率。

我們希望可以這樣,同時(shí)向兩塊磁盤(pán)進(jìn)行寫(xiě)。我們可以把要寫(xiě)的IO塊進(jìn)行編號(hào),1、2、3……100等,然后在$t_1$時(shí)刻,磁盤(pán)A和磁盤(pán)B同時(shí)寫(xiě)入1、3兩塊,然后$t_2$時(shí)刻,同時(shí)寫(xiě)入2、4塊,依次類(lèi)推。

這樣就可以實(shí)現(xiàn)并發(fā)寫(xiě)IO呢。接下來(lái)就是如何來(lái)進(jìn)行塊的劃分的問(wèn)題了。

其實(shí)磁盤(pán)已經(jīng)經(jīng)過(guò)低級(jí)格式化了,也就是劃分為若干的扇區(qū),但是扇區(qū)只有512B大小,這么小的粒度太消耗性能。所以我們要重新劃分磁盤(pán),而且又不能拋棄原有的扇區(qū)。

最直接的想法就是若干個(gè)扇區(qū)組成一個(gè)Data block,比如由4個(gè)扇區(qū)組成一個(gè)塊(block)

  • data Block:N倍個(gè)扇區(qū)大小的容量,Block只有在一個(gè)Segment中是物理連續(xù)的,邏輯連續(xù)就需要跨物理磁盤(pán)。

下圖是引入了分割思想以后的硬盤(pán),

image.png
  • 不同磁盤(pán)的相同偏移處的塊組成成了Stripe,也就是條帶,Stripee
  • Segment:一個(gè)Stripee所占用的單塊磁盤(pán)上的區(qū)域。

那么條帶深度和條帶長(zhǎng)度指的就是

  • 每個(gè)Segment包含的塊或者扇區(qū)的數(shù)量稱(chēng)為條帶深度
  • 條帶長(zhǎng)度:一Stripee橫跨過(guò)的扇區(qū)或者塊的個(gè)數(shù)或者字節(jié)容量。
image.png

總結(jié)

image.png

這就是所謂的條帶化,它是對(duì)磁盤(pán)邏輯上的劃分,相當(dāng)于在磁盤(pán)上加了一個(gè)中間層而已

這樣對(duì)于一個(gè)大塊的數(shù)據(jù),可以以條帶為單位進(jìn)行寫(xiě)入,也就是數(shù)據(jù)被分為了多塊寫(xiě)入了4塊硬盤(pán)。而不是向之前一樣順序的寫(xiě)入一個(gè)硬盤(pán)里面

RAID 0要提升性能,條帶要做得越小越好。因?yàn)槿羰菞l帶深度容量大于寫(xiě)入的數(shù)據(jù)的長(zhǎng)度,這段數(shù)據(jù)將會(huì)落到同一個(gè)segment中,相當(dāng)于本次IO只能從一塊硬盤(pán)中讀取。

但是條帶太小,并發(fā)IO幾率降低。因?yàn)槿绻麠l帶太小,每次IO一定會(huì)占用大部分物理盤(pán),隊(duì)列中的IO只能等待IO結(jié)束后才使用物理盤(pán)。

總之,參與RAID0 的物理盤(pán)會(huì)組成一個(gè)邏輯上連續(xù),物理上也連續(xù)的虛擬磁盤(pán)。控制器對(duì)虛擬磁盤(pán)發(fā)出的指令,被RAID控制器轉(zhuǎn)換為真實(shí)磁盤(pán)IO,再返回主機(jī)磁盤(pán)控制器,經(jīng)過(guò)控制器在cache中的組合,再提交給主機(jī)控制器。

RAID 0有非常明顯的缺點(diǎn),沒(méi)有任何的備份,所以任何一塊硬盤(pán)損壞均會(huì)造成數(shù)據(jù)丟失。

image.png

RAID 1

RAID 0 最大的缺點(diǎn)是沒(méi)有備份盤(pán)。RAID 1 進(jìn)行了改正。他采用了一塊用于正常使用,另一塊作為影子盤(pán)存在。

也就是寫(xiě)數(shù)據(jù)的時(shí)候,會(huì)寫(xiě)兩份。所以寫(xiě)的時(shí)候的速度并不快,而且可用容量實(shí)際上就只有一塊盤(pán),空間浪費(fèi)很?chē)?yán)重。

image.png

RAID 2

RAID 0 速度快,但是沒(méi)有備份,RAID 1 有備份,但是可用容量太少。

RAID 2 的改進(jìn)在于引入了校驗(yàn)盤(pán)的概念。當(dāng)數(shù)據(jù)損壞的時(shí)候,可以根據(jù)校驗(yàn)盤(pán)的數(shù)字,恢復(fù)原來(lái)磁盤(pán)上的數(shù)字。

RAID 2采用“漢明碼”來(lái)進(jìn)行校驗(yàn),這種糾錯(cuò)技術(shù)算法比較復(fù)雜,而且需要加入大量的校驗(yàn)位,比如4位數(shù)據(jù)編碼,會(huì)加入3位校驗(yàn)位。

同時(shí)數(shù)據(jù)存儲(chǔ)的時(shí)候,會(huì)把每個(gè)IO下的數(shù)據(jù)以位為單位強(qiáng)行打散在每個(gè)磁盤(pán)。

磁盤(pán)最小的IO單位是512B,如何寫(xiě)入1bit?上層IO可以先經(jīng)過(guò)文件系統(tǒng),然后通過(guò)磁盤(pán)控制器驅(qū)動(dòng)向磁盤(pán)發(fā)出IO。最終IO大小都是N倍的扇區(qū)。即使只要幾個(gè)字節(jié),也需要讀出整個(gè)扇區(qū)

所以每次必須所有聯(lián)動(dòng)起來(lái)一次進(jìn)行存儲(chǔ),如果各磁盤(pán)的主軸沒(méi)有同步,則先讀出數(shù)據(jù)的硬盤(pán)需要等待。所以開(kāi)銷(xiāo)也比較大。

正因?yàn)榇耍壳癛AID2已經(jīng)不怎么使用了。


image.png

RAID 3

RAID 3引入了一種新的校驗(yàn)算法,可以將數(shù)據(jù)盤(pán)中的每個(gè)位做XOR運(yùn)算,然后將結(jié)果寫(xiě)入到校驗(yàn)盤(pán)的對(duì)應(yīng)位置。任何一個(gè)扇區(qū)損壞,可以通過(guò)剩余的位和校驗(yàn)位一起進(jìn)行XOR運(yùn)算來(lái)獲得丟失的位。

同時(shí)RAID 3 把條帶長(zhǎng)度設(shè)置為4K字節(jié),因?yàn)橐话阄募到y(tǒng)剛好是4KB一個(gè)塊,所以如果用4塊數(shù)據(jù)盤(pán),條帶深度為1KB,也就是2個(gè)扇區(qū)。這樣,可以保證連續(xù)寫(xiě)的時(shí)候,以條帶為單位寫(xiě)入,提高并行度

所以RAID 2和RAID 3的每次IO都會(huì)牽動(dòng)所有磁盤(pán)并行讀寫(xiě),每次只能做一個(gè)IO,不適合多IO并發(fā)的情況。

也說(shuō)RAID 2和RAID 3適合IO塊大的情況

一般來(lái)說(shuō),RAID 3 的條帶長(zhǎng)度= 文件系統(tǒng)的大小,就不會(huì)產(chǎn)生條帶不對(duì)齊的現(xiàn)象。減少碎片。

關(guān)于RAID 3的校驗(yàn)盤(pán)有沒(méi)有瓶頸的問(wèn)題

若一個(gè)邏輯塊是4KB,4+1塊盤(pán),文件系統(tǒng)下發(fā)一個(gè)IO至少是以一個(gè)邏輯塊為單位的。所以文件系統(tǒng)下發(fā)一次IO,不管多大都是跨越了所有數(shù)據(jù)盤(pán)的。

  1. 連續(xù)
    1. 連續(xù)讀:尋道時(shí)間忽略,IOPS受限于傳輸時(shí)間,因?yàn)镽AID 3 是把一個(gè)IO分散到N個(gè)數(shù)據(jù)盤(pán)上,即傳輸時(shí)間是單盤(pán)的1/N,即持續(xù)讀的性能是單盤(pán)的N倍。
    2. 持續(xù)寫(xiě):分擔(dān)到N個(gè)盤(pán),也是單盤(pán)的1/N。因?yàn)槊看蜪O寫(xiě),物理磁盤(pán)上的所有分塊都需要更新,包括校驗(yàn)塊,就沒(méi)有瓶頸和熱點(diǎn)的區(qū)別。
  2. 隨機(jī)
    1. 隨機(jī)讀寫(xiě):多個(gè)盤(pán)同時(shí)換道,所以性能相對(duì)于單盤(pán)沒(méi)有提升。而且有的磁盤(pán)不是嚴(yán)格主軸同步的,會(huì)拖累。
    2. 并發(fā)IO:一次IO必定會(huì)占用所有的盤(pán),其他的盤(pán)必須等待,所以根本不能并發(fā)IO

總結(jié)起來(lái)就是RAID 3適合于連續(xù)大塊的讀和寫(xiě),不適合于隨機(jī)IO和并發(fā)IO。

image.png

RAID 4

  • RAID 0屬于激進(jìn)派,為了速度,根本不要備份。
  • RAID 1屬于保守派,需要浪費(fèi)一個(gè)鏡像的容量。
  • RAID 2和RAID 3 屬于中庸派。

RAID 2和RAID 3已經(jīng)解決了校驗(yàn)盤(pán)的問(wèn)題,避免了一塊盤(pán)損壞數(shù)據(jù)全丟失的問(wèn)題。但是對(duì)于無(wú)法得到并發(fā)IO的問(wèn)題還沒(méi)解決。

RAID 2和RAID 3的思想是讓所有數(shù)據(jù)盤(pán)都參與起來(lái)。對(duì)于隨機(jī)小塊讀寫(xiě),每秒產(chǎn)生的IO數(shù)目很大,但是每個(gè)IO的請(qǐng)求數(shù)據(jù)長(zhǎng)度卻很短,如果所有磁盤(pán)同一時(shí)刻都在處理一個(gè)IO,得不償失。不如讓這個(gè)IO直接寫(xiě)入一塊磁盤(pán),其他的做其他的IO。

方法有:

  • 可以增加條帶深度,一個(gè)IO比條帶深度小,所以可以完全被一個(gè)磁盤(pán)所處理。直接寫(xiě)入了一塊磁盤(pán)的Segment中。
  • 增大數(shù)據(jù)的隨機(jī)分布性,不要連續(xù)在一塊磁盤(pán)分布,要和其他IO所用的磁盤(pán)不一樣。

所以 RAID 4 的改進(jìn)是增加了條帶深度,RAID 4相對(duì)于RAID 3 性能幾乎沒(méi)有提升。但是至少讓它可以進(jìn)行并發(fā)IO

image.png

RAID 5

RAID 4相對(duì)于RAID 3 性能幾乎沒(méi)有提升。而且因?yàn)槊總€(gè)IO必定會(huì)占用校驗(yàn)盤(pán), 所以校驗(yàn)盤(pán)成為了瓶頸,而且是熱點(diǎn)盤(pán),容易壞。

這樣看來(lái)RAID 4其實(shí)有些不倫不類(lèi)。

RAID 4的關(guān)鍵錯(cuò)誤在于忽略了校驗(yàn)盤(pán),每個(gè)IO不管怎么樣都會(huì)讀寫(xiě)校驗(yàn)盤(pán)的。

RAID 5的改進(jìn)在于將校驗(yàn)盤(pán)把校驗(yàn)盤(pán)分割開(kāi),依附于數(shù)據(jù)盤(pán)。把條帶做得很大,保證每次IO不會(huì)占滿(mǎn)整個(gè)條帶。

2塊盤(pán)的RAID 5系統(tǒng),對(duì)于寫(xiě)操作來(lái)說(shuō)不能并發(fā)IO,因?yàn)樵L問(wèn)一塊盤(pán)的時(shí)候,校驗(yàn)信息一定在另一塊盤(pán)中。同理,3塊盤(pán)也不能

所以最低可以并發(fā)IO的RAID 5 需要4塊盤(pán),此時(shí)最多可以并發(fā)兩個(gè)IO,并發(fā)的幾率是0.0322。

RAID 5 磁盤(pán)數(shù)量越多,并發(fā)的幾率越大。

[圖片上傳失敗...(image-125f7b-1517815816644)]

RAID 5與RAID 0相比

RAID 5 是繼RAID 0 , RAID 1以后又一個(gè)可以實(shí)現(xiàn)并發(fā)IO的陣式,但是比RAID 1更劃算,比RAID 0更安全。

  • 容量方面:隨著磁盤(pán)數(shù)增加,RAID5浪費(fèi)的是N分之一,而RAID永遠(yuǎn)是二分之一。
  • 性能方便:RAID 5和RAID 0都是使用條帶來(lái)提升性能,但是RAID 6又克服了RAID 0的無(wú)保護(hù)。

RAID 5與RAID 3相比

RAID 5的連續(xù)讀寫(xiě)不如RAID 3,因?yàn)镽AID 3 的條帶深度很小,每次IO可以牽動(dòng)所有的磁盤(pán)為之服務(wù)。

RAID 5 每次IO一般只使用一塊數(shù)據(jù)盤(pán),先放滿(mǎn)一個(gè)Segment,再去下一個(gè)磁盤(pán)的Segment存放,塊編號(hào)是橫向進(jìn)行。

所以RAID 3在IO SIZE大的時(shí)候高性能,RAID 5在隨機(jī)IOPS大時(shí)有高性能。

RAID 5的缺點(diǎn)

RAID 5的缺點(diǎn)是寫(xiě)懲罰:寫(xiě)性能差,因?yàn)槊繉?xiě)一扇區(qū)就要產(chǎn)生其校驗(yàn)扇區(qū),一并寫(xiě)入校驗(yàn)盤(pán)。

新數(shù)據(jù)過(guò)來(lái),控制器立即讀待更新扇區(qū)的數(shù)據(jù),然后讀此條帶的校驗(yàn)數(shù)據(jù)根據(jù)公式新數(shù)據(jù)的校驗(yàn)數(shù)據(jù) = (老數(shù)據(jù) EOR 新數(shù)據(jù)) EOR 老校驗(yàn)數(shù)據(jù) 得到新校驗(yàn)數(shù)據(jù),然后寫(xiě)到磁盤(pán)中。

所以每次寫(xiě)入都需要更新校驗(yàn)盤(pán)。浪費(fèi)3個(gè)其他動(dòng)作,也就是讀老數(shù)據(jù),讀老校驗(yàn)數(shù)據(jù),然后寫(xiě)新數(shù)據(jù)和校驗(yàn)數(shù)據(jù),浪費(fèi)了除了“寫(xiě)新數(shù)據(jù)”之外的操作。

總結(jié):隨機(jī)并發(fā)IO和寫(xiě)性能二者只能取其一。

RAID 5EE

RAID 5的缺點(diǎn)是不能壞兩塊盤(pán),因?yàn)槿绻粔K盤(pán)壞了,可以用其他數(shù)據(jù)校驗(yàn)出。
可在陣式中增加熱備盤(pán),不參與組陣,只有在損壞的時(shí)候立刻頂替,其他盤(pán)恢復(fù)數(shù)據(jù)。如果此時(shí)有請(qǐng)求此盤(pán)的IO,則其他盤(pán)暫代。

  • RAID 5E :讓陣中其他盤(pán)都從各自的領(lǐng)地里面保留出一塊空間,作為熱備盤(pán)。
  • RAID 5EE:熱備盤(pán)融合到數(shù)據(jù)盤(pán)中,如校驗(yàn)盤(pán)一般。
image.png

RAID 6

同樣RAID 6也是為了解決RAID 5只能壞一塊盤(pán)的問(wèn)題。

如果壞了兩塊盤(pán),相當(dāng)于存在兩個(gè)未知數(shù),要求解兩個(gè)未知數(shù)據(jù),一定需要另外一個(gè)不相關(guān)的等式來(lái)求解。

所以使用兩套算法各自算出一個(gè)等式,分別放在兩塊校驗(yàn)盤(pán)中。

優(yōu)點(diǎn)是更安全,缺點(diǎn)是寫(xiě)懲罰更大。

image.png

RAID 卡

軟件RAID運(yùn)行于操作系統(tǒng)底層,將SCSI 或者IDE控制器提交上來(lái)的物理磁盤(pán),虛擬成虛擬磁盤(pán),再提交給卷管理程序。但是

軟件RAID :

  • 占用內(nèi)存空間
  • 占用CPU
  • 無(wú)法把操作系統(tǒng)盤(pán)做成RAID :如果操作系統(tǒng)損壞了,就無(wú)法運(yùn)行。

既然軟件這么多缺點(diǎn),所以人們謀求用硬件來(lái)實(shí)現(xiàn)RAID的方法。
RAID卡就是利用獨(dú)立硬件來(lái)實(shí)現(xiàn)RAID功能的方法。

一般在SCSI卡上增加了額外的芯片用于RAID功能。

image.png

SCSI RAID卡上一定要包含SCSI控制器,因?yàn)槠浜蠖诉B接依然是SCSI的物理磁盤(pán)。

操作系統(tǒng)如何看待邏輯磁盤(pán)

RAID控制器向OS提交的是虛擬邏輯盤(pán),而非所有的物理磁盤(pán)。每個(gè)邏輯盤(pán)對(duì)OS來(lái)說(shuō)都是一塊單獨(dú)的磁盤(pán)。

比如安裝了2塊IDE磁盤(pán)和4塊SCSI磁盤(pán),IDE直接連接到IDE接口,SCSI連接到PCI接口的SCSI卡上。

若無(wú)RAID,可以看到6塊硬盤(pán)。

可以通過(guò)RAID程序把兩塊IDE做成RAID 0 , 變成了2*80G = 160G的磁盤(pán)。

4塊SCSI磁盤(pán)做RAID 5,相當(dāng)于3塊盤(pán)的容量,即216GB。

所以磁盤(pán)管理器其實(shí)可以看到兩塊硬盤(pán),可以格式化為NTFS等文件格式。

與分區(qū)對(duì)比

與分區(qū)不同,分區(qū)是OS在物理磁盤(pán)上做再次劃分。而RAID 卡提供給OS的是任何時(shí)候是一塊或者幾塊的邏輯盤(pán),也就是OS認(rèn)為的物理磁盤(pán)。

OS在磁盤(pán)上還可以進(jìn)行分區(qū),格式化。

LUN:條帶化以后,RAID程序操控SCSI控制器向OS層的驅(qū)動(dòng)程序代碼提交虛擬化之后的虛擬盤(pán)

RAID 控制器如何管理邏輯磁盤(pán)

RAID 卡可以對(duì)邏輯磁盤(pán)進(jìn)行再次的劃分,既然要?jiǎng)澐郑仨殞?duì)某塊磁盤(pán)的某個(gè)區(qū)域劃分給那塊邏輯盤(pán)用心里有數(shù),所以有必要在每塊磁盤(pán)保留一個(gè)區(qū)域,記錄劃分信息、RAID類(lèi)型以及組內(nèi)的磁盤(pán)信息。這種統(tǒng)一的RAID信息格式:DDF 。

RAID卡可針對(duì)總線上某幾塊磁盤(pán)做一種RAID類(lèi)型,然后針對(duì)另幾塊磁盤(pán)做另一種RAID類(lèi)型。

一種RAID類(lèi)型包含的磁盤(pán)共同組成了一個(gè)RAID GROUP ,簡(jiǎn)稱(chēng)RG。

邏輯盤(pán)就是從RG劃分出來(lái)的,原則上不能跨RG來(lái)劃分,因?yàn)镽G的RAID類(lèi)型不一樣,性能就不一樣。

RAID 卡上的內(nèi)存

RAID卡上的內(nèi)存,有數(shù)據(jù)緩存和代碼執(zhí)行內(nèi)存的作用

  • RAID 控制器和磁盤(pán)通道控制器之間需要一個(gè)緩存來(lái)適配。適配不同速率的通信
  • 緩存數(shù)據(jù)IO:緩存隊(duì)列,執(zhí)行或者優(yōu)化合并。

RAID卡的緩存

對(duì)于上層的寫(xiě)IO,有兩種手段來(lái)處理;

  • Write Back模式:將上層發(fā)來(lái)的數(shù)據(jù)保存在緩存中之后,立即通知主機(jī)IO完成,執(zhí)行下一個(gè)IO。實(shí)際上此時(shí)數(shù)據(jù)還在緩存中,沒(méi)有寫(xiě)入磁盤(pán)。RAID卡在空閑的時(shí)候,一條一條或者批量寫(xiě)入磁盤(pán),其實(shí)是欺騙了主機(jī)。如果意外,數(shù)據(jù)丟失,上下數(shù)據(jù)不一致。需要使用電池來(lái)保護(hù)緩存。
  • Write Through模式:只有在寫(xiě)入到磁盤(pán)之后才會(huì)通知主機(jī),但是緩存的提速作用沒(méi)有優(yōu)勢(shì)。緩沖作用依舊生效。

對(duì)于讀緩存

  • 有一種算法叫PreFetch:預(yù)取,讀緩存。其實(shí)就是認(rèn)為主機(jī)下一次IO,有很大的幾率是讀取到所在磁盤(pán)位置的相鄰數(shù)據(jù)。所以在主機(jī)還沒(méi)發(fā)出讀請(qǐng)求的時(shí)候,就先把相鄰的數(shù)據(jù)讀到緩存中。對(duì)大文件應(yīng)用很適用。

  • 還有一種緩存算法:假設(shè)主機(jī)的下一次IO可能還會(huì)讀取上一次讀過(guò)的數(shù)據(jù)。讀了一段數(shù)據(jù)到緩存之后,如果數(shù)據(jù)被主機(jī)的寫(xiě)IO更改了,不會(huì)立即寫(xiě)入磁盤(pán),而是留在緩存中。等到主機(jī)有一段時(shí)間不用了,則寫(xiě)入磁盤(pán)中。

中高端的RAID卡一般有256M的RAM作為緩存。

image.png

卷管理層

到目前為止,我們已經(jīng)可以通過(guò)RAID卡對(duì)外呈現(xiàn)一個(gè)一個(gè)的邏輯盤(pán)了,但是邏輯盤(pán)存在一個(gè)非常大的問(wèn)題就是不夠靈活。

如果一開(kāi)始就劃分一個(gè)100G的邏輯盤(pán),如果數(shù)據(jù)盛不下了,此時(shí)把其他磁盤(pán)上未使用的空間挪一部分到邏輯盤(pán)上。

但是從RAID卡里面增加邏輯盤(pán)容量很費(fèi)功夫。即使實(shí)現(xiàn)了,上層文件系統(tǒng)也無(wú)法立刻感知到。所以對(duì)要求不間斷服務(wù)的服務(wù)器不適用。

歸根結(jié)底,因?yàn)镽AID控制器是由硬件來(lái)實(shí)現(xiàn)RAID的,所以操作起來(lái)不靈活,如果OS把RAID控制器提交上來(lái)的邏輯盤(pán),加以組織和再分配。就非常靈活,其實(shí)就是加一層靈活的管理層。

卷管理層:Volume Manager,LDM(邏輯磁盤(pán)管理)

LVM開(kāi)始是Linux系統(tǒng)上的一種實(shí)現(xiàn),后來(lái)移植到AIX和HPUX等系統(tǒng)

  • PV:OS識(shí)別的物理磁盤(pán)(或者RAID提交的),類(lèi)似一塊面團(tuán)
  • VG:多個(gè)PV放到一個(gè)VG里面,VG(volume group)卷組。VG會(huì)將所有的PV首尾相連,組成邏輯上連續(xù)編址的存儲(chǔ)池。
  • PP:物理區(qū)塊,Physical Partition,在邏輯上將一個(gè)VG分割為連續(xù)的小塊。(把一大盆面掰成大小相等的無(wú)數(shù)塊小面塊)。LVM會(huì)記錄PP的大小和序號(hào)的偏移。如果PV本身是經(jīng)過(guò)RAID控制器虛擬化而成的LUN,扇區(qū)可能是位于若干條帶中,物理上不一定連續(xù)。
  • LP:邏輯區(qū)塊,可以對(duì)應(yīng)一個(gè)PP,也可以對(duì)應(yīng)多個(gè)PP,前者對(duì)應(yīng)前后沒(méi)有什么區(qū)別。后者又分為兩種情況。
    • 多個(gè)PP組成一個(gè)大LP,像RAID 0
    • 一個(gè)LP對(duì)應(yīng)幾份PP,這幾份PP每一份內(nèi)容一樣,類(lèi)似RAID1。然后用一個(gè)LP來(lái)代表他們,往這個(gè)LP寫(xiě)數(shù)據(jù),也就是寫(xiě)到了這個(gè)LP對(duì)應(yīng)的幾份PP中。
  • LV:若干LP組成LV (邏輯卷),也就是LVM所提供最終可以用來(lái)存儲(chǔ)數(shù)據(jù)的單位。生成的邏輯卷,在主機(jī)看來(lái)還是普通的磁盤(pán),可以進(jìn)行分區(qū)和格式化。

大小可以隨時(shí)變更,也不需要重啟OS。前提是還有備用的PP。

操作很簡(jiǎn)單:創(chuàng)建PV,加入VG ,創(chuàng)建LV,格式化,隨便擴(kuò)展。

最大的好處:生成的LV可以跨越RAID卡提交給OS的物理或者邏輯盤(pán)。

image.png

卷管理軟件的實(shí)現(xiàn)

那么卷管理軟件到底怎么實(shí)現(xiàn)的呢?

LVM會(huì)記錄某塊物理盤(pán)的名稱(chēng)、容量,誰(shuí)是誰(shuí),從哪里到哪里是屬于這塊盤(pán)的,地址是多少等。這些信息記錄在磁盤(pán)某個(gè)區(qū)域,LVM中這個(gè)區(qū)域叫VGDA

LVM可以通過(guò)讀取每塊物理磁盤(pán)上的這個(gè)區(qū)域來(lái)獲得LVM的配置信息,比如PP大小,初始偏移,PV的數(shù)量,排列順序和映射關(guān)系等。

LVM初始化的時(shí)候讀取信息,然后在緩存中生成映射公式,從而完成LV的掛載。如果此時(shí)上層來(lái)一個(gè)IO,LVM就需要通過(guò)緩存中的映射關(guān)系判斷地址對(duì)應(yīng)到實(shí)際物理磁盤(pán)的哪個(gè)地址。然后通過(guò)磁盤(pán)控制器驅(qū)動(dòng)直接給這個(gè)地址發(fā)數(shù)據(jù)。這個(gè)地址被RAID控制器接收到了,還需要做一次轉(zhuǎn)換。

總之:卷管理軟件就是運(yùn)行在OS磁盤(pán)控制器驅(qū)動(dòng)程序之上的軟件,作用是實(shí)現(xiàn)RAID卡硬件管理磁盤(pán)空間所實(shí)現(xiàn)不了的靈活功能,比如隨時(shí)擴(kuò)容。

磁盤(pán)在VM這一層處理之后,稱(chēng)為卷更為恰當(dāng)。因?yàn)榇疟P(pán)控制器看待磁盤(pán),就是盤(pán)片+磁頭,而卷管理軟件看待磁盤(pán),會(huì)認(rèn)為它是一個(gè)線性的大倉(cāng)庫(kù),而不管倉(cāng)庫(kù)用什么方式存儲(chǔ)。

倉(cāng)庫(kù)的每個(gè)房間都有一個(gè)地址(LBA),VM只需要知道一共有多少,讓庫(kù)管員(磁盤(pán)控制器驅(qū)動(dòng))從某段地址(LBA地址段)存取貨物(數(shù)據(jù)),那么庫(kù)管員立即操控機(jī)器(磁盤(pán)控制器)來(lái)各個(gè)房間取貨物(數(shù)據(jù)),這就是VM的作用。

** 即從底到上依次是:物理磁盤(pán)、磁盤(pán)控制器、IO總線、總線驅(qū)動(dòng)、磁盤(pán)控制器驅(qū)動(dòng)、卷管理程序**

在底層磁盤(pán)擴(kuò)容之后,磁盤(pán)控制器驅(qū)動(dòng)程序會(huì)通知VM已經(jīng)增大了多少容量

擴(kuò)大、收縮卷需要其上的文件系統(tǒng)來(lái)配合。

MBR 和VGDA

分區(qū)管理是最簡(jiǎn)單的卷管理方式,分區(qū)就是將一個(gè)磁盤(pán)抽象為一個(gè)倉(cāng)庫(kù),然后將倉(cāng)庫(kù)劃分為一庫(kù)區(qū)、二庫(kù)區(qū)等。

分區(qū)管理和卷管理最大的不同在于,分區(qū)管理只能針對(duì)單個(gè)磁盤(pán)進(jìn)行劃分,而不能將磁盤(pán)進(jìn)行合并再劃分。

分區(qū)信息保存在磁盤(pán)上,位于LBA1這個(gè)扇區(qū),又稱(chēng)為MBR也就是主引導(dǎo)記錄。

BIOS代碼都是固定的,所以必定要執(zhí)行MBR上的代碼,新出來(lái)的規(guī)范EFI可以靈活定制從那個(gè)磁盤(pán)的哪個(gè)扇區(qū)啟動(dòng),

MBR除了包含啟動(dòng)指令代碼,還包含了分區(qū)表。啟動(dòng)的時(shí)候,程序會(huì)跳轉(zhuǎn)到活動(dòng)分區(qū)去讀取代碼做OS啟動(dòng)。所以必須有一個(gè)活動(dòng)分區(qū)。

卷管理軟件在劃分了邏輯卷以后同樣需要記錄卷怎么劃分的,使用一種叫VGDA的數(shù)據(jù)結(jié)構(gòu)。

高級(jí)VM沒(méi)有拋棄MBR,而是在此基礎(chǔ)上,增加了類(lèi)似VGDA的這樣的數(shù)據(jù)結(jié)構(gòu)來(lái)動(dòng)態(tài)管理磁盤(pán)。

文件系統(tǒng)

文件系統(tǒng)相當(dāng)于理貨員,與庫(kù)管員一起完成管理糧庫(kù)的工作。

應(yīng)用程序只需要告訴文件系統(tǒng)需要放多少的數(shù)據(jù)或者讀多少數(shù)據(jù),而文件系統(tǒng)不需要關(guān)心倉(cāng)庫(kù)到底在那里,放到那個(gè)房間。

文件系統(tǒng)需要將數(shù)據(jù)存放在那里記錄下來(lái)。

如果存取的數(shù)據(jù)量大,每次記錄的數(shù)很大。將8個(gè)房間劃分為一個(gè)邏輯房間,稱(chēng)作“簇”

數(shù)據(jù)如果找連續(xù)的簇進(jìn)行存放,則還必須花時(shí)間把整理倉(cāng)庫(kù),整理出連續(xù)的空間來(lái),所以不如在描述數(shù)據(jù)存放的方式,比如數(shù)據(jù) 10000 簇2,6,18,這樣就可以解決空間浪費(fèi)的問(wèn)題,而且不需要經(jīng)常整理庫(kù)。

但是這樣又存在一個(gè)問(wèn)題,數(shù)據(jù)描述的方式變得長(zhǎng)短不一,可以為了簡(jiǎn)化處理,需要給一個(gè)定長(zhǎng)的描述。比如數(shù)據(jù) 100000 首簇1,然后在在首簇做一個(gè)標(biāo)記,寫(xiě)明下一個(gè)簇是多少號(hào),然后找到下一個(gè)簇,根據(jù)簇的路標(biāo),到下下個(gè)簇進(jìn)行取貨,依此類(lèi)推。

如果要尋找空的簇,只需要找格子上沒(méi)有寫(xiě)字的簇即可。

總結(jié)一下,

描述貨物的三字段:名稱(chēng)、數(shù)量、存放的第一個(gè)簇。

進(jìn)一步優(yōu)化:

貨物雖然有可能存放在不連續(xù)的簇中,但是這些簇往往也是局部連續(xù)的。所以如果是一段一段的找而不是一簇一簇的找,會(huì)節(jié)約時(shí)間。比如簇段13,簇段57等等。

所以記錄數(shù)據(jù)存放信息的本子就是元數(shù)據(jù),也就是用來(lái)描述數(shù)據(jù)怎么組織的數(shù)據(jù)。

如果記錄本丟失,縱然貨物無(wú)損,也無(wú)法取出,因?yàn)闊o(wú)法判斷貨物的組織結(jié)構(gòu)了。

文件系統(tǒng)的IO方式

IO Manager是OS內(nèi)核中專(zhuān)門(mén)來(lái)管理IO的模塊,可以協(xié)調(diào)文件系統(tǒng)、磁盤(pán)驅(qū)動(dòng)的運(yùn)作,流程如下

  • 應(yīng)用調(diào)用文件系統(tǒng)接口
  • IO Manager把請(qǐng)求發(fā)送給文件系統(tǒng)模塊
  • 文件系統(tǒng)映射為卷的LBA
  • 文件系統(tǒng)向IO Manager調(diào)用卷管理軟件模塊的接口
  • 卷管理軟件將卷對(duì)應(yīng)的LBA反映為實(shí)際的LBA,并請(qǐng)求調(diào)用磁盤(pán)控制器驅(qū)動(dòng)程序。
  • IO Manager向磁盤(pán)控制器驅(qū)動(dòng)程序請(qǐng)求將對(duì)應(yīng)的LBA段從內(nèi)存寫(xiě)入到物理磁盤(pán)。

文件系統(tǒng)IO:

  • 同步IO:進(jìn)程調(diào)用了IO以后,必須等到下位程序返回信號(hào),否則一直等待,被掛起。
    如果下位程序沒(méi)有得到數(shù)據(jù)
    • 阻塞IO:下位程序等待自己的下位程序返回?cái)?shù)據(jù)。
    • 非阻塞IO:通知上位程序數(shù)據(jù)沒(méi)收到。
  • 異步IO:請(qǐng)求發(fā)出以后,執(zhí)行本線程的后續(xù)代碼,直到時(shí)間片到或者被掛起。這樣應(yīng)用程序的響應(yīng)速度不會(huì)受IO瓶頸的影響,即使這個(gè)IO很長(zhǎng)時(shí)間沒(méi)有完成。

異步IO和非阻塞IO另一個(gè)好處:文件系統(tǒng)不需要等待及時(shí)返回?cái)?shù)據(jù),可以對(duì)上次的IO進(jìn)行優(yōu)化排隊(duì)。

Direct IO:文件系統(tǒng)有自己的緩存機(jī)制,數(shù)據(jù)庫(kù)也有緩存,IO發(fā)出之前已經(jīng)經(jīng)過(guò)自己的優(yōu)化了,如果又在文件系統(tǒng)層面再優(yōu)化一次,多次一舉。使用Direct IO以后IO請(qǐng)求、數(shù)據(jù)請(qǐng)求以及回送數(shù)據(jù)不被文件系統(tǒng)緩存,直接進(jìn)入應(yīng)用程序的緩存中,可以提升性能。此外,在系統(tǒng)路徑上任何一處引入了緩存,若采用write back模式,都存在數(shù)據(jù)一致性的問(wèn)題,因?yàn)镈irect IO繞過(guò)了文件系統(tǒng)的緩存,降低了數(shù)據(jù)不一致性。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評(píng)論 3 417
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,423評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,991評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,207評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,419評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,653評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,901評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容