標籤:raid技術簡單介紹和常用命令總結
RAID技術介紹和總結
一.RAID技術簡介
1987年,加利福利亞伯克利分校的Patterson、Gibson和Katz這三位工程師發表了一篇:"A Case for Redundant Arrays of Inexpensive Disks"的論文。其目的是將多塊容量較小,相對廉價的硬碟進行組合,使其效能相當於一隻昂貴的大硬碟。在當時,這種技術叫做廉價磁碟冗餘陣列。許多工業層級的生產者發現了商機,紛紛去實現這種應用。但是,當他們實現以後卻發現要真正讓這種裝置發揮很好的效能,這個裝置的控制器晶片加上外圍的硬體裝置價格都不便宜。因此,這項技術改名為獨立冗餘磁碟陣列。事實上到今天為止,RAID技術已經成為眾多儲存解決方案中的工業標準。
目前RAID的實現技術主要有兩種:硬體RAID和軟體RAID。
硬體RAID:通過專用的RAID控制器,能極大的提高磁碟的I/O效能和可用性。並且為了提高效能,一般RAID控制器都有個小cpu,記憶體,還內建電池(可以獨立供電)。在出現電源故障時,它會使用後備的電池電源保持緩衝。硬體RAID比軟體RAID技術在使用效能和服務效能上更勝一籌,具體表現在檢測和修複多位錯誤的能力、錯誤磁碟自動檢測和陣列重建等方面。但是基於硬體實現的RAID技術對於大規模使用是非常昂貴的投資。
軟體RAID:軟RAID的實現,在Linux上是靠一個叫md(multi disks)的核心模組。md模組會在核心中類比出一個RAID來,當要儲存資料時,md會在核心中將資料轉換為對應RAID層級支援的資料存放區格式,然後通過/dev/md#這個裝置檔案將資料存放區在磁碟上。(md#不代表RAID層級)。該模組對於使用者空間的進程來看,就是一個RAID。而對於核心來看,其實還是那幾塊硬碟,只不過在核心裡類比了RAID的儲存機制。軟RAID的效能較低,因為其佔用了系統資源。其效能取決於cpu的效能,取決於cpu分時隙的能力和cpu空閑時間。但是在軟體RAID中無需物理硬體,零成本投資。
二.RAID層級介紹
常用的RAID層級分別是:RAID-0 (條帶卷),RAID-1 (鏡像磁碟區),RAID-4(單磁碟同位),RAID-5(單磁碟分布式同位),RAID-6(雙磁碟分布式同位),再加上嵌套式的RAID-10(鏡像磁碟區 + 條帶卷),RAID-01(條帶卷 + 鏡像磁碟區)。RAID2-3層級基本沒人用。
RAID-0: 條帶卷,在RAID-0層級中,要儲存的資料先按指定的資料區塊大小進行切片,然後分散儲存到多個磁碟上。當系統有資料請求就可以被多個磁碟並行的執行,每個磁碟執行屬於它自己的那部分資料請求。這種資料上的並行操作可以充分利用匯流排的頻寬,顯著提高了磁碟整體的讀寫效能。因為讀取和寫入是在裝置上並行完成的。RAID-0的特點是磁碟的讀寫效能顯著提升,但是沒有資料冗餘,零容錯能力,如果一個磁碟機發生故障,那麼將無法恢複任何資料。可用空間是 N*min(S1,S2,...Sn),其實現至少需要2塊硬碟。
RAID-1:鏡像磁碟區,在RAID-1層級中,資料被同等的寫入兩個或多個磁碟中。讀效能得到提升,讀取速度可以接近所有磁碟輸送量的總和,但寫入速度受限於最慢的磁碟,寫效能略有下降。鏡像磁碟區有很好的資料冗餘能力,可用空間是 1*min(S1,S2,...Sn),其實現也至少需要2塊磁碟。
RAID-4:單磁碟同位,在RAID-4層級中,它以RAID-0的方式將資料寫入到其它磁碟中,並在一個磁碟機上儲存校正碼資訊。校正碼通常是將要寫入到其它磁碟裡的資料進行異或得到的。如果一個磁碟機出現故障,那麼可以使用校正碼去和另一個磁碟機上的資料進行異或來恢複所有資料。但如果兩個磁碟機出現故障,那麼所有資料都將丟失。因為校正碼都儲存在一個磁碟機上,每次資料寫入其它磁碟時,都必須更新這些資訊。因此,校正盤很容易成為效能瓶頸,特別是有大量資料寫入時。可用空間是(N-1)*min(S1,S2,...Sn),其實現至少需要3個磁碟。
RAID-5:單磁碟分布式同位,RAID-5層級和RAID-4層級很像,它們之間最大的區別就是在RAID-5層級中,校正碼是均與的分布在各個磁碟機上的。這樣就避免了RAID-4中出現的校正盤效能瓶頸的問題。RAID-5層級也允許有一塊磁碟出現故障。如果使用了備用磁碟,那麼在一塊磁碟出現故障後,陣列會立即開始同步資料。可用空間是(N-1)*min(S1,S2,...Sn),其實現也至少需要3塊磁碟。
RAID-6:雙磁碟分布式同位,RAID-6和RAID-5相似。只是RAID-6用2塊磁碟來儲存校正資訊,即使有2個磁碟機發生故障,依然可以更換新的磁碟機後重建資料。RAID-6比RAID-5慢,效能略差,但允許有2塊磁碟發生故障。可用空間是(N-2)*min(S1,S2,...Sn),其實現至少需要4塊磁碟。
混合類型
RAID-10:先鏡像後條帶,通過結合RAID-1的資料被完全相同地寫入到兩個或多個磁碟和RAID-0的讀寫操作在多個磁碟上同時並存執行的特點實現高效能和高容錯性的磁碟I/O。在RAID-10中,讀寫效能提升和RAID-5差不多。有容錯能力,但每組鏡像最多隻能壞一塊。可用空間是N*min(S1,S2,...Sn)/2,和RAID-1一樣空間利用率只有50%。其實現最少需要4塊磁碟。
RAID-01:先條帶後鏡像,RAID-01和RAID-10非常相似,二者在讀寫效能上沒有什麼差別。但是在安全性上RAID-10要好於RAID-01。因此,RAID-10的應用比RAID-01多。在實際的生產環境中,RAID5和RAID10被經常拿來做比較,也是用的最多的兩種技術。
三.軟RAID的實現
RAID-0:
1.安裝RAID的mdadm管理工具
# rpm -qa | grep "mdadm"
# yum install mdadm -y
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/72/5F/wKioL1XicIGQW6QpAAB6tMQ8pF8881.jpg" title="捕獲.PNG" alt="wKioL1XicIGQW6QpAAB6tMQ8pF8881.jpg" />
這裡已經安裝mdadm工具了,如果沒有的話,執行yum install mdadm -y 即可。
2.確認添加的硬碟或是分區
# ls -l /dev | grep "sd"
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/72/64/wKiom1XieGeyaUsTAANByJS0VCM767.jpg" title="捕獲1.PNG" alt="wKiom1XieGeyaUsTAANByJS0VCM767.jpg" />
為了節約物理磁碟空間,這裡用一塊虛擬盤的多個分區來做RAID。650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0064.gif" alt="j_0064.gif" />
3.檢查串連的磁碟機是否已被現有RAID使用
# mdadm --examine /dev/sdb
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/72/64/wKiom1XieTjD7-cEAAPj2adgpRc380.jpg" title="捕獲2.PNG" alt="wKiom1XieTjD7-cEAAPj2adgpRc380.jpg" />
4.建立RAID分區,並調整分區類型為fd
# fdisk /dev/sdb
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/72/60/wKioL1XifEvyK4oWAAQvTLzyY3E906.jpg" title="捕獲3.PNG" alt="wKioL1XifEvyK4oWAAQvTLzyY3E906.jpg" />這裡建立了兩個5G的分區,並調整分區類型為fd
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/72/60/wKioL1XifV3yaHWAAAbyFMgKz4I569.jpg" title="捕獲4.PNG" alt="wKioL1XifV3yaHWAAAbyFMgKz4I569.jpg" />650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/72/64/wKiom1Xie7KQOEpDAAMLDKCuHg4319.jpg" title="捕獲5.PNG" alt="wKiom1Xie7KQOEpDAAMLDKCuHg4319.jpg" />
5.再次驗證磁碟機是否正確定義RAID
# mdadm --examine /dev/sdb{1,2}
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/72/60/wKioL1XifjbjujUBAADrpjGHcjM547.jpg" title="捕獲6.PNG" alt="wKioL1XifjbjujUBAADrpjGHcjM547.jpg" />
6.建立RAID md裝置
# mdamd -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/72/60/wKioL1XifsHzX51TAAC-ojw_LkM178.jpg" title="捕獲7.PNG" alt="wKioL1XifsHzX51TAAC-ojw_LkM178.jpg" />
7.查看核心識別的RAID裝置以及陣列使用狀態等資訊
# cat /proc/mdstat 或 mdadm -E /dev/sdb{1,2}
# mdadm -D /dev/md0 或 mdadm --detail /dev/md0
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/72/64/wKiom1XifViip9v0AALEVzdmiuM439.jpg" title="捕獲8.PNG" alt="wKiom1XifViip9v0AALEVzdmiuM439.jpg" />
8.在RAID裝置上建立檔案系統並掛載
# mke2fs -t ext4 /dev/md0
# mkdir /backup && mount /dev/md0 /backup
# df -lh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/72/64/wKiom1XifiuAPTceAAP1fgGeLP0752.jpg" title="捕獲9.PNG" alt="wKiom1XifiuAPTceAAP1fgGeLP0752.jpg" />
9.因為重啟系統後,/dev/md# 的名字可能會改變,掃描當前RAID裝置的資訊並儲存到設定檔中方便以後裝配。
# mdadm -D --scan --verbose >> /etc/mdadm.conf 或 mdadm -E -s -v >> /etc/mdadm.conf
RAID-1,RAID-4,RAID-5,RAID-6的軟RAID實現方式和上述方法差不多,只是在使用 mdadm 命令建立陣列時使用 -l 選項指定要建立的陣列層級就行了。需要注意的是,在建立RAID前要先確認相應磁碟或者分區的檔案系統類型已經調整為fd。另外,在RAID裝置上建立檔案系統時,可以通過類似這樣的命令 "mke2fs -t ext4 -E stride=16 -b 4096 /dev/md0" 來明確指明stride大小(條帶大小),即一個chunk相當於多少個磁碟塊大小。這樣可以略微提升RAID效能,在I/O繁忙時(對鏡像磁碟區意義不大,但對RAID0和5有用)。
RAID-10:
RAID-10 有兩種方法可以實現,一種是在使用 mdadm 命令時通過 -l 選項直接指定要建立的RAID層級為10。另一種方法是通過嵌套的方式先建立兩個或更多的RAID-1陣列,然後使用它們組成RAID-0陣列。第一種方法能夠使用偶數或奇數個磁碟去建立陣列,而且能以單個RAID裝置的形式被管理。第二種方法只允許偶數個磁碟,並且必須以嵌套裝置的形式被管理,即分開管理RAID-1和RAID-0陣列。嵌套法建立RAID-10或者RAID-01的方法和上面的大同小異。
四.mdadm命令及常用選項總結
命令的文法格式:
mdadm [mode] <raiddevice> [options] <component-devices> # [ ] 中的為可選項,< > 中的為必選項
<raiddevice>: /dev/md#
<component-devices>: 任意塊裝置
四種模式分別是:建立(-C),裝配(-A),監控(-F),管理(-f,-r,-a)
-C:建立RAID裝置
子選項:
-a {yes|no}:是否自動建立目標RAID裝置的裝置檔案
-l #:指定要建立的RAID層級
-n #:指定使用#個塊裝置來建立此RAID
-c CHUNK_SIZE:指明塊大小,預設是64Kbytes
-x #:指明空閑盤的個數,做後備盤使用
例如:建立一個10G可用空間的RAID5; mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sda{3,4,5}
-D:顯示raid的詳細資料
mdadm -D /dev/md#
maadm --detail /dev/md#
mdadm -E /dev/md#
mdadm --examine /dev/md#
管理員模式:
-f: 標記指定磁碟為損壞; mdadm /dev/md1 -f|--fail|--set-fault /dev/sda3 # "|" 表示或者的意思
-a: 添加磁碟 mdadm /dev/md1 -a|--add /dev/sda5 # 新加進來的盤大小要和此前的RAID一樣
-r: 移除磁碟 mdadm /dev/md0 -r /dev/sda2
觀察md的狀態:
cat /proc/mdstat
停止md裝置:
mdadm -S /dev/md#
mdadm --stop /dev/md#
watch命令:
-n #: 重新整理間隔,單位是秒;
watch -n# ‘COMMAND‘
mdadm -D|--detail --scan > /etc/mdadm.conf # 掃描當前RAID裝置的資訊並儲存到設定檔中方便以後裝配。
RAID技術簡單介紹和常用命令總結