linux磁盤陣列raid詳解


 

一丶raid

 

 

1.raid定義

磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。
磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。
磁盤陣列還能利用同位檢查(Parity Check)的觀念,在數組中任意一個硬盤故障時,仍可讀出數據,在數據重構時,將數據經計算后重新置入新硬盤中。

 

2.raid的優缺點

優點

提高傳輸速率。RAID通過在多個磁盤上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput)。在RAID中,可以讓很多磁盤驅動器同時傳輸數據,而這些磁盤驅動器在邏輯上又是一個磁盤驅動器,所以使用RAID可以達到單個磁盤驅動器幾倍、幾十倍甚至上百倍的速率。這也是RAID最初想要解決的問題。因為當時CPU的速度增長很快,而磁盤驅動器的數據傳輸速率無法大幅提高,所以需要有一種方案解決二者之間的矛盾。RAID最后成功了。
通過數據校驗提供容錯功能。普通磁盤驅動器無法提供容錯功能,如果不包括寫在磁盤上的CRC(循環冗余校驗)碼的話。RAID容錯是建立在每個磁盤驅動器的硬件容錯功能之上的,所以它提供更高的安全性。在很多RAID模式中都有較為完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗余性。

缺點

RAID0沒有冗余功能,如果一個磁盤(物理)損壞,則所有的數據都無法使用。
RAID1磁盤的利用率最高只能達到50%(使用兩塊盤的情況下),是所有RAID級別中最低的。
RAID0+1以理解為是RAID 0和RAID 1的折中方案。RAID 0+1可以為系統提供數據安全保障,但保障程度要比 Mirror低而磁盤空間利用率要比Mirror高。

3.常用RAID及其特點

 

 

RAID0(需要2塊以上硬盤)

 

 

Raid0數據儲存方法如下(假設有兩塊硬盤D1、D2):

特點:數據被並行寫入每個磁盤,每個磁盤都保存了完整數據的一部分,讀取也采用並行方式,磁盤數量越多,讀取和寫入速度越快。因為沒有冗余,一個硬盤壞掉全部數據丟失。至少兩塊硬盤才能組成Raid0陣列。

D1 D2
數據1 數據2
數據3 數據4
數據5 數據6

容量:所有硬盤之和。


原理: raid 0 條帶化 chunk size n*min(size) (#讀寫的提升 至少2塊盤)

實現方式:就是把N塊同樣的硬盤用硬件的形式通過智能磁盤控制器或用操作系統中的磁盤驅動程序以軟件的方式串聯在一起創建一個大的卷集。
  在使用中電腦數據依次寫入到各塊硬盤中,它的最大優點就是可以整倍的提高硬盤的容量。如使用了三塊80GB的硬盤組建成RAID 0模式,那么磁盤容量就會是240GB。
  其速度方面,各單獨一塊硬盤的速度完全相同。最大的缺點在於任何一塊硬盤出現故障,整個系統將會受到破壞,可靠性僅為單獨一塊硬盤的1/N。

 

 特點:

1:RAID 0連續以位或字節為單位分割數據,並行讀/寫於多個磁盤上,因此具有很高的數據傳輸率,但它沒有數據冗余
2:RAID 0只是單純地提高性能,並沒有為數據的可靠性提供保證,而且其中的一個磁盤失效將影響到所有數據
3:RAID 0不能應用於數據安全性要求高的場合

 

 

RAID1(需要2塊硬盤)

 

 

 

 

 

Raid1數據儲存方法如下(假設有兩塊硬盤D1、D2):

D1 D2
數據1 數據1
數據2 數據2
數據3 數據3

特點:有數據冗余,可靠性強,D1、D2被寫入相同的數據,其中D2可以作為D1的完整備份。讀取時,從兩塊硬盤上並行讀取,寫入慢,讀取快。任何一塊硬盤壞掉不會丟失數據,至少兩塊硬盤並且兩塊硬盤大小相等才能組成Raid1陣列。

容量:所有硬盤容量之和的一半(一半寫數據,一半用來做備份)。

 

 

原理:raid 1 鏡像 min(size) (#寫性能略降低 ,讀性能提升 至少2塊盤)

原理是把一個磁盤的數據鏡像到另一個磁盤上,也就是說數據在寫入一塊磁盤的同時,會在另一塊閑置的磁盤上生成鏡像文件,在不影響性能情況下最大限度的保證系統的可靠性和可修復性上,
只要系統中任何一對鏡像盤中至少有一塊磁盤可以使用,甚至可以在一半數量的硬盤出現問題時系統都可以正常運行,當一塊硬盤失效時,系統會忽略該硬盤,轉而使用剩余的鏡像盤讀寫數據,
具備很好的磁盤冗余能力

 

 特點:

1:通過磁盤數據境像實現數據冗余,在成對的獨立磁盤上產生互為備份的數據
2:當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID 1可以提高讀取性能
3:RAID1是磁盤陣列中單位成本最高的,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據

 

 

RAID5(需要3塊以上硬盤)

 

 

 

 

 

Raid5數據儲存方法如下(假設有三塊硬盤D1、D2、D3):

D1 D2 D3
數據1 數據2 校驗和1
校驗和2 數據3 數據4
數據5 校驗和3 數據6

特點:采用奇偶校驗,可靠性強,磁盤校驗和被散列到不同的磁盤里面,增加了讀寫速率。只有當兩塊磁盤同時丟失時,數據才無法恢復,至少三塊硬盤並且硬盤大小應該相等才能組成Raid5陣列。

容量:所有硬盤容量之和減去其中一塊硬盤的容量,被減去的容量被分配到三塊硬盤的不同區域用來存放數據校驗信息。

 

原理:raid 5 奇偶校驗 (#(n-1)*min(size) 至少3塊盤)

RAID5的讀出效率很高,寫入效率一般,塊式的集體訪問效率不錯。因為奇偶校驗碼在不同的磁盤上,所以提高了可靠性。但是它對數據傳輸的並行性解決不好,而且控制器的設計也相當困難。

 

特點:

1:N((N>=3)塊盤組成陣列,一份數據產生N1個條帶,同時還有1份校驗數據,共N份數據在N塊盤上循環均衡存儲
2:N塊盤同時讀寫,讀性能很高,但由於有校驗機制的問題,寫性能相對不高(N-1)/N磁盤利用率
3:可靠性高,允許壞1塊盤,不影響所有數據

 

 

Raid10(需要4塊以上硬盤)

 

 

 

 

 

 

Raid10(Raid1+Raid0)是現在比較常用的一種磁盤陣列級別,它的容錯好,讀寫數據效率較高,但經費相對也較高。

Raid10數據儲存方法如下(假設有四塊硬盤D1、D2、D3、D4):

D1 D2 D3 D4
數據1 數據1 數據2 數據2
數據3 數據3 數據4 數據4

特點:備份和並發式存取數據,可靠性強。D1、D2組成一個陣列Raid1,其中D1是數據盤,D2是備份盤;D3、D4也組成一個Raid1,其中D3是數據盤,D4是備份盤;在這個基礎上將D1、D2作為一個整體,將D3、D4也作為一個整體,這兩個整體之間再組成一個Raid0陣列。這樣不僅僅讀取數據會非常快,並發寫入的速度也會隨着磁盤的增多而變快。至少四塊硬盤並且每塊硬盤大小應該相等才能組成Raid10陣列。

容量:所有硬盤容量之和的一半(一半寫數據,一半用來備份數據)。


原理:raid 10 (#先做多個raid1,再組成raid0 安全性優於raid01)

先鏡射再分區數據,再將所有硬盤分為兩組,視為是RAID 0的最低組合,然后將這兩組各自視為RAID 1運作。優點是同時擁有RAID 0的超凡速度和RAID 1的數據高可靠性,但是CPU占用率同樣也更高,
而且磁盤的利用率比較低.

 

特點:

1:N(偶數,N>=4)塊盤兩兩鏡像后,再組合成一個RAID 0
2:N/2磁盤利用率
3:N/2塊盤同時寫入,N塊盤同時讀取
4:性能高,可靠性高

 

 

Raid01

 

 

 

 

Raid01數據儲存方法如下(假設有四塊硬盤D1、D2、D3、D4):

D1 D2 D3 D4
數據1 數據2 數據1 數據2
數據3 數據4 數據3 數據4

特點:D1、D2組成一個陣列Raid0,D3、D4也組成一個陣列Raid0,D1、D2和D3、D4再組成一個Raid1。D1和D2作為數據盤陣列,D3和D4作為數據備份陣列,這種方式並不常用,至少四塊硬盤並且每塊硬盤大小應該相等才能組成Raid01陣列。

容量:所有硬盤容量之和的一半。

原理:raid 01 (#先做多個raid0,再組成raid1)

先分區再將數據鏡射到兩組硬盤。它將所有的硬盤分為兩組,變成RAID 1的最低組合,而將兩組硬盤各自視為RAID 0運作.
優點是同時擁有RAID 0的超凡速度和RAID 1的數據高可靠性,但是CPU占用率同樣也更高,而且磁盤的利用率比較低

 

 

RAID50

 

 

 

原理:raid 50 (#先做多個raid5,再組成raid0,安全性略低於raid10)

RAID50具備更高的容錯能力,因為它允許某個組內有一個磁盤出現故障,而不會造成數據丟失。而且因為奇偶位分部於RAID5子磁盤組上,故重建速度有很大提高。
優勢:更高的容錯能力,具備更快數據讀取速率的潛力。

 

 

 

 

 

raid用法及常用選項

 

用法

 

mdadm -C /dev/md0 -a yes -n 2 -l 0 /dev/sdc /dev/sdd
mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sde /dev/sdf
mdadm -C /dev/md1 -a yes -n 2 -l 1 -x 1 /dev/sd{e,f,g}

 


常用選項

-C 創建raid
-a yes 自動創建raid設備/dev/mdX
-n num 陣列中磁盤的數量
-l num 陣列的等級
-x num 熱備盤的數量
mdadm -D /dev/mdx 查看raid信息
cat /proc/mdstat 查看全部的raid信息
mdadm -S /dev/mdx 停止raid
mdadm -A /dev/mdx /dev/sdc /dev/sda
cat /proc/mdstat
mdadm -D -s > /etc/mdadm.conf 將raid信息保存至文件
mdadm -A -s 激活/etc/mdadm.conf中的所有raid設備
mdadm -F /dev/md1 實時監控raid狀態

 

 

raid1,raid5專用命令

 

mdadm /dev/md1 -f /dev/sdx 將md1中的sdx設置為壞的設備
mdadm /dev/md1 -r /dev/sd 將md1中的sdx從raid成員中刪除
mdadm /dev/md1 -a /dev/sdx 向md1中增加新成員sdx
mdadm -G /dev/md1 -n 3 -a /dev/sdh 將raid1 md1的成員數量改為3,並加入新的成員(不是加為熱備盤)

 


刪除硬盤raid

mdadm --zero-superblock /dev/sdx 刪除某塊硬盤的raid信息

 

 共享熱備盤實現方式

 

mdadm -D -s > /etc/mdadm.conf
在需要共享的多組raid信息最后分別都寫上spare-group=magedu
然后再加一新行,頂頭寫MAILADDR root@localhost
service mdmonitor restart

 

 

二、Linux創建磁盤陣列實例

 

這一部分通過Linux上的mdadm命令來實現Raid10磁盤陣列。

 

a.實驗環境介紹

實驗環境為一台安裝了5塊硬盤的計算機,操作系統是CentOS7,除系統所在硬盤(/dev/sda)外,其余四塊20G的硬盤盤符分別為(/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde);

主要用到的命令:mdadm;

CentOS7中mdadm默認已安裝,如果沒有安裝,可以使用yum在線安裝,如下:

 

#首先確保已經連接到互聯網,搜索一下yum服務器上是否存在mdadm

qing@qingsword.com:~$ sudo yum search mdadm

 

#根據搜索結果和系統環境選擇對應的版本安裝

qing@qingsword.com:~$ sudo yum install mdadm.x86_64

 

#安裝需要root權限,請確保普通用戶可用sudo或切換到root權限操作

 

到這里,實驗的准備工作完成。

 

 

b.創建磁盤陣列Raid10

 

參數詳解:

磁盤陣列創建需要root權限;

-C 創建一個新的RAID起名為md0;

-a yes 自動創建對應設備;

-l 指定RAID級別,本例是10;

-n 活動的磁盤數量(備份盤除外);

因為RAID10最少需要4塊硬盤,后面的sd[b-e]都被添加到md0中;

 如果要創建其他級別的RAID,只需要更改-l參數后的級別,並根據所需要的硬盤的數量更改-n參數后面的數量即可;

qing@qingsword.com:~$ sudo mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd[b-e]

Continue creating array? (y/n)  y #輸入y繼續

 

#如果每塊硬盤容量都很大,RAID的創建不是瞬間完成的,通過查看下面這個文件,可以看到一個創建進度,確保全部完成后再進行下一步

qing@qingsword.com:~$ cat /proc/mdstat

Personalities : [raid10]

[====>................]  resync = 24.0%

#只有這個到達100%才算完成

 

#查看剛才創建的磁盤陣列md0詳細信息

qing@qingsword.com:~$  sudo mdadm -D /dev/md0

 

c.配置開機自啟動磁盤陣列




新創建的磁盤陣列默認是不能開機自啟動的,需要手動創建一個配置文件,讓系統在啟動的時候自動啟動Raid(經過測試,CentOS7並不需要創建這個配置文件,如果重啟后磁盤陣列沒有隨機啟動,請使用下面的方法配置一次):

#這個配置文件的創建需要root權限才可進行,切換到root

qing@qingsword.com:~$ su root

 

#將mdadm信息寫入配置文件

root@qingsword.com:~# mdadm -D --scan > /etc/mdadm.conf

 

 

 

 

 

d.將磁盤陣列掛載到目錄使用

 

#掛載前先需要對磁盤陣列格式化

qing@qingsword.com:~$ sudo mkfs.ext4 /dev/md0

 

#掛載,本例掛載到/mnt目錄

qing@qingsword.com:~$ sudo mount /dev/md0 /mnt

 

#查看已經掛載的設備,可以看到/dev/md0可使用的大小是40G,上面已經介紹過,Raid10可用大小是活動硬盤總和的一半

qing@qingsword.com:~$ sudo df -h

Filesystem                   Size  Used Avail Use% Mounted on

...

/dev/md0                     40G   176M   38G  1%  /mnt

 

3.創建冗余磁盤陣列

 

可以在創建RAID的時候指定有幾塊冗余磁盤,當工作磁盤出現故障的時候,冗余磁盤自動啟動,頂替出現故障的磁盤繼續工作,請看下面的實例:

#假設有6塊硬盤,前面4塊用作RAID10,后面兩塊將被用作冗余(參數-x 2表示有2塊硬盤用作冗余)

qing@qingsword.com:~$ sudo mdadm -C /dev/md0 -a yes -l 10 -n 4 -x 2 /dev/sd[b-g]

 

#查看磁盤陣列詳細詳細

qing@qingsword.com:~$ sudo mdadm -D /dev/md0

...

Raid Level : raid10

...

Raid Devices : 4 #參與磁盤陣列硬盤數4

Total Devices : 6 #總硬盤數6

...

Active Devices : 4 #正在工作的硬盤4

Working Devices : 6 #能夠工作的硬盤6個

Failed Devices : 0  #故障硬盤數0

Spare Devices : 2 #空閑硬盤數2

 

Number Major Minor RaidDevice State

  0  8  16   0  active sync set-A  /dev/sdb

  1  8  32   1  active sync set-B  /dev/sdc

  2  8  48   2  active sync set-A  /dev/sdd

  3  8  64   3  active sync set-B  /dev/sde

 

  4  8  80   -   spare   /dev/sdf #兩個冗余磁盤

  5  8  96   -   spare   /dev/sdg

 

下面手動將一塊磁盤標記為故障,看看冗余盤是否起作用:

#將md0中sdc標記為故障

qing@qingsword.com:~$ sudo mdadm /dev/md0 -f /dev/sdc

mdadm: set /dev/sdc faulty in /dev/md0

 

qing@qingsword.com:~$ sudo mdadm -D

...

Active Devices : 4

Working Devices : 5

#還有5個能工作的磁盤(包括剩下冗余的1個)

Failed Devices : 1 #壞掉1個

Spare Devices : 1 #空閑1個

 

Number Major Minor RaidDevice State

  0  8  16  0  active sync set-A  /dev/sdb

  5  8  96  1  active sync set-B  /dev/sdg

  2  8  48  2  active sync set-A  /dev/sdd

  3  8  64  3  active sync set-B  /dev/sde

 

  1  8  32  -  faulty  /dev/sdc

  4  8  80  -  spare  /dev/sdf

 

假如/dev/sdc經過測試后發現沒有問題,想要重新加入md0使用,可以在系統重啟后,使用"mdadm /dev/md0 -a /dev/sdc"命令將它重新(添加)啟用。

如果以后,想要加入一塊新硬盤到這個raid10里作為備份盤,這塊新硬盤需要和其他硬盤(或分區)保持相同的大小,然后使用下面的命令添加:

#添加后,就會在備份列表中看到/dev/sdh這塊硬盤了

qing@qingsword.com:~$ sudo mdadm /dev/md0 --add /dev/sdh

 

#或簡寫命令如下,效果同上

qing@qingsword.com:~$ sudo mdadm /dev/md0 -a /dev/sdh

 

0×4.刪除磁盤陣列

 

要想徹底清除RAID以及數據,請使用下面的方法:

#1.如果已經掛載,先卸載

qing@qingsword.com:~$ sudo umount /dev/md0

 

#2.關閉RAID

qing@qingsword.com:~$ sudo mdadm -S /dev/md0

 

#3.將磁盤sdb至sdf中的所有數據全部用0填充(創建時有多少塊硬盤,這里就寫多少塊,例如上面創建了冗余是從b-g,那么這里就寫/dev/sd[b-g])

qing@qingsword.com:~$ sudo mdadm --zero-superblock /dev/sd[b-f]

 

#4.刪除啟動配置文件(如果有)

qing@qingsword.com:~$ sudo rm -rf /etc/mdadm.conf

 

 

 

 

參考:https://blog.51cto.com/13570215/2084757

https://www.qingsword.com/qing/922.html

 


免責聲明!

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



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