RAID磁盤陣列還有什么玩法?
那么今天呢,我們就談一談什么是RAID,而RAID又該怎么用。
本篇小科普分為以下內(nèi)容:
1、什么是RAID
2、RAID都有哪些類型(上)
a) RAID0
b)RAID1
c)RAID01/10
3、熱備份與冷備份(Hot Spare / Cold Spare)
------以下是今天推送內(nèi)容------
4、RAID都有哪些類型(下)
a)RAID5
b)RAID50
c) RAID6
5、軟件RAID與硬件RAID
6、我該怎么用RAID
RAID都有哪些類型(下)
昨天給大家介紹的都是簡單的RAID,即除了條帶化存儲(RAID0),就是鏡像存儲(RAID1),要么就是這兩個搞搞在一起……今天呢,我們就來一些進階的內(nèi)容,也就是有著冗余容錯算法支撐的RAID類型。下面就一起來看看吧!
RAID5(奇偶校驗存儲)
在談RAID5之前,我們要先來講一下什么是奇偶校驗。而在講奇偶校驗之前呢,我們又要講一下什么是“異或”操作
希望這個邏輯鏈條沒有把大家弄糊涂哈……
在計算機中,用晶體管能實現(xiàn)的操作并不是人類世界中我們所認知的“加”“減”“乘”“除”,而是二進制的0和1的“交響”。那么“異或“操作呢,就是二進制世界中的一種操作。它的法則只有八個字:”相同為0,相異為1“。如下表:
這里的A與B值就代表了兩個位,從中可以發(fā)現(xiàn),A與B一樣時,異或結果為0,A與B不一樣時,異或結果就是1,而且知道異或結果和A與B中的任何一個數(shù)值,就可以反推出另一個數(shù)值。比如A為1,異或結果為1,那么B肯定為0,如果異或結果為0,那么B肯定為1。這就是異或編碼與校驗的基本原理。
知道了異或操作,我們就可以拿它來做點事情了。想一個問題,如果我想知道一個01串中有奇數(shù)還是偶數(shù)個1,可以怎么做?對的,就是用異或。將這個01串每一位異或,如果最終答案是1,那么這個01串中就有奇數(shù)個1;如果最終是0,則意味著有偶數(shù)個1。那么這個最終結果呢,就是奇偶校驗的值。大家可以自己手動計算一下試試,礙于篇幅這里就不再做正確性證明了。
于是RAID5的算法描述如下:P = D1 xor D2 xor D3 xor … xor Dn(D1-Dn為數(shù)據(jù),P為奇偶校驗值,xor為異或運算)。因此,RAID5陣列需要n塊硬盤存儲數(shù)據(jù)(D1-Dn),再多一塊盤來存儲校驗數(shù)據(jù)P,總計需要n+1塊硬盤。
同樣,當RAID5中任何一塊硬盤壞掉,可以通過對剩余硬盤的數(shù)據(jù)做XOR異或操作來得知損壞硬盤中的數(shù)據(jù)。因此,RAID5具有壞掉一塊硬盤的冗余容錯能力。
總結一下呢,就是RAID5的空間利用率為(n-1)/n,容錯率為1/n。由于XOR異或操作最少需要兩個操作數(shù),因此RAID5至少需要3個硬盤。在浪費一半存儲容量來提供數(shù)據(jù)保護的RAID10方案面前,RAID5可謂是性價比大大增加。因為不管你有多少塊盤,只需要拿出1塊來存放冗余數(shù)據(jù)即可,剩下的都可以利用起來。當然,壞處就是你只能壞一塊盤,一旦在降級狀態(tài)下的重建過程中壞掉第二塊盤,你的所有數(shù)據(jù)就駕鶴西去了。
值得注意的是,RAID5的讀取性能非常優(yōu)秀,接近于RAID0,理論上可以達到單塊硬盤的n-1倍;但是在降級狀態(tài)下,因為讀取每一位數(shù)據(jù)都要進行異或運算,速度將會大大降低。而由于每次寫入數(shù)據(jù)都要進行異或運算,寫入性能可謂是慘不忍睹。
RAID50
相信看完了昨天的RAID10之后,大家也能對RAID50猜個八九不離十了吧~對的,RAID10是用2塊硬盤組RAID1,之后再組RAID0;而RAID50就是用3塊硬盤組成RAID5陣列,之后再用多個RAID5陣列組成RAID0。如圖所示:
看完圖,想必大家已經(jīng)能看出來,RAID50的限制是最少6塊硬盤,同時硬盤的數(shù)量要是3的倍數(shù)。而它的空間利用率達到了2/3,容錯率也達到了1/3,可謂是比較平衡的一種大量硬盤存儲的解決方案了。畢竟如果硬盤數(shù)量多,你做RAID5要求只能壞一塊硬盤,還是太苛刻了不是嘛。
RAID6
***一種RAID方案呢,我們介紹一下RAID6。首先來看RAID6的各種參數(shù):需要至少4塊硬盤,其中有2塊存儲冗余數(shù)據(jù)(比RAID5多了一塊);同時允許最多2塊硬盤壞掉。也就是說,RAID6的空間利用率為(n-2)/n,容錯率為2/n。那么它是如何實現(xiàn)的呢?
首先,我們將這兩塊盤設為P與Q;P的校驗值與RAID5的算法是一樣的,就是存儲XOR異或數(shù)據(jù);但是Q采用的就不是這個算法了,畢竟如果一樣的話就沒有意義了?;驹硎嵌淮畏匠探M的求解,也就是aX+bY=c,dX+eY=f,而c和f就分別對應著P與Q存儲的校驗值。但是普通的乘法會導致校驗容量的累加,所以它采用了基于伽羅華域的乘除法,具體理論需參考群、環(huán)、域、有限域等數(shù)學理論,這里我們就不再細說了。
而RAID6的具體性能呢,首先讀取性能與RAID5相似,理論上依然是不降級的情況下是單塊硬盤的n-2倍,較為優(yōu)秀;而寫入性能由于加入了基于伽羅華域的乘除法,計算相比XOR異或計算更為復雜,因此比起RAID5來說更是慢上加慢。
RAID類型的科普到這里就結束了,希望這眾多的RAID類型沒有將大家繞暈……需要注意的是,不管是哪種類型的RAID,陣列內(nèi)的所有磁盤都需要相同的容量。如果你用不同容量的磁盤做RAID,那么會以容量小的那個為基準,這樣可是很浪費的哦!不過,群暉為我們提供了一種不同容量硬盤組RAID的方案,我們之后會在講解NAS的視頻中為大家進行科普,還請大家耐心等待我們的視頻呦!
同時,群暉還提供了一個非常實用的小工具,專門用來計算RAID的容量。只需兩步就可以計算出你想要的RAID類型的最終可用空間啦,大家可以戳文章底下的原文鏈接,去試試呦!
軟件RAID與硬件RAID
讀到這里大家可能發(fā)現(xiàn)了一個問題:既然RAID5、RAID6的寫性能如此不堪,那么怎么還會成為各大公司大數(shù)據(jù)存放的最常用解決方案之一呢?別急,這時硬件RAID就派上用場了。接下來我們就一起了解一下吧。
含義
首先,我們先來了解一下相對簡單的軟件RAID。軟件RAID,顧名思義就是用軟件實現(xiàn)的RAID,陣列信息等除了在硬盤上保存一份外,剩余的是存儲在操作系統(tǒng)里的。以Win10為例,在Win10的專業(yè)版中(家庭版不提供此功能),Win+X調出菜單中的磁盤管理就提供了軟RAID的功能。
其中,帶區(qū)卷就是我們所說的RAID0,鏡像卷就是我們所說的RAID1,而RAID-5卷……不用我多說了吧。不過需要注意的是,RAID-5卷只有在Server版的Windows中才提供,也就是Win2003,Win2008 / Win2008R2以及Win2012中才可以使用,普通的Win7、Win8.1以及Win10是不能用RAID-5卷的。
知道了軟RAID,那什么是硬件RAID呢?相比較而言,硬件RAID就是有專門的RAID擴展卡插在主板上,然后向外提供SATA / SAS接口。它可以替代主板南橋提供的SATA接口,通過安裝專門的驅動來支持掛載在卡上的硬盤。同樣,磁盤的陣列信息除了在硬盤上保存一份外,另一份就保存在硬件RAID卡里,而不是操作系統(tǒng)里了。
差別
那么知道了什么是軟硬RAID,它們倆差別在哪呢?別急,我們慢慢分析。在RAID0、RAID1以及RAID10中,軟硬RAID差別不大,甚至硬RAID控制器的吞吐量不如X86的系統(tǒng),從而性能甚至略輸軟RAID。而在需要大量計算的RAID5、RAID6上,硬件RAID將完勝軟件RAID。這是為什么呢?
首先,硬件RAID卡擁有自己的處理器,而這塊小處理器是專門進行XOR異或操作的(或是RAID6的校驗,這要看硬件RAID卡支持的RAID種類),因此比起我們的X86 CPU來說甚至還要快,同時不占用你的系統(tǒng)資源。也就是硬件RAID卡將需要大量計算的XOR操作或是RAID6的校驗操作移至自己的小處理器內(nèi),解放了我們的CPU性能。
其次呢,是最重要的一點,就是硬件RAID控制器擁有自己的緩存,而且有電池或者SLC的SSD來對緩存進行保護。這相當于給你的臺式機內(nèi)存加裝電池,或者類似Win7的關機休眠功能,關機后,內(nèi)存仍可以得到供電。重新開機后,打開的程序都還在。
因此硬件RAID控制器可以把上述RAID5頻繁讀寫操作往緩存里面塞,主要針對不連續(xù)磁盤塊的寫操作和以及校驗操作,如果夠大的話,會預讀一部分校驗數(shù)據(jù)到緩存里面。順序讀寫磁盤速度是可以接受的(因為磁盤額外尋道時間少),所以,我寫10次校驗數(shù)據(jù)不連續(xù)的寫操作,可能都是寫到帶電池的高速緩存中。
而軟RAID呢,控制調度是操作系統(tǒng),但是高速緩存可不是內(nèi)存哦,因為你的服務器內(nèi)存木有電池。所以軟RAID針對每次寫操作都會要求驅動給一個數(shù)據(jù)寫入的確認,軟RAID驅動會把這個請求扔給硬盤,問它剛才寫入1,2,3,4號盤的數(shù)據(jù)是不是都寫入了?如果寫入了給一個確認。它會等到***才執(zhí)行完的那塊硬盤給出確認后,再回復操作系統(tǒng)說,數(shù)據(jù)寫完了。結果就是相當于沒有內(nèi)存,因為每次都要等磁盤確認響應。
總結來說就是,硬件RAID可以在高速緩存中合并非連續(xù)寫和校驗操作,成為連續(xù)的寫操作一次寫入硬盤;而軟件RAID則要確認每一次數(shù)據(jù)和校驗寫是否都寫入到磁盤上去了,還要額外附加一些讀操作。這樣一看,是不是高下立判了?
我該怎么用RAID
終于到了大家心心念念想看的部分了,就是RAID具體的設置步驟。軟件RAID就不再細說了,網(wǎng)上有很多教程,上一節(jié)中也給大家簡單提及了一下;我們這里就著重講解一下硬件RAID的設置方式。
注意!Intel、AMD的主板所支持的RAID并不是傳統(tǒng)意義上的硬件RAID。雖然它的陣列信息保存在主板BIOS里而非操作系統(tǒng)里,但由于它沒有專門的運算處理器、內(nèi)存緩存以及電池,實際上校驗信息的計算還是交給了我們的CPU。因此,極度不建議大家使用主板上自帶的RAID5,寫入性能將會讓你分分鐘懷疑人生的……當然,RAID0 / RAID1 / RAID10還是可以嘗試的~
首先我們要在BIOS中,將磁盤模式由IDE或者AHCI改為RAID。
保存重啟之后,就可以看到具體的RAID信息,在這一屏上就可以看到當前的RAID狀態(tài):
此時按下Ctrl+I(注意是GHI的I不是LMN的L也不是123的1),將進入RAID配置環(huán)節(jié):
接下來選擇Create就可以創(chuàng)建我們的RAID卷啦??梢允褂梅较蜴I+回車,也可以使用1234來選擇呦。
上圖為組建RAID的基本信息,其中***選項為RAID磁盤取名,一般選擇默認即可?;剀嚭筮M入下一個選項,在第二個選項中按左右鍵可以選擇RAID0 / RAID1 / RAID10;第三個選項按回車進入后,需要通過空格鍵選擇需要組建RAID的磁盤。***在選項Create Volume回車,并且按“Y”鍵保存。至此,你的硬盤已經(jīng)成功組建RAID啦,退出重啟即可。需要注意的是,創(chuàng)建RAID陣列所需的磁盤中的所有數(shù)據(jù)將被清空,所以大家在嘗試之前一定要備份好自己的數(shù)據(jù)哦!
以上就是RAID科普的全部內(nèi)容了,相信有不少朋友已經(jīng)被繞暈了吧?別擔心,這期推送的內(nèi)容其實并不難,實戰(zhàn)一下你就明白了。不過我們必須要先提醒大家注意數(shù)據(jù)安全哦!萬一在折騰的過程中把數(shù)據(jù)弄丟了那就得不償失了。