隨著手頭的錢越來越多,很多人開始蠢蠢欲動想要構(gòu)建個人或者家庭級別的磁盤陣列用來擴展PC存儲,或者說想要在家里安裝一個私人的本地NAS,或者有不可名狀的文件需要落地家庭IDC環(huán)境,又或者單純是個土豪,需要在大得不得了的地下室做一個隨時可以點播的家庭影院。這個時候,海量的存儲需求就來了,但是往往個人或者家庭對于如何設(shè)置合理的、高可用的存儲架構(gòu)沒有概念,導致往往用的是裸盤陣列。結(jié)果就是一旦掛了就全掛了,哪怕運氣好不掛,隨著時間的流逝,最終總有一點會出現(xiàn)磁盤問題,那個時候集體更換遷移又是一個讓人想要撞墻的事情。
所以筆者在這篇短文里,會用最短的篇幅給讀者介紹,來自于企業(yè)環(huán)境并且已經(jīng)應用許久的RAID卡磁盤陣列技術(shù)!
一、概念和支持
首先要明確一點,那就是多數(shù)的PC主板是不支持RAID陣列的,但是很多高端的主板會有原生支持RAID技術(shù),具體的情況需要查詢主板提供商。而很多服務器級別主板,類似于X399這種,往往是支持的,甚至有些不需要額外購置raid卡也能進行raid陣列管理。
但是從現(xiàn)實的角度來說,無論磁盤支持不支持raid卡設(shè)置,我們都應該買一塊PCI接口的真正的RAID卡來進行磁盤陣列管理。因為主板即便支持RAID,基本上也都是軟件層面的軟raid,對于磁盤的壽命和性能有不小的折扣損失。況且隨著多顯卡并火漸漸退出主流市場,不再被黃老板等支持,目前主流主板的PCI接口一定是有多的,同時raid卡便宜且自帶斷電保護電池,可謂是性價比極高的硬件了。
二、RAID種類介紹和優(yōu)劣
歷史上RAID陣列的種類非常多,總計如下:
- 單種類RAID陣列:RAID0, RAID1, RAID2, RAID3, RAID4, RAID5, RAID6
- 混合型RAID陣列:RAID7, RAID10/01, RAID50, RAID53, RAID60
但是由于成本和性能的優(yōu)劣原因,目前單種類RAID陣列主要就剩下RAID0,RAID1,RAID5,以及比較有意思的RAID6。筆者也會著重講解一下這幾種陣列的原理和優(yōu)劣。
1、RAID0

- RAID0就是【掛裸盤】,非嚴格意義來說。RAID0就是一串磁盤陣列,沒有全量備份,沒有增量備份,也沒有主從備份,什么都沒有。但是確實是一種規(guī)范的RAID方式。
- 性能來說都等通過單塊磁盤的讀寫,壞了就壞了,數(shù)據(jù)沒救?;蛘弑仨毻ㄟ^物理數(shù)據(jù)恢復。軟件層面往往無力回天。
- 主要應用于服務器單固態(tài)磁盤,且只有高讀寫需求,沒有數(shù)據(jù)安全需求。以及在大數(shù)據(jù)環(huán)境下做分布式磁盤。
- 最小磁盤需求量:
2、RAID1

- RAID1容易理解的來說,就是【無線備備備備份制】。無論你有多少塊磁盤組成了陣列,每個磁盤都在備份同一個磁盤的內(nèi)容、同步同一塊盤的內(nèi)容。
- 最少磁盤需求量:
- 讀寫速度:磁盤數(shù)量為n,單塊磁盤讀寫速度為s,讀寫速度
- 陣列容量計算:假如在一格RAID1陣列中,各個磁盤的容量分別為
,那么這個陣列的存儲大小是
。低到你懷疑人生。
3、RAID5

- RAID5是目前【最為推薦】的一種磁盤陣列選擇。主要原因是磁盤容量利用率高+磁盤損毀后可用性較高
- 具體原理:RAID 5不是對存儲的數(shù)據(jù)進行備份,而是把數(shù)據(jù)和相對應的[奇偶校驗]信息存儲到組成RAID5的各個磁盤上,并且奇偶校驗信息和相對應的數(shù)據(jù)分別存儲于不同的磁盤上。當RAID5的一個磁盤數(shù)據(jù)發(fā)生損壞后,可以利用剩下的數(shù)據(jù)和相應的奇偶校驗信息去恢復被損壞的數(shù)據(jù)。
- 最小磁盤需求量:
- 最大可用磁盤損毀數(shù):
- 有效磁盤容量:假如各個磁盤的容量分別為
,那么這個陣列的存儲大小是
- 讀寫速度:在沒有回寫緩存的情況下,寫入會比裸盤稍微慢一點。所以推薦上RAID卡。
4、神奇RAID6
- 一般來說RAID6也是一種使用得比較多的磁盤陣列模式。適合對于數(shù)據(jù)安全和可用性有更高要求的用戶
- RAID6相比RAID5還增加了一塊獨立的奇偶校驗磁盤。
- 最小磁盤需求量:
- 最大可用磁盤損毀數(shù):
- 有效磁盤容量:假如各個磁盤的容量分別為F1,F2,F3...Fn,那么這個陣列的存儲大小是
- 讀寫速度:RAID6的寫入性能受到磁盤陣列的架構(gòu)影響,會有非常大的存在區(qū)間,設(shè)置合理的話會有非常優(yōu)異的速度。
- 實現(xiàn)原理解釋:
在RAID5里面用來校驗的磁盤機制,主要使用了異或計算,從而能夠容忍任意一塊磁盤的損毀情況,并且在換盤后通過rebuild來對新盤進行重構(gòu)。但是在RAID6中,因為需要容忍兩塊磁盤損毀,第二塊奇偶校驗磁盤的算法就有所不同,比較復雜了。
如果出現(xiàn)一塊磁盤損壞的情況,就可以和RAID5一樣處理,Rebuild完事。
那么關(guān)鍵來了,如果兩塊磁盤掛了的話,就需要用到全新的技術(shù)了。
我們首先引入一個的伽羅瓦域(有限域),對于一個k次不可約不等式
,
。同時一塊數(shù)據(jù)可以記錄成
,其中
是0或者1,對應伽羅瓦域里面的元素
,令
對應的磁盤條帶里面的數(shù)據(jù),用這個方法編碼成域里面的元素。如果
是域的某一個生成元,并且
表示域的加法(可以看成異或運算),并列表示域的乘法,那么
和
可以表示成:
所以,如果兩塊磁盤失效的時候,就需要通過P和Q來重新把數(shù)據(jù)算出來,這個過程使用了域論,相對比較復雜。我們通過例子來說明,假如在一個塊磁盤組成的磁盤陣列
里面,如果
和
(其中
),通過域算法我們可以求出兩個域A和B,其中
且
。
展開兩式可得:
等式的兩端同時乘上
,加到上一個等式可得:
,從而可以求出
,然后再求出
。
這個過程里面對Q的計算非常耗費CPU,所以一定要上硬件RAID,因為RAID帶有專用處理器專門干這個。
5、融合磁盤陣列RAID10/01


- RAID10是先鏡射再分割數(shù)據(jù),再將所有硬盤分為兩組。RAID01正好相反。
- RAID10單盤故障的時候依然可以正常使用,其他盤照舊。RAID01單盤故障的時候,同組所有盤都不工作了,是垃圾RAID策略。
- 所以正常的廠商不支持RAID01。
6、RAID50/60
- 顧名思義就是RAID5/RAID6和RAID0的技術(shù)組合,RAID50最高故障盤承受數(shù)量
(任何一邊不到2),RAID60最高故障承受數(shù)量
(任何一邊不到3)。
- 讀寫性能非常高。
三、故障解決方案
好了,現(xiàn)在我們都知道各種磁盤RAID陣列的優(yōu)劣和構(gòu)建方式了。對于家庭和個人來說我覺得還是RAID5最性價比高,但是如果你的磁盤陣列里磁盤數(shù)量大于8了,其實就可以考慮RAID6了。其他的RAID構(gòu)成的話考慮到性價比,其實對個人用戶不太合適。但是安全性和可用性需求極高的企業(yè),除了hadoop用的分布式裸盤以外,其他最好還是RAID10或者RAID1,甚至RAID60。
下面來說說遇到故障:
- 首先是插拔一下,注意斷電保護,不要粗暴對待機械磁盤。
- 插拔解決不了的話直接打電話售后,正常的磁盤至少有三年以上維保,盡情換,想必在看完這篇以后你的家庭存儲陣列應該是不怕一塊盤的故障的。
- 我沒說怎么配置?好的,接下來又有東西可以寫了。如果是服務器有很多廠商提供的工具,如果是個人的話在你安裝好陣列卡以后應該也有對應的工具可以使用,有些是進系統(tǒng)的可視化軟件,有些是BOIS設(shè)置,具體看情況。
最后,公式部分來自維基,很通俗易懂,思路也很清晰,有空去看一下域論也挺好(不會去看的