詳解幾種常見的RAID

目錄

•寫在前面

•RAID是什麼

•RAID的優點

•RAID-0

優勢

缺點

•RAID-1

優點

缺點

•RAID1+0以及RAID0+1

優點

•RAID-5

•RAID-6

優點

缺點

•預備磁盤

•爲什麼分軟件和硬件


•寫在前面

很多時候,我們所使用或者輸出的數據容量非常大,動不動就幾GB,有時候磁盤容量不夠用,那麼這個時候我們如何是好呢?其實我們可以透過一種存儲機制,這種機制就是RAID(磁盤陣列),那麼接下來,我們就好好講講RAID相關的東西。

•RAID是什麼

磁盤陣列全名是“ Redundant Arrays of Inexpensive Disks, RAID ”,翻譯成中文就是,容錯式廉價磁盤陣列。 RAID 可以通過一個技術(軟件或硬件),將多個較小的磁盤整合成爲一個較大的磁盤設備,而這個較大的磁盤功能可不止是儲存而已,他還具有數據保護的功能,整個RAID由於選擇的等級不同,而使得整合後的磁盤具有不同的功能,後面我們講講常見的幾種等級。

•RAID的優點

  • 數據安全與可靠性:指的並非網絡信息安全,而是當硬件(指磁盤)損毀時,數據是否還能夠安全的恢復和使用;
  • 讀寫性能:例如RAID0可以加強讀寫性能,讓你的系統I/O部分得以改善;
  • 容量:可以讓多顆磁盤組合起來,故單一文件系統可以有相當大的容量。尤其數據的可靠性與完整性更是使用RAID的考慮重點;

•RAID-0

RAID-0就是等量模式,即stripe,是我們要講的幾種中性能最佳的,所以放在最前面。這種模式如果使用相同型號與容量的磁盤來組成時,效果較好。這種模式的 RAID 會將磁盤先切出等量的區塊(chunk),一般可設置 4K~1M 之間, 然後當一個文件要寫入 RAID 時,該文件會依據 chunk 的大小切割好,之後再依序放到各個磁盤裏面去。由於每個磁盤會交錯的存放數據, 因此當你的數據要寫入 RAID 時,數據會被等量的放置在各個磁盤上面。 舉例來說,你有兩顆磁盤組成 RAID-0 , 當你有 100MB 的數據要寫入時,每個磁盤會各被分 配到 50MB 的儲存量。RAID-0 的示意圖如下所示:

上圖的意思是,在組成 RAID-0 時,每顆磁盤 (Disk A 與 Disk B) 都會先被區隔成爲小區塊 (chunk)。 當有數據要寫入 RAID 時,數據會先被切割成符合小區塊的大小,然後再依序一 個一個的放置到不同的磁盤去。

優勢

由於數據已經先被切割並且依序放置到不同的磁盤上面,因此每顆磁盤所負責的數據量都降低了,照這樣的情況來看, 越多顆磁盤組成的 RAID-0 性能會越好,因爲每顆負責的數據量就更低了,這表示我的數據可以分散讓多顆磁盤來儲存,當然性能會變的更好。此外,磁盤總容量也變大了,因爲每顆磁盤的容量最終會加總成爲 RAID-0 的總容量。

缺點

使用此等級你必須要自行負擔數據損毀的風險,由上圖我們知道文件是被切割成爲適合每顆磁盤分區區塊的大小,然後再依序放置到各個磁盤中。想一想,如果某一顆磁盤損毀了,那麼文件數據將缺一塊,此時這個文件就損毀了。由於每個文件都是這樣存放的,因此 RAID-0 只要有任何一顆磁盤損毀,在 RAID 上面的所有數據都會遺失而無法讀取。 另外,如果使用不同容量的磁盤來組成 RAID-0 時,由於數據是一直等量的依序放置到不同磁盤中,當小容量磁盤的區塊被用完了, 那麼所有的數據都將被寫入到最大的那顆磁盤去。舉例來說,我用 200G 與 500G 組成 RAID-0 ,那麼最初的 400GB 數據可同時寫入兩顆磁盤(各消耗 200G 的容量),後來再加入的數據就只能寫入 500G 的那顆磁盤中了,此時的性能就變差了,因爲只剩下一顆可以存放數據。

•RAID-1

RAID-1是映射模式,即mirror,可以完整備份數據。這種模式也是需要相同的磁盤容量的,最好也是一模一樣的磁盤,如果是不同容量的磁盤組成 RAID-1 時,那麼總容量將以最小的那一顆磁盤爲主。這種模式主要是讓同一份數據,完整的保存在兩顆磁盤上。舉例來說,如果我有一個 100MB 的文件,且我僅有兩顆磁盤組成 RAID-1 時,那麼這兩顆磁盤將會同步寫入 100MB 到他們的儲存空間去。 因此,整體 RAID 的容量幾乎少了 50%。由於兩顆硬盤內容一模一樣,所以這就是爲什麼稱他爲 mirror 模式。

如上圖所示,一份數據傳送到 RAID-1 之後會被分爲兩份,並分別寫入到各個磁盤裏。由於同一份數據會被分別寫入到其他不同磁盤,因此如果要寫入100MB時,數據傳送到 I/O 總線後會被複制多份到各個磁盤,結果就是數據量感覺變大了。因此在大量寫入RAID-1 的情況下,寫入的性能可能會變的非常差(這涉及到網橋)。如果你使用的是硬件 RAID(磁盤陣列卡)時,磁盤陣列卡會主動的複製一份而不使用系統的 I/O總線,性能方面則還可以。如果使用軟件磁盤陣列,可能性能就不好了。

優點

由於兩顆磁盤內的數據一模一樣,所以任何一顆硬盤損毀時,你的數據還是可以完整的保留下來的。所以我們可以說,RAID-1 最大的優點就在於數據的備份。

缺點

不過由於磁盤容量有一半用在備份,因此總容量只有全部磁盤容量的一半而已。雖然RAID-1的寫入性能不佳,不過讀取的性能去不錯,這是因爲數據備份存在不同的磁盤上,如果多個進程在讀取同一份數據時,RAID會自行取得最佳的讀取平衡。

•RAID1+0以及RAID0+1

RAID-0的性能雖然好,但是數據不安全,RAID-1 的數據雖然安全,但是性能不佳,那麼能不能將這兩者整合起來設置RAID 呢?當然可以呀,那就是RAID 1+0或RAID 0+1。所謂的 RAID 1+0 就是,先讓兩顆磁盤組成 RAID 1,並且這樣的設置共有兩組,然後將這兩組 RAID 1再組成一組RAID 0。這就是 RAID 1+0 。反過來說,RAID 0+1 就是先組成 RAID-0 再組成 RAID- 1。

如上圖所示,磁盤A和磁盤B組成第一組RAID 1,磁盤C和磁盤D組成第二組RAID 1,然後這兩組再整合成爲一組RAID 0。如果我有100MB的數據要寫入,則由於RAID 0的關係,兩組RAID1都會寫入50MB,又由於RAID1的關係,因此每顆磁盤就會寫入50MB而已。如此一來不論哪一組RAID1的磁盤損毀,由於是RAID 1的圖像數據,因此就不會有任何問題發生了,這也是目前儲存設備廠商最推薦的方法。

優點

爲什麼會推薦RAID1+0呢?想像你有20顆磁盤組成的系統,每兩顆組成一個RAID 1,因此你就有總共10組可以自己復原的系統,然後這10組再組成一個新的RAID 0,速度立刻拉昇10倍了。同時要注意,因爲每組RAID 1是個別獨立存在的,因此任何一顆磁盤損毀,數據都是從另一顆磁盤直接複製過來重建,並不像RAID5/RAID6必須要整組RAID的磁盤共同重建一顆獨立的磁盤系統,導致性能上差非常多。而且RAID 1與RAID 0是不需要經過計算的,讀寫性能也比其他的RAID等級好很多。

•RAID-5

RAID-5是性能和數據備份的均衡考慮,RAID-5至少需要三顆以上的磁盤才能夠組成這種類型的磁盤陣列。這種磁盤陣列的數據寫入有點類似RAID-0,不過每個循環的寫入過程中(striping)中,在每顆磁盤還加入一個同位檢查數據(Parity),這個數據會記錄其他磁盤的備份數據,用於當有磁盤損毀時的救援,RAID-5讀寫的情況類似下圖。

如上圖所示,每個循環寫入時,都會有部分的同位檢查碼(parity)被記錄,並且記錄的同位檢查碼每次都記錄在不同的磁盤,因此,任何一個磁盤損毀時都能夠藉由其他磁盤的檢查碼來重建原本磁盤內的數據。不過需要注意的是,由於有同位檢查碼,因此RAID5的總容量相當於少一個磁盤。以上圖爲例,原本的3塊磁盤只會剩下2塊磁盤的容量,而且當損毀的磁盤數量大於等於兩塊時,這整組RAID5的數據就損毀了。因此RAID5默認僅能支持一塊磁盤的損毀情況。與RAID-0相比,在讀寫性能的比較上,讀取的性能可以有得一比,不過寫的性能就不見得更好。這是因爲要寫入RAID5的數據還得要經過計算同位檢查碼(parity)的原因。由於加上這個計算的動作,所以寫入的性能與系統的硬件關係較大,尤其當使用軟件磁盤陣列時,同位檢查碼是通過CPU去計算而專門的磁盤陣列卡,因此性能方面還需要評估。另外,由於RAID5僅能支持一塊磁盤的損毀,因此近來還有發展出另外一種等級,就是RAID6,這個RAID6則使用兩顆磁盤的容量作爲parity的儲存,因此整體的磁盤容量就會少兩塊,但是允許出錯的磁盤數量就可以達到兩塊了,也就是說,在RAID6的情況下,同時兩塊磁盤損毀時,數據還是可以救回來。

•RAID-6

與RAID 5相比,RAID 6增加了第二個獨立的奇偶校驗信息塊,即雙重奇偶校驗。兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,即使兩塊磁盤同時失效也不會影響數據的使用。但RAID 6需要分配給奇偶校驗信息更大的磁盤空間,寫性能比RAID5差。因此,RAID-6需要的磁盤數要大於4塊,且實際容量會減少兩塊,一般用於對數據安全級別要求比較高的企業。

優點

  • 良好的隨機讀性能
  • 有校驗機制

缺點

  • 寫入速度差
  • 成本高

•預備磁盤

當磁盤陣列的磁盤損毀時,就得要將壞掉的磁盤拔除,然後換一塊新的磁盤。換成新磁盤並且順利啓動磁盤陣列後,磁盤陣列就會開始主動的重建,原本壞掉的那顆磁盤數據到新的磁盤上,然後你磁盤陣列上面的數據就復原了,這就是磁盤陣列的優點。而爲了讓系統可以實時的在壞掉硬盤時主動的重建,因此就需要預備磁盤進行輔助。所謂的預備磁盤就是一塊或多塊沒有包含在原本磁盤陣列等級中的磁盤,這塊磁盤平時並不會被磁盤陣列所使用,當磁盤陣列有任何磁盤損毀時,則這塊預備磁盤會被主動的拉進磁盤陣列中,並將壞掉的那塊硬盤移出磁盤陣列,然後立即重建數據系統。

•爲什麼分軟件和硬件

這裏放個RAID各等級的總結表格

爲什麼磁盤陣列又分爲硬件與軟件呢?所謂的硬件磁盤陣列是通過磁盤陣列卡來達成陣列的目的。磁盤陣列卡上面有一塊專門的芯片在處理RAID的任務,因此在性能方面會比較好。在很多任務(例如RAID5的同位檢查碼計算)磁盤陣列並不會重複消耗原本系統的I/O總線,理論上性能會較佳。此外目前一般的中高階磁盤陣列卡都支持熱拔插,亦即在不關機的情況下抽換損壞的磁盤,對於系統的復原與數據的可靠性方面非常的好用。

不過一塊好的磁盤陣列卡價格很高,便宜的在主板上面“附贈”的磁盤陣列功能可能又不支持某些高階功能,例如低階主板若有磁盤陣列芯片,通常僅支持到RAID0與RAID1 ,RAID6並沒有支持。此外,操作系統也必須要擁有磁盤陣列卡的驅動程序,才能夠正確的捉到磁盤陣列所產生的磁盤機。

由於磁盤陣列有很多優秀的功能,然而硬件磁盤陣列卡偏偏又貴的很,因此就有發展出利用軟件來仿真磁盤陣列的功能,這就是所謂的軟件磁盤陣列。軟件磁盤陣列主要是通過軟件來仿真陣列的任務,因此會損耗較多的系統資源,比如說CPU的運算與I/O總線的資源等。

發佈了93 篇原創文章 · 獲贊 474 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章