linux raid基本知識要點
1.21 什麼是軟RAID0及特點;
RAID0 是把兩個或兩個以上的容量相同的硬碟或分割槽,通過RAID控制器(硬RAID是通過RAID卡來實現的,軟RAID
是通過軟體來實現的),結合為一個在容量上是RAID0下成員的容量的總和,在寫入時,要向每個硬碟或分割槽同時寫入資料。在硬RAID中,RAID0的成員是以整個硬碟為單位的,把兩個硬碟或兩個以上的硬碟通過RAID卡繫結成為一個虛擬的磁碟裝置,而每個硬碟就是RAID0的成員;在軟RAID0中,RAID0的成員是整個硬碟或分割槽,容量是加入RAID0的所有成員容量的總和。在RAID0中每個成員的容量都是相同一致的。比如我們把
/dev/sdb 、/dev/sdc
RAID0 在讀寫速度上是比較快的,是普通不做RAID的兩倍左右(注:實際速度和機器的硬體配置有關),所以
1.22 什麼是軟RAID1及特點;
RAID1就是把若干相同容量的硬碟或分割槽,成員與成員之間是映象關係。在容量上,RAID1裝置是單個成員的容量。比如兩個80G的硬碟做成RAID1,這個RAID1的裝置容量仍是80G。比如我們寫入一個份資料linuxsir.tar.bz2 到RAID1裝置時,其實是向RAID的每個成員都寫了一份。比如RAID1裝置下有兩個成員/dev/sdb和/dev/sdc ,我們寫入linuxsir.tar.bz2
1.23 什麼是軟RAID5及特點;軟RAID5也是冗餘安全的,RAID5是把至少三個硬碟或分割槽通過軟體虛擬成為一個大的儲存裝置。在容量上是(n-1)x單個硬碟(分割槽)容量,比如我們用三塊80G硬碟做成RAID5,容量就是兩塊容量的和160G。在寫入上,資料被分拆成若干份,分別向RAID5的每個成員下寫入。比如把linuxsir.tar.bz2寫入RAID5時,要先把linuxsir.tar.bz2分拆成若干份,分別寫入RAID5成員中。因為涉及到冗餘,所以資料在讀入速度上並不是很快,沒辦法和RAID0相比,但RAID5的寫入資料速度沒有RAID1和RAID0快,也沒有不做RAID的磁碟寫入速度要快;因為RAID5在容量損失比較小,有冗餘安全保障,另外寫入速度比較快,從整體上來看,價效比比較高,所以被大範圍內採用;安全性:當RAID5中的成員中有一個發生故障時,RAID5一樣能啟動和正常執行,只要n-1(注n>3)塊硬碟或分割槽的不出故障,RAID5上的資料就是安全,對於一個檔案存到RAID5裝置中,只有成員是n-1(注n>3)無故障時,這份檔案才是完整的。比如RAID5有四個硬碟(或分割槽)做的,當一個硬碟或分割槽掛掉了,並不影響整個RAID5上資料的完整性和安全性。
1.24 什麼是軟RAID10及特點;軟RAID10也是冗餘安全陣列,是RAID0+1的整合,RAID10是把至少四個硬碟或分割槽通過軟體虛擬成為一個大的儲存裝置。在容量是:n/2x單個硬碟(分割槽)容量,比如我們用四塊80G硬碟做成RAID5,容量就是兩塊容量的和4/2x80=160G。做RAID10所需要的硬碟或分割槽個數是偶數的。
RAID10,有RAID1的映象特點,還有RAID0的速度。可以這麼理解RAID10,比如有四個硬碟做成的RAID10,過程是先把每兩個硬碟做成RAID1,然後再兩個RAID1的基礎上再做成RAID0。從理論上來說,RAID10應該繼承RAID0的速度和RAID1的冗餘安全。但經過我在軟RAID0、RAID1、RAID5、RAID10的測試過程中發現RAID10的寫入速度是最慢的,測試方法是用超過1G的大檔案幾盤複製。結果發現速度由高低的順序是:RAID0> 不做RAID>RAID1>RAID5>RAID10
2 在Linux中,軟RAID的建立和管理;在Linux中,軟RAID是通mdadm來建立和管理的,mdadm 是一個專用建立和管理RAID的軟體,在Linux中,大多發行版本已經預設安裝,mdadm能建立任何級別的軟RAID;在本節中,RAID建立並不是目的,我們還要檢視學會RAID的狀態,啟動、停止RAID。還要學會使用RAID。所以RAID的使用應該包括建立、管理和使用。 RAID的使用就是在RAID裝置上建立檔案系統,然後供儲存應用;流程是:
[RAID建立]->[RAID管理]->[RAID的使用]
|
[RAID的維護]
2.1 RAID的建立方法;建立RAID有兩個方法,第一種方法:用mdadm
通過-C或--create
引數來建立RAID。這種方法,是把RAID資訊寫到每個RAID成員的
superblocks(超級塊)中,在每個RAID成員的超級塊中,都會記錄RAID的級別、成員、RAID的UUID等……這種方法把RAID的資訊記錄在各個成員的
superblocks(超級塊)中。這種方法對於重灌系統或系統發生災難來來說,有利於現有RAID的恢復;這種方法是最常用的;第二種方法:用mdadm
通過-B或--build
引數來建立RAID。這種方法並不把RAID的資訊寫入RAID成員的
superblocks(超級塊中),所以我們無法通過檢視RAID成員資訊來獲得RAID的級別,以及RAID的成員等;這種方法對於重灌系統或系統發生災難來來說,不利於現有RAID的恢復;如果你想用第二種方法來建立RAID,可以在下面的語法中,把-C或--create
換成 -B或--build
。語法:建立把RAID資訊寫入RAID每個成員的superblocks(超級塊)中;
mdadm -C -v /dev/mdX -lY -nZ RAID成員或
mdadm --create --verbose /dev/mdX --level=Y --RAID-devices=Z RAID成員注:
-C 是--create
的縮寫,表示建立的意思;這種方法是建立把RAID資訊寫入每個RAID成員superblocks(超級塊)的方法。這是最常用的方法。
-v 和--verbose,顯示建立過程中詳細的事件;如果把-C或--create
換成-B或--build,就是建立RAID的另一種方法,不把RAID資訊寫入RAID成員的superblocks(超級塊)中,如果您試用,請自己嘗試;
RAID裝置: /dev/mdX,RAID裝置在Linux中,大多是/dev/md0,/dev/md1……第一個裝置從/dev/md0開始。比如你已經有RAID0裝置是/dev/md0,你再想做一個RAID5,那就是/dev/md1,以此類推;
RAID級別:用-lY或--level=Y表示,Y是RAID的級別。RAID的級別有RAID0就用0表示,RAID1就用1表示,RAID5就用RAID5表示,RAID10就用10表示。RAID的級別是根據自己的使用方向和現有磁碟和分割槽個數來定位。如果你就想高速讀寫、大容量,對資料安全性要求不高,那就用RAID0,如果對資料要求較高,可以用RAID1或RAID5,再者就是RAID10。比如-l0或--level=0表示RAID0,-l5或--level=5表示RAID5,
-l1或--level=1表示RAID1,-l10或--level=10表示RAID10;
-nZ或--RAID-devices=Z表示RAID成員的個數,比如我們把三個硬碟分分割槽做成一個RAID,那就是3個裝置。就要寫成這樣
-n3或--RAID-devices=3;值得注意的是RAID0和RAID1至少需要兩個設定,RAID5至少需要三個裝置,RAID10至少四個裝置;
RAID成員:也就是RAID的組成裝置,要一個一個的列出來,每個裝置後要用空格來隔開;比如我們把/dev/sdb、/dev/sdc、/dev/sdd三個硬碟做成RAID0,在RAID裝置這塊,我們要寫成
/dev/sdb/dev/sdc /dev/sdd ;軟體RAID的成員還可以是分割槽,比如
/dev/sdb1、/dev/sdc1
……舉例一:我們要做一個RAID0,成員是
/dev/sdb、/dev/sdc
兩個硬碟裝置。我們要執行如下命令;
mdadm -C --verbose /dev/md0 -l0 -n2 /dev/sdb /dev/sdc
或
mdadm -C --verbose /dev/md0 --level=0 --RAID-devices=2 /dev/sdb /dev/sdc
如果我們想把/dev/sdb1
、/dev/sdc1和/dev/sdd1三個分割槽做成RAID0呢?
mdadm -C -v /dev/md0 -l0 -n3 /dev/sd[bcd]1
或
mdadm -C --verbose /dev/md0 --level=0 --RAID-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
舉例二:我們要做一個RAID5
,成員是/dev/sdb、/dev/sdc、/dev/sdd
三個裝置,我們要執行如下命令;
mdadm -C -v /dev/md0 -l5 -n3 /dev/sd[bcd]
或
mdadm -C --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sdb /dev/sdc /dev/sdd
如果我們想把/dev/sdb1
、/dev/sdc1和/dev/sdd1三個分割槽做成RAID5呢?
mdadm -C -v /dev/md0 -l5 -n3 /dev/sd[bcd]1
或
mdadm -C --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
建立完成後,RAID也就立即啟動了。我們會發現有類似如下一行的提示資訊:
mdadm: array /dev/md0started.
我們要可以通過下面的命令來檢視RAID的資訊;
mdadm -Ds /dev/md0
mdadm -D /dev/md0
2.2 RAID管理工具;
RAID的管理包括建立、啟動、狀態檢視等一系列工具;我們只說常用的使用方法;
2.21 RAID的啟動方法;
RAID的啟動有兩種方法,一種䘯指定RAID裝置和RAID成員的辦法來啟動RAID,另一種辦法是通過載入RAID預設的配置檔案來啟動。第一種方法:不通過讀取mdadm.conf來啟動RAID;適用情況是你沒有配置/etc/mdadm.conf
檔案;語法:
mdadm -A RAID裝置 RAID成員注:
-A 同 --assemble
,意思是啟用一個已經存在的RAID;
RAID裝置,就是/dev/md0
或/dev/md1
……根據你所建立的RAID裝置為準;
RAID成員,就是你要啟動的RAID,其下屬裝置有哪些,要一個一個的列出來,中間以空格分開;舉例:比如我要啟動一個RAID,裝置是/dev/md0,其下有成員是
/dev/sdb和/dev/sdc;所以我要用下面的辦法;
[[email protected]:~] mdadm -A /dev/md0 /dev/sdb /dev/sdc
注:這種情況,是沒有配置RAID的配置檔案/etc/mdadm.conf時,所使用的啟動方法;如果您已經配置好了/etc/mdadm.conf檔案,就可以用
mdadm -As 來啟動;第二種方法:利用配置好的/etc/mdadm.conf來啟動RAID;
mdadm -A RAID裝置或
mdadm -As
注:這種啟動方法的前提是要配置/etc/mdadm.conf檔案,要把您系統中所有的RAID,都寫入這個檔案,然後就可以簡單的用這個命令來啟動了;
-A 同 --assemble
,意思是啟用一個已經存在的RAID;
RAID裝置,就是/dev/md0
或/dev/md1
……根據你所建立的RAID裝置為準;舉例:
[[email protected]:~] mdadm -A /dev/md0
[[email protected]:~] mdadm -As
注:比如我配置好/etc/mdadm.conf後,啟動RAID裝置/dev/md0,就用上面的辦法。具體mdadm.conf的寫法,請參見
RAID的配置檔案一節;
2.22 RAID管理工具一些常用引數說明;
mdadm 引數 [RAID裝置]
[RAID成員]
-A 或 --assemble
啟用一個RAID;
-S 和--stop
停止正在執行的裝置;
-s 或 --scan
掃描RAID裝置;
-D 或 --detail
檢視RAID的詳細資訊;
--examine 檢視RAID成員的詳細資訊;注:其中[]中的選項是可選的。舉例:
[[email protected]:~]# mdadm -As
[[email protected]:~]# mdadm -Ss
[[email protected]:~]# mdadm -Ds
[[email protected]:~]# mdadm--examine /dev/sdb
注:上面的些標例,都是在配置好/etc/mdadm.conf的情況下,執行的,如果您沒配置好mdadm.conf檔案,請指定RAID裝置及其成員;其中,--As
是搜尋/etc/mdadm.conf,然後根據 mdadm.conf
配置好的RAID資訊來啟動RAID。
-Ss 是搜尋正在執行的RAID,然後停止。-Ds
搜尋RAID,檢視RAID資訊;
--examine/dev/sdb 是檢視其中一塊硬碟的RAID資訊,這個很有用。比如你忘記了RAID的成員和UUID,想恢復現有的RAID,就要用這個來檢視,然後重新讓RAID啟動起來。比如系統有一個RAID,但在/etc/mdadm.conf中沒有相應的記錄RAID資訊。我不知道這個RAID是哪個型別的,是RAID0,還是RAID1,還是RAID5??到底機器中有幾個RAID?如果您是一個新接手的管理員,應該想知道這些資訊。那就一個一個硬碟,一個一個的分割槽檢視過去。從中找出系統中所有的RAID。然後一個一個的恢復。這時就要用到
--examine這個引數了;
[[email protected]:~]# fdisk -l
[[email protected]:~]# #mdadm --examine /dev/sdb
/dev/sdb:
Magic : a92b4efc
Version : 00.90.00
UUID :35e1a3e6:ed59c368:e5bc9166:5004fe52
Creation Time : Wed Aug 1 07:11:43 2007
RAID Level : RAID0
UsedDev Size : 0
RAID Devices : 2
Total Devices : 2
Preferred Minor : 0
Update Time : Thu Aug 207:43:30 2007
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Checksum : 8f8a235e - correct
Events : 0.29
Chunk Size : 64K
Number Major Minor RAIDDevice State
this 0 8 16 0 active sync /dev/sdb
0 0 8 16 0 active sync /dev/sdb
1 1 8 32 1 active sync /dev/sdc
注:首先:我們用fdisk -l
檢視一下機器中所有硬碟和分割槽,如果不能完全列出,請指定具體硬碟。其次:我們檢視一下某個硬碟或分割槽上是否有RAID資訊,比如我檢視的是/dev/sdb
,結果顯示出,/dev/sdb是RAID0裝置的一個成員,/dev/sdb和/dev/sdc
共同組成的RAID0;得到這些資訊有何用呢?我們就可以啟用RAID,或重寫/etc/mdadm.conf,讓RAID重新執行起來。在此過程中,千萬不要用-C或--create
引數來重新建立RAID,否則你以前存在的RAID就被破壞,裡面的資料當然也會一無所有!!!切記。在一個有資料的RAID中,不能隨便用-C
引數。如果用了-C或--create
就是建立一個新的RAID裝置!
2.3 RAID的配置檔案;
RAID並不是一定要配置檔案,但有配置檔案,會方便管理,比如RAID最精簡的方法執行、狀態檢視……也需要RAID的配置檔案。如果不沒有配置檔案,還要指定RAID成員;
RAID的配置檔案是mdadm.conf
位於/etc目錄,如果你沒有這個檔案,可以自己建立一個;當我們做好R