linux軟raid實現方式
1 什麼是RAID,RAID的級別和特點 ;
什麼是RAID呢?全稱是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,在1987年,由加州大學伯克利大學發表的論文而來,其實就是這個標題的縮寫就是RAID;中譯為“磁碟陣列”;
RAID就是把幾個物理磁碟組合在一起成為一個大的虛擬物理磁碟,主要目的和用途主要有:把若干小容量物理磁碟組成一個大容量虛擬儲存裝置(以前的物理磁碟的容量都比較小);提高物理儲存效率(讀、寫),或提供冗餘以提高資料儲存的安全性。
根據應用方向的不同,RAID也分不不同級別 ,有LINEAR、RAID0、RAID1、RAID5、RAID10、RAID4、RAID6、MULTIPATH。常用的有RAID0、RAID1、RAID5、RAID10(其實就是0+1)、LINEAR
1.1 什麼是硬體RAID和軟RAID;
RAID 還分為硬體RAID 和軟體RAID,硬體RAID是透過RAID 卡來實現的,而軟體RAID是透過軟體來實現的;在企業級應用領域,大部份都是硬體RAID。而軟體RAID由於價效比高,大多被中小型企業所採用;
硬體RAID是透過RAID卡把若干同等容量大小的硬碟,根據使用方向的不同,聚合起來成為一個大的虛擬RAID裝置(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每個硬碟容量不一致,以最小容量的硬碟為基礎;它的成員是整個硬碟;
軟RAID是軟把若干同等容量大小的硬碟或分割槽,根據使用方向的不同,聚合起來成為一個大的虛擬RAID裝置(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每個硬碟或分割槽容量不一致,以最小容量的硬碟或分割槽為基礎。軟RAID的成員是整個硬碟或分割槽;
RAID 總的來說還是應用在生產型專案領域中,一般在商用辦公或個人娛樂應用並未被大規模採用。應有領域大多要求價效比級的低端伺服器或PC-SERVER;
1.2 RAID 的級別及特點;
RAID 有幾種級別,LINEAR,RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY.其中我們常用有RAID0、RAID1、RAID5、RAID10。
下面我們說說常用的RAID0、RAID1、RAID5以及RAID10;
1.21 什麼是軟RAID0及特點;
RAID0 是把兩個或兩個以上的容量相同的硬碟或分割槽,透過RAID控制器(硬RAID是透過RAID卡來實現的,軟RAID 是透過軟體來實現的),結合為一個在容量上是RAID0下成員的容量的總和,在寫入時,要向每個硬碟或分割槽同時寫入資料。
在硬RAID中,RAID0的成員是以整個硬碟為單位的,把兩個硬碟或兩個以上的硬碟透過RAID卡繫結成為一個虛擬的磁碟裝置,而每個硬碟就是RAID0的成員;
在軟RAID0中,RAID0的成員是整個硬碟或分割槽,容量是加入RAID0的所有成員容量的總和。在RAID0中每個成員的容量都是相同一致的。比如我們把 /dev/sdb 、/dev/sdc、/dev/sdd 三個容量大小為80G的硬碟做成RAID0,這時RAID0裝置的容量就是三個硬碟的總和 80x3=240G。當然我們也可以,在寫入資料時,系統要向每個硬碟同時寫入資料,是以條塊的形式寫入。比如我們存一份資料linuxsir.tar.gz 到RAID0的裝置中,這份資料是分拆成若干份被分散的寫入到RAID0中的每個成員中。只有RAID0中的每個成員正常執行,並且RAID0也正常執行的情況下,這份資料才是完整的。RAID0中任何一個成員(硬碟分割槽)有有問題時,RAID0便不能執行,同時資料也不是完整的;
RAID0 在讀寫速度上是比較快的,是普通不做RAID的兩倍左右(注:實際速度和機器的硬體配置有關),所以RAID0常被用於對儲存效率要求較高,但對資料安全性要求不高的應用解決方案中;
安全性:RAID0中有任何一個成員出現故障,整個RAID0就不能被啟用。資料不能保障;
1.22 什麼是軟RAID1及特點;
RAID1就是把若干相同容量的硬碟或分割槽,成員與成員之間是映象關係。在容量上,RAID1裝置是單個成員的容量。比如兩個80G的硬碟做成RAID1,這個RAID1的裝置容量仍是80G。比如我們寫入一個份資料linuxsir.tar.bz2 到RAID1裝置時,其實是向RAID的每個成員都寫了一份。比如RAID1裝置下有兩個成員/dev/sdb和/dev/sdc ,我們寫入linuxsir.tar.bz2 到RAID1時,/dev/sdb和/dev/sdc都有一份完整的linuxsir.tar.bz2。 所以RAID1是冗餘的陣列,一般被用於安全性要求比較高的應用中。
因為RAID1在由於映象冗餘,所以磁碟利用效率並不高,或者說是“浪費”。這種方案相對來說價效比並不高,一般很少應用。資料讀寫效率要比RAID0慢。
安全性:RAID1 中只要有一個成員是健康的,RAID1完全可以啟用,而且資料絕對是完整安全的。如果所有的成員有故障,RAID1也就報廢了。哈哈,這不是廢話嗎?
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/md0 started.
我們要可以透過下面的命令來檢視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;所以我要用下面的辦法;
[root@linuxsir:~] 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裝置為準;
舉例:
[root@linuxsir:~] mdadm -A /dev/md0
[root@linuxsir:~] 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成員的詳細資訊;
注:其中[]中的選項是可選的。
舉例:
[root@linuxsir:~]# mdadm -As
[root@linuxsir:~]# mdadm -Ss
[root@linuxsir:~]# mdadm -Ds
[root@linuxsir:~]# 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這個引數了;
[root@linuxsir:~]# fdisk -l
[root@linuxsir:~]# # 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
Used Dev Size : 0
RAID Devices : 2
Total Devices : 2
Preferred Minor : 0
Update Time : Thu Aug 2 07: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目錄,如果你沒有這個檔案,可以自己建立一個;當我們做好RAID後,首先要配置這個檔案;把你所有的RAID配置資訊都寫入這個檔案。 我們可以自己手工編寫。參照mdadm.conf 配置檔案的示例就比較方便。
你也可以用下面的辦法,要先做好/etc/mdamd.conf的備份;
[root@linuxsir~] mv /etc/mdadm.conf /etc/mdadm.conf.bak
第一步:搜尋RAID;
搜尋RAID是以啟用RAID為前掉條件,否則下面的命令不會有什麼作用;請參見啟用RAID的辦法;
語法:
mdadm -Ds
注: 其中-D 表示 --detail ,-s 表示--scan ,兩者結合起來就-Ds;
提示:執行查詢RAID的時,要首先啟用RAID;
舉例:
[root@linuxsir~] mdadm -Ds
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
第二步:查詢RAID的詳細資訊;主要是檢視RAID的成員有哪些;
語法:
mdadm -D RAID裝置
舉例:
下面查詢已經啟動了的RAID裝置/dev/md0的詳細資訊;
[root@linuxsir~] mdadm -D /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Wed Aug 1 07:11:43 2007
RAID Level : RAID0
Array Size : 156249856 (149.01 GiB 160.00 GB)
RAID Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Aug 2 07:22:27 2007
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
Events : 0.21
Number Major Minor RAIDDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
注:透過查詢詳細資訊,我們得到 /dev/md0是RAID0,下面兩個成員/dev/sdb和/dev/sdc ;UUID為 35e1a3e6:ed59c368:e5bc9166:5004fe52 ;這個RAID是有超級塊的;
第三步:書寫RAID的配置檔案mdadm.conf;
[root@linuxsir~] mdadm -Ds >> /etc/mdadm.conf 注:把查詢出來的RAID資訊寫到mdadm.conf中;
[root@linuxsir~]more /etc/mdadm.conf 注:看看有沒有內容寫進來?
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
因為我們在前面已經透過mdadm -D /dev/md0 得知其下有成員/dev/sdb 和 /dev/sdc 兩塊硬碟。所以我們要修改一下mdamd.conf的內容。要在加上/dev/md0的成員/dev/sdb和/dev/sdc;用編輯器開啟/etc/mdadm.conf;
在下面類似的一行;
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
修改成
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 devices=/dev/sdb,/dev/sdc
其實也就是把/dev/md0這個RAID裝置的成員指定出來,每個裝置之間要用,號隔開。或者寫成 devices=/dev/sd[bc]類似的寫法也行;
我們來看一下/dev/md0這行,其中/dev/md0這行是一個RAID0裝置,由兩個成員組成,/dev/md0的UUID為 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 ,兩個成員分別是/dev/sdb和/dev/sdc兩個硬碟;
其實我們無論新增多少RAID裝置,都可以透過這種方法寫入RAID配置檔案/etc/mdadm.conf中,每個RAID裝置一行;寫好後,我們要重啟一下RAID;
[root@linuxsir~] mdadm -Ss
或
[root@linuxsir~] mdadm --stop --scan
mdadm: stopped /dev/md0
[root@linuxsir~] mdadm -As
或
[root@linuxsir~] mdadm --assemble --scan
mdadm: /dev/md0 has been started with 2 drives.
注: -S 和--stop相同,表示停止RAID。而-s和 --scan相同,表示掃描RAID。-A和--assemble表示啟用RAID;這些引數都比較簡單,查查man和help就知道了;
啟用RAID後,我們要透過檢視RAID的狀態來判斷RAID是否正常和健康……
3 RAID裝置的使用:RAID裝置分割槽、檔案系統初始化,掛載方法;
既然我們已經把RAID裝置做好了,我們就要使用這個裝置。RAID做好後,類似一個沒有格式化的新硬碟。如果我們拿到新硬碟時第一步是做什麼?對,是分割槽和格式化,安裝作業系統。RAID做好後,沒有檔案系統,一樣是沒辦法用的,所以我們做好RAID後,要來建立檔案系統;RAID只不過是把幾個硬碟或分割槽繫結在一起成為一個大的虛擬物理儲存裝置。如果我們要對這個大的虛擬裝置進行使用,就要在這個裝置上建立檔案系統才行。Linux 目前可用的檔案系統有reiserfs、xfs、ext3,我推薦reiserfs和xfs,感覺這個比較安全點。雖然現在有超強的zfs,但我認為還是處於小白鼠階段。對於重量級應用來說,我們還是觀察一段時間再說。
RAID做好後,我們要為它進行檔案系統初始化,當初始化完成後,我們就可以掛載使用了。在一般情況下,我們可以把做好的RAID掛載到/home,我們可以把所有的儲存性檔案。
在Linux中,建立檔案系統的工具有 mkfs.xfs(建立xfs檔案系統), mkfs.jfs(建立JFS檔案系統), mkfs.reiserfs (建立reiserfs檔案系統), mkfs.ext3 (建立ext3檔案系統)…… 。我們推薦的是reiserfs和xfs,不推薦ext2或ext3,為什麼不推薦?因為實踐是檢驗真理的唯一標準,效能不如人、安全性不如人,怎麼用?我不是ext檔案系統的專家,我只用最方便,維護起來比較容易的檔案系統。
RAID也可以分割槽來使用,但以我看來,大可不必,凡是能用到RAID的,大多是伺服器領域。我們可以把RAID做成後,掛載到/home目錄上。有關資料儲存的都放在RAID上。作業系統並不安裝在RAID上,當作業系統發生故障的時候,我們僅僅是修復或重灌作業系統,對資料儲存的RAID沒有任何影響。就是重灌作業系統,我們也能在幾分鐘之內恢復RAID。
如果您想把RAID再進進行分割槽使用,可以用fdisk 、parted或cfdisk 來進行分割槽工作,也可以嘗試LVM的來對分割槽進行管理,LVM能自動調整分割槽的大小。當然,我不會推薦RAID+LVM,或對RAID進行分割槽操作。
RAID做好後,我們就像使用物理硬碟一樣使用它,比如根據前面的例子,把/dev/sdb和/dev/sdc兩個硬碟做成RAID0,其裝置為/dev/md0,我們就可以對/dev/md0進行和物理硬碟一樣的操作。如果我們不分割槽,只是進行建立檔案系統,那就比較簡單了。
比如我們在/dev/md0上建立reiserfs檔案系統,我們可以用mkfs.reiserfs命令來完成。
第一步:檢視/dev/md0裝置是否存在,以及它的容量;
[root@linuxsir:~]# fdisk -l /dev/md0
Disk /dev/md0: 159.9 GB, 159999852544 bytes
2 heads, 4 sectors/track, 39062464 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
注:我們可以看到/dev/md0裝置有 158.0GB的容量,不包含有效分割槽。如果您想要用分割槽操作,請用fdisk /dev/md0 、或cfdisk /dev/md0 或parted /dev/md0來操作;
第二步:建立檔案系統;
在這裡我們是計劃用 reiserfs 檔案系統;
[root@linuxsir:~]# mkfs.reiserfs /dev/md0
mkfs.reiserfs 3.6.19 (2003 )
A pair of credits:
Nikita Danilov wrote most of the core balancing code, plugin infrastructure,
and directory code. He steadily worked long hours, and is the reason so much of
the Reiser4 plugin infrastructure is well abstracted in its details. The carry
function, and the use of non-recursive balancing, are his idea.
Oleg Drokin was the debugger for V3 during most of the time that V4 was under
development, and was quite skilled and fast at it. He wrote the large write
optimization of V3.
Guessing about desired format.. Kernel 2.6.21.5-smp is running.
Format 3.6 with standard journal
Count of blocks on the device: 39062464
Number of blocks consumed by mkreiserfs formatting process: 9404
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 2b06b743-8a4e-4421-b857-68eb2176bc50
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/md0'!
Continue (y/n):y 注:在這裡輸入y ,就進行建立檔案系統了;
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/md0.
這樣檔案系統 reiserfs 就建立成功了。如果您想建立xfs檔案系統,就用mkfs.xfs /dev/md0 ,其它檔案系統也類似 ……
第三步:掛載檔案系統並使用;
[root@linuxsir:~]# mkdir /mnt/data
[root@linuxsir:~]# mount /dev/md0 /mnt/data
[root@linuxsir:~]# df -lh /dev/md0
檔案系統 容量 已用 可用 已用% 掛載點
/dev/md0 150G 33M 149G 1% /mnt/RAID0
注: 這樣就就/dev/md0 裝置掛載到/mnt/RAID0上了。可以看到裝置大小為150G。已使用33M,掛載點為/mnt/RAID0。我們可以向裝置裡儲存檔案;
其實根據Linux檔案系統的結構,以及最新Linux軟體方便易用的特點。我們完全可以把/home獨立出來。把RAID裝置掛載到/home目錄上。凡是涉及使用者或資料儲存的,都可以放在/home中,比如資料庫,網路伺服器有關資料儲存的,都指定到 /home中的資料夾中。所有的一切都是根據方便管理為前提。
如果您的RAID是在安裝系統後建立的,如果掛載到Linux現有目錄下,要先做好相應目錄的資料遷移到RAID裝置中,然後再把RAID掛載到Linux目錄中。比如你想把RAID掛載到/home目錄中,可以先建立一個臨時的目錄,把RAID掛到這個臨時的目錄上,接著再把/home目錄下的檔案都移到 RAID上,然後再把RAID解除安裝,再重新掛載到/home中,這樣/home的資料就完遷移了。
至於如何把作業系統安裝或移到RAID上,不同的Linux發行版有不同的方法。Fedora或Redhat在安裝的過程中,就為我們提供了在RAID1上安裝系統。其它的發行版是否支援,不太知道,Slackware是不支援。如果您想把系統移植到RAID1中,可能需要安裝好系統後,再進行移植。 感覺軟RAID1在一塊硬碟上做,沒太大的必要,如果要做RAID1,也要在兩個硬碟上(或兩個屬於不同硬碟的分割槽上來做)。
如何開機掛載RAID裝置,不同的發行版也有自己的方法,流程是先啟用RAID,然後才是掛載。
4 軟RAID的高階進階及維護;
RAID做好以後,並不是萬事大吉了,還要進行日常維護;比如某個硬碟(或分割槽)壞掉,我們可以在不停機的情況下換上。或者我們為RAID做一個冗餘的硬碟或分割槽,當RAID發生故障時,冗餘硬碟或分割槽自動推上工作,能實現零停機任務。
4.1 如何向已存在的RAID中,新增一塊硬碟或分割槽;
RAID有幾種模式,比如建立、管理。下面我們所說的就是RAID的管理模式Manage,也可以說是RAID的進階應用。管理模式的目的,僅僅是為了把有問題的RAID成員換掉,或者為了管理的需要把其中一個RAID成員由另一個來替換,也可能是為了安全需要,讓新增加的硬碟或分割槽當做RAID的備用(spare)成員;在管理模式中, RAID的真正成員個數並不改變。比如我們做RAID5是,用的是三個硬碟或分割槽。在增加RAID成員時,RAID5仍是三個成員,容量還是保持不變,如果三個RAID成員完全正常健康,新增加的成員,僅僅是備用(spare)成員。備用成員的用途就是當RAID的真正成員發生問題時,備用成員會馬上啟動,僅僅是起到安全的冗餘的作用;
我們要向一個既已存在RAID中,新增或移除一個硬碟或分割槽,我們要用到mdadm 工具的 -f 和-r 以及-a 引數;
mdadm /dev/mdX -f RAID成員
mdadm /dev/mdX -r RAID成員
mdadm /dev/mdX -a RAID成員
注:
-f 同 --fail 表示把一個裝置列為有問題的裝置,以便用-r或--remove引數移除;
-r 同 --remove 表示把RAID中的一個成員移出RAID;
-a 同 --add 表示向一個RAID中新增一個成員;
--re-add 重新把最近移除的RAID成員重新新增到RAID中;
值得一提的是,這些引數的運用,必須是在RAID正常執行的情況下進行。其中RAID裝置是/dev/mdX,X是一個大於0的整數,RAID成員是一個硬碟或分割槽。新增裝置並不會把RAID的容量擴大,僅僅是為了新增備用成員,比如在RAID1、RAID5和RAID10中特加有用。當一個RAID成員發生故障的時候,要用這種辦法來讓新成員頂替工作;
舉例:
[root@linuxsir:~]# mdadm /dev/md0 -f /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -r /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb5
注:當我們想把一個RAID的成員/dev/sdb3移除 RAID裝置/dev/md0時,要首先標註它為有問題的(也可能是完全正常的,為了管理需要)。然後 用-r引數移除,接著用-a 引數再新增一個裝置/dev/sdb5到RAID裝置/dev/md0中;
當我們用mdadm -D /dev/md0檢視RAID的狀態時,我們會看到RAID的詳細資訊。比如是否正常、RAID成員…… 下面是我們需要掌握的;
Raid Level : 注:陣列級別;比如Raid5
Array Size : 注:陣列容量大小;
Used Dev Size : 注:RAID單位成員容量大小,也就是構成RAID的成員硬碟或分割槽的容量的大小;
Raid Devices : 注:RAID成員的個數;
Total Devices : RAID中下屬成員的總計個數,因為還有冗餘硬碟或分割槽,也就是spare,為了RAID的正常運珩,隨時可以推上去加入RAID的;
State : clean, degraded, recovering 注:狀態,包括三個狀態,clean表示正常, degraded 表示有問題, recovering 表示正在恢復或構建;
Active Devices : 被啟用的RAID成員個數;
Working Devices : 注:正常的工作的RAID成員個數;
Failed Devices : 出問題的RAID成員;
Spare Devices : 備用RAID成員個數,當一個RAID的成員出問題時,用其它硬碟或分割槽來頂替時,RAID要進行構建,在沒構建完成時,這個成員也會被認為是spare裝置;
Rebuild Status : 注:RAID的構建進度,比如 38% complete ,表示構建到 38%;
UUID : 注:RAID的UUID值,在系統中是唯一的;
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:表示這個成員是啟用的;
1 8 18 1 active sync /dev/sdb2 注:表示這個成員是啟用的;
4 8 19 2 spare rebuilding /dev/sdb3 注:未被啟用,正在構建中的成頁,正在傳輸資料;
3 8 49 - spare /dev/sdd1
注:spare /dev/sdd1 表示/dev/sdd1是RAID的備用成員,當RAID的正式成員/dev/sdb1、/dev/sdb2或/dev/sdb3中有一個出問題的時候,這個備用成員會自動進行工作的。這個並不是必須的,可以用新增RAID成員的辦法來新增,也可以在建立的RAID的時候新增;
4.2 如何為一個現有RAID擴充容量;
在RAID的管理模式中,我們提到增加RAID成員的辦法,如果RAID所有真正成員都是健康的,這個成員就進入備用(spare)狀態。只有當真正成員有問題時,這個備用成員才啟用頂替出問題的成員來工作。
但我們能不能向RAID新增一個新成員,並且讓他成為RAID的真正成員,並且達到為RAID擴充容量呢?比如有一個RAID5,用的是3個20G 的分割槽做的,其總容量是(3-1)x20=40G,我們能否為這個RAID5新增加一個20G的分割槽,並且讓其成為這個RAID5真正的成員,並且達到擴充容量的目的,也就是說讓這個RAID5有四個真正的成員,其容量為(4-1)x20=60G。
在硬RAID中,這個工作比較容易,但在軟RAID中,是否能實現呢?答案是肯定的,這種情況僅針對已經做好的RAID,並且已經在儲存過程中發現RAID容易不足的情況下使用。如果是一個新做的RAID,我們發現計劃錯了,我們重新做一次就行了,沒必要用擴容的辦法。
我們為現有的RAID擴充容量,利用的就是RAID的Grow模式,中譯為RAID的增長模式;應用範圍是RAID1、RAID4、RAID5、RAID6。
RAID擴容流程:
向一個已經存在的RAID中新增一個成員->執行擴容指令
注: 在這裡我們要用到RAID的管理模式中的新增成員的辦法。也就是用到mdadm 中的-a 引數,請參考上一節的內容。這時新增的成員是備用(spare)成員,我們要把備用成員“推”到位置上。這時我們要用到mdadm的Grow模式;
舉例說明:
比如我們做的RAID5,由三個硬碟分割槽/dev/sdb1、/dev/sdc1、/dev/sdd1構成,這時的RAID5真正成員就是3個。當我們新增一個分割槽/dev/sdb2到這個RAID5時,新增加的這個sdb2就是這個RAID5R 的備用(spare)成員。比如已有的RAID5的裝置是/dev/md0;
· 首先,檢視RAID狀態;
[root@linuxsir:~]# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5 注:RAID級別;
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每個成員的容量是19534912
Raid Devices : 3 注:RAID真正成員是3個裝置構成;
Total Devices : 3 注: 總共裝置是3個;
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:02:33 2007
State : clean 注:狀態正常;
Active Devices : 3 注:啟用的裝置是3個;其實就是RAID真正成員正常啟用的個數;
Working Devices : 3 注:正常工作的裝置是3個;
Failed Devices : 0 注:有問題的裝置是0個;
Spare Devices : 0 注:備用裝置是0個;
Layout : left-symmetric
Chunk Size : 64K
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d 注:RAID的UUID;
Events : 0.16
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:RAID真正成員/dev/sdb1
1 8 33 1 active sync /dev/sdc1 注:RAID真正成員/dev/sdc1
2 8 49 2 active sync /dev/sdd1 注:RAID真正成員/dev/sdd1
· 其次,我們為這個RAID5新增一個成員;
把/dev/sdb2新增到RAID裝置/dev/md0,然後檢視RAID的狀態及詳細資訊;
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb2 注:新增分割槽/dev/sdb2到/dev/md0中;
mdadm: added /dev/sdb2
[root@linuxsir:~]# mdadm -D /dev/md0 注:檢視/dev/md0的詳細資訊;
/dev/md0:
Version : 00.90.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5 注:RAID級別;raid5
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每個成員的容量是19534912
Raid Devices : 3 注:RAID真正成員是3個裝置構成;
Total Devices : 4 注: 總共裝置是4個;
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:14:13 2007
State : clean 注:狀態正常;
Active Devices : 3 注:啟用的裝置是3個;其實就是RAID真正成員正常啟用的個數;
Working Devices : 4 注:正常工作的裝置是4個;
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
Events : 0.18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:RAID真正成員/dev/sdb1
1 8 33 1 active sync /dev/sdc1 注:RAID真正成員/dev/sdc1
2 8 49 2 active sync /dev/sdd1 注:RAID真正成員/dev/sdd1
3 8 18 - spare /dev/sdb2 注:注:RAID備用成員/dev/sdb2
新增/dev/sdb2到/dev/md0後,我們發現RAID的組成裝置總數由3個變成了4個,但真正成員個數並沒有變化,多出了一個備用成員/dev/sdb2。但/dev/md0的容量並沒有變大。 所以這時我們要為RAID來擴容,解決辦法就是讓/dev/sdb2成為RAID的真正成員,RAID的容易由 40G擴充套件到 60G;
· 第三,為RAID進行擴充容量;
在這裡我們要用到RAID的Grow模式,也就是增長模式。擴充模式,極為簡單,有--size引數,-n引數 --size是指大定RAID的大小,這個可以省略,具體由你所做的RAID級別而定。 -n 代表RAID真正成員的個數。在這個例子中,RAID5真正成員是3個,後來我們又新增了一個備用成員/dev/sdb2進去。我們所做的就是把這個備用成員“推”到真正成員的位置上。也就是說RAID的真正成員由3個變成4個。只是這一簡單的指令,就可以讓RAID5容量增加起來。
[root@linuxsir:~] # mdadm -G /dev/md0 -n4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.
然後我們檢視RAID的詳細資訊;
[root@linuxsir:~] # mdadm -D /dev/md0
/dev/md0:
Version : 00.91.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID的容量,我們發現RAID的容量並沒有增大,這是因為構建沒有完成;等構建完成時就會改變過來;
Used Dev Size : 19534912 (18.63 GiB 20.00 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:36:06 2007
State : clean, recovering 注:正常,恢復中;
Active Devices : 4 注:RAID的正式成員已經變到4個;
Working Devices : 4
Failed Devices : 0
Spare Devices : 0 注:備用成員由1個,減少到0個;說明已經把RAID備用成員推到了RAID的正式成員中;
Layout : left-symmetric
Chunk Size : 64K
Reshape Status : 17% complete 注:RAID重新構建狀態,已經完成17%;目前並未完成構建;
Delta Devices : 1, (3->4) 注:RAID的正式成員增加一個,由3個到4個;
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
Events : 0.100
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 18 3 active sync /dev/sdb2 注:/dev/sdb2已經由spare改變到 active ,也就是說由備用
當執行完增容後,我們發現RAID的容量並沒有增大,這是因為構建沒有完成,等RAID完成構建後,RAID的容量就會改變為 19534912x(4-1)=58604736K=60G;構建進度也可以cat /proc/mdstat 來檢視。
新增加一個RAID正式成員的辦法,不會讓RAID原有的資料丟失,也不會破壞原有的資料。所以這種辦法對RAID已經儲存大量資料,當容量發生危機時而不損失原有資料的前提下,所採用的一種安全可行的擴容辦法; 當然擴容後,你要修改 /etc/mdadm.conf;
4.3 RAID正式成員個數達不到RAID啟動要求時,如何啟動RAID;
可能存在這樣一種狀況,當RAID的一個正式成員掛掉後,這時RAID按以前說的常規辦法是不能啟動的。這時我們要強制啟動,要用到--run 引數;比如當做RAID5時,我們用到了三個硬碟或分割槽,當其中有一個掛掉,按RAID5的特點來說,資料一樣是安全完整的,但RAID5啟動按常規辦法是必須要達到做RAID時所指定的正式成員個數,這時按常規啟動辦法是不行的,我們要用到--run引數;
我們舉個例子。比如RAID5正式成員有3個/dev/sdb1,/dev/sdb2,/dev/sdb3,我們只用/dev/sdb1和/dev/sdb2來啟動RAID5;
[root@linuxsir:~] # mdadm -A --run /dev/md0 /dev/sdb1 /dev/sdb2
5 軟RAID裝置使用方向的探討;
對於軟RAID是把幾個同容量的物理磁碟或分割槽組成一個大的虛擬裝置來用,我們應用方向是什麼呢?透過RAID的定義,我們可以知道RAID是為了解決容量、讀寫效率以及磁碟冗餘安全而提出來的。
5.1 僅僅是為了擴充儲存可用空間,是否必需做RAID;
如果是僅僅解決容量問題,我看大可不必用RAID。因為LVM比RAID更為靈活,無論怎麼做,都不會帶來容易上的損失。而只有RAID0和 LINEAR 級別才不會帶來容量上的損失,RAID1、RAID5和RAID10由於要有安全冗餘,所以RAID的容量必然減少;
LVM 技術能把所有空閒硬碟或分割槽結合在一起來使用,並不要求每個分割槽或硬碟大小容易是一致的,而RAID必須要求每個RAID成員容量大小相同,如果不相同,以最小的成員的容易計算,這個損失還不算,還要有安全冗餘帶來的容量損失,比如把兩塊80G的硬碟做成RAID1,這時的RAID1是一塊硬碟的容量。LVM做好後,也相當於一個空白的虛擬裝置,可以在上面劃成一個分割槽來使用,也可以劃分幾個,如果劃成幾個,我們還可以自動調整分割槽的大小。而RAID一但做好,如果再進行分割槽,分割槽的容量是沒辦法自由調整的;
有的弟兄會問,我是不是做好RAID,然後在RAID上再做LVM,也就是RAID+LVM模式。這種方案實現起來並不困難,但對於軟RAID來說,這種方案是否真的價值? 我們用RAID的目的無非是“容量+讀寫效率+安全”。我們有必要把做好的RAID再分割的四分五裂嗎? 我感覺沒必要,因為對於儲存裝置來說,每增強一項管理技術,就意味著風險,這種風險一是來自於管理員技術水平,二是來自於裝置老化。另外集中於不分割槽的儲存裝置,也能為資料遷移和系統管理帶來方便;
5.2 在同一個硬碟做RAID是否有必要;
在同一塊硬碟上做RAID是否有必要,如果您是想提高資料讀寫速度,還是有必要的。RAID0就能為你帶來這種高速儲存的快感。如果您想在同一塊硬碟上做軟RAID,想同時兼顧效率和安全,我看大可以免了。因為硬碟一壞掉,什麼重要的資料都會一鍋爛;
5.3 軟RAID的合理使用方向;
目前支援SATA主機板的機器只能技術最多四塊硬碟。比如四個80G的SATA硬碟,IDE硬碟也同理;我們要根據自己的使用方向來做RAID。下面我根據一個示例來說明RAID的合理使用方向;
第一個硬碟分割槽情況:
/dev/sda1 20G大小
/dev/sda2 20G大小
/dev/sda3 20G大小
-----/dev/sda5 swap 分割槽 -記憶體兩倍大小
-----/dev/sda6 用於/tmp 2G大小;
-----/dev/sda7
注:我們首先把作業系統安裝到第一個分割槽/dev/sda1 ,交換分割槽是/dev/sda5,/dev/sda6為臨時/tmp的目錄;那/dev/sda1和 sda2、sda3、sda7是用做什麼的呢?可以用來安裝系統。我們設計的是僅安裝系統,涉及資料儲存的,都放到RAID上。比如我把sda1和sda2安裝同樣的系統,把由第二三四塊硬碟做好的RAID掛在/home上,所有應用資料都存在RAID上。當sda1系統被破壞時,我們可以用最短的時間啟用sda2的系統,並在sda2上裝載由第二三四塊硬碟上做的RAID。
第二三四個硬碟,我們可以用來整塊硬碟來做RAID, 不必為每塊硬碟分割槽。比如為了讀寫效率,我們可以做成RAID0,為了安全,你可以做RAID5。 如果做RAID0裝置的容量是3x80G=240G,如果做RAID5,RAID5裝置的容量是(3-1)x80=160G。有的弟兄可能會說,為什麼我不能把磁碟進行分割槽,然後做RAID0呢?RAID10也就是RAID0+RAID1的組合,安全和效率都有。這種方案也是可以的,但您必須做到,當有一個硬碟壞掉時,不會影響資料的整體安全性。也就是說,當一個硬碟壞掉時,另外兩塊硬碟組合起來,仍能組成一份完整的資料。當RAID中的一塊硬碟壞掉時,我們能透過更換硬碟,簡單的修復,就能讓RAID正常執行起來,而且資料是完整的。如果您對資料安全極為重視的,在做軟RAID的過程中,能做到這點,這個RAID方案就屬於你。
所以在做軟RAID時,首先要明白自己的目的是什麼,然後再來根據目的判斷自己的所要達到的效果。如果是簡單追求的是讀寫效率,我們就不必考慮資料的安全性。如果是資料的安全性對我們來說極為重要,我們就要判斷,當一塊硬碟壞掉時,是否影響資料的完整性!比如,我們用兩塊硬碟來做RAID5或RAID10,可以這樣說,沒有一點安全性的。無論您怎麼分割槽和組合,也不會為您帶來一點安全感。
6 常見問題及處理;
涉及一些補充和增訂的內容,我們在這裡一一列出;
6.1 如何清除一個RAID成員的超級塊儲存存的RAID資訊;
RAID成員在 superblock中所儲存的RAID資訊是極為重要的,我們可以根據這個資訊輕鬆恢復RAID。
mdadm --zero-superblock RAID成員;
如果你確認RAID成員這個成員對你沒任何用處,你已經把這個成員移除RAID,並且您想把這個裝置另作他用。這時你可以清除其 superblock的資訊。比如;
[root@linuxsir:~] # mdadm --zero-superblock /dev/sdd3
這個示例就是清除/dev/sdd3中的超級塊中所儲存的RAID資訊;
7 關於本文;
其實軟RAID使用起來比較簡單,難點在於後期的管理和維護。軟RAID的使用教程,其實用幾個命令足以能說的清楚。但一想到初學Linux的弟兄也可能象我當初學習Linux一樣,總想找一個Step By Step的教程看著實現自己想要做的東西,基於這個大多數初學者的想法,我就寫了這麼一個看起來相對複雜的文章。
這篇文章看起來條理不夠清晰,另外mdadm的模式也沒有給大家說,而是把模式分拆開來放在具體的應用中。
我僅僅是用自己從新手理解的角度來寫這篇文章,文中大量存在不規範的用語,這也是在情理之中的。最主要的是有些專業束語我不知道如何翻譯才好。
歡迎弟兄們指正,還是那句話“看北南寫的文件,要一分為二,看著批,批著看!”
什麼是RAID呢?全稱是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,在1987年,由加州大學伯克利大學發表的論文而來,其實就是這個標題的縮寫就是RAID;中譯為“磁碟陣列”;
RAID就是把幾個物理磁碟組合在一起成為一個大的虛擬物理磁碟,主要目的和用途主要有:把若干小容量物理磁碟組成一個大容量虛擬儲存裝置(以前的物理磁碟的容量都比較小);提高物理儲存效率(讀、寫),或提供冗餘以提高資料儲存的安全性。
根據應用方向的不同,RAID也分不不同級別 ,有LINEAR、RAID0、RAID1、RAID5、RAID10、RAID4、RAID6、MULTIPATH。常用的有RAID0、RAID1、RAID5、RAID10(其實就是0+1)、LINEAR
1.1 什麼是硬體RAID和軟RAID;
RAID 還分為硬體RAID 和軟體RAID,硬體RAID是透過RAID 卡來實現的,而軟體RAID是透過軟體來實現的;在企業級應用領域,大部份都是硬體RAID。而軟體RAID由於價效比高,大多被中小型企業所採用;
硬體RAID是透過RAID卡把若干同等容量大小的硬碟,根據使用方向的不同,聚合起來成為一個大的虛擬RAID裝置(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每個硬碟容量不一致,以最小容量的硬碟為基礎;它的成員是整個硬碟;
軟RAID是軟把若干同等容量大小的硬碟或分割槽,根據使用方向的不同,聚合起來成為一個大的虛擬RAID裝置(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每個硬碟或分割槽容量不一致,以最小容量的硬碟或分割槽為基礎。軟RAID的成員是整個硬碟或分割槽;
RAID 總的來說還是應用在生產型專案領域中,一般在商用辦公或個人娛樂應用並未被大規模採用。應有領域大多要求價效比級的低端伺服器或PC-SERVER;
1.2 RAID 的級別及特點;
RAID 有幾種級別,LINEAR,RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY.其中我們常用有RAID0、RAID1、RAID5、RAID10。
下面我們說說常用的RAID0、RAID1、RAID5以及RAID10;
1.21 什麼是軟RAID0及特點;
RAID0 是把兩個或兩個以上的容量相同的硬碟或分割槽,透過RAID控制器(硬RAID是透過RAID卡來實現的,軟RAID 是透過軟體來實現的),結合為一個在容量上是RAID0下成員的容量的總和,在寫入時,要向每個硬碟或分割槽同時寫入資料。
在硬RAID中,RAID0的成員是以整個硬碟為單位的,把兩個硬碟或兩個以上的硬碟透過RAID卡繫結成為一個虛擬的磁碟裝置,而每個硬碟就是RAID0的成員;
在軟RAID0中,RAID0的成員是整個硬碟或分割槽,容量是加入RAID0的所有成員容量的總和。在RAID0中每個成員的容量都是相同一致的。比如我們把 /dev/sdb 、/dev/sdc、/dev/sdd 三個容量大小為80G的硬碟做成RAID0,這時RAID0裝置的容量就是三個硬碟的總和 80x3=240G。當然我們也可以,在寫入資料時,系統要向每個硬碟同時寫入資料,是以條塊的形式寫入。比如我們存一份資料linuxsir.tar.gz 到RAID0的裝置中,這份資料是分拆成若干份被分散的寫入到RAID0中的每個成員中。只有RAID0中的每個成員正常執行,並且RAID0也正常執行的情況下,這份資料才是完整的。RAID0中任何一個成員(硬碟分割槽)有有問題時,RAID0便不能執行,同時資料也不是完整的;
RAID0 在讀寫速度上是比較快的,是普通不做RAID的兩倍左右(注:實際速度和機器的硬體配置有關),所以RAID0常被用於對儲存效率要求較高,但對資料安全性要求不高的應用解決方案中;
安全性:RAID0中有任何一個成員出現故障,整個RAID0就不能被啟用。資料不能保障;
1.22 什麼是軟RAID1及特點;
RAID1就是把若干相同容量的硬碟或分割槽,成員與成員之間是映象關係。在容量上,RAID1裝置是單個成員的容量。比如兩個80G的硬碟做成RAID1,這個RAID1的裝置容量仍是80G。比如我們寫入一個份資料linuxsir.tar.bz2 到RAID1裝置時,其實是向RAID的每個成員都寫了一份。比如RAID1裝置下有兩個成員/dev/sdb和/dev/sdc ,我們寫入linuxsir.tar.bz2 到RAID1時,/dev/sdb和/dev/sdc都有一份完整的linuxsir.tar.bz2。 所以RAID1是冗餘的陣列,一般被用於安全性要求比較高的應用中。
因為RAID1在由於映象冗餘,所以磁碟利用效率並不高,或者說是“浪費”。這種方案相對來說價效比並不高,一般很少應用。資料讀寫效率要比RAID0慢。
安全性:RAID1 中只要有一個成員是健康的,RAID1完全可以啟用,而且資料絕對是完整安全的。如果所有的成員有故障,RAID1也就報廢了。哈哈,這不是廢話嗎?
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/md0 started.
我們要可以透過下面的命令來檢視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;所以我要用下面的辦法;
[root@linuxsir:~] 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裝置為準;
舉例:
[root@linuxsir:~] mdadm -A /dev/md0
[root@linuxsir:~] 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成員的詳細資訊;
注:其中[]中的選項是可選的。
舉例:
[root@linuxsir:~]# mdadm -As
[root@linuxsir:~]# mdadm -Ss
[root@linuxsir:~]# mdadm -Ds
[root@linuxsir:~]# 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這個引數了;
[root@linuxsir:~]# fdisk -l
[root@linuxsir:~]# # 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
Used Dev Size : 0
RAID Devices : 2
Total Devices : 2
Preferred Minor : 0
Update Time : Thu Aug 2 07: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目錄,如果你沒有這個檔案,可以自己建立一個;當我們做好RAID後,首先要配置這個檔案;把你所有的RAID配置資訊都寫入這個檔案。 我們可以自己手工編寫。參照mdadm.conf 配置檔案的示例就比較方便。
你也可以用下面的辦法,要先做好/etc/mdamd.conf的備份;
[root@linuxsir~] mv /etc/mdadm.conf /etc/mdadm.conf.bak
第一步:搜尋RAID;
搜尋RAID是以啟用RAID為前掉條件,否則下面的命令不會有什麼作用;請參見啟用RAID的辦法;
語法:
mdadm -Ds
注: 其中-D 表示 --detail ,-s 表示--scan ,兩者結合起來就-Ds;
提示:執行查詢RAID的時,要首先啟用RAID;
舉例:
[root@linuxsir~] mdadm -Ds
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
第二步:查詢RAID的詳細資訊;主要是檢視RAID的成員有哪些;
語法:
mdadm -D RAID裝置
舉例:
下面查詢已經啟動了的RAID裝置/dev/md0的詳細資訊;
[root@linuxsir~] mdadm -D /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Wed Aug 1 07:11:43 2007
RAID Level : RAID0
Array Size : 156249856 (149.01 GiB 160.00 GB)
RAID Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Aug 2 07:22:27 2007
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
Events : 0.21
Number Major Minor RAIDDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
注:透過查詢詳細資訊,我們得到 /dev/md0是RAID0,下面兩個成員/dev/sdb和/dev/sdc ;UUID為 35e1a3e6:ed59c368:e5bc9166:5004fe52 ;這個RAID是有超級塊的;
第三步:書寫RAID的配置檔案mdadm.conf;
[root@linuxsir~] mdadm -Ds >> /etc/mdadm.conf 注:把查詢出來的RAID資訊寫到mdadm.conf中;
[root@linuxsir~]more /etc/mdadm.conf 注:看看有沒有內容寫進來?
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
因為我們在前面已經透過mdadm -D /dev/md0 得知其下有成員/dev/sdb 和 /dev/sdc 兩塊硬碟。所以我們要修改一下mdamd.conf的內容。要在加上/dev/md0的成員/dev/sdb和/dev/sdc;用編輯器開啟/etc/mdadm.conf;
在下面類似的一行;
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
修改成
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 devices=/dev/sdb,/dev/sdc
其實也就是把/dev/md0這個RAID裝置的成員指定出來,每個裝置之間要用,號隔開。或者寫成 devices=/dev/sd[bc]類似的寫法也行;
我們來看一下/dev/md0這行,其中/dev/md0這行是一個RAID0裝置,由兩個成員組成,/dev/md0的UUID為 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 ,兩個成員分別是/dev/sdb和/dev/sdc兩個硬碟;
其實我們無論新增多少RAID裝置,都可以透過這種方法寫入RAID配置檔案/etc/mdadm.conf中,每個RAID裝置一行;寫好後,我們要重啟一下RAID;
[root@linuxsir~] mdadm -Ss
或
[root@linuxsir~] mdadm --stop --scan
mdadm: stopped /dev/md0
[root@linuxsir~] mdadm -As
或
[root@linuxsir~] mdadm --assemble --scan
mdadm: /dev/md0 has been started with 2 drives.
注: -S 和--stop相同,表示停止RAID。而-s和 --scan相同,表示掃描RAID。-A和--assemble表示啟用RAID;這些引數都比較簡單,查查man和help就知道了;
啟用RAID後,我們要透過檢視RAID的狀態來判斷RAID是否正常和健康……
3 RAID裝置的使用:RAID裝置分割槽、檔案系統初始化,掛載方法;
既然我們已經把RAID裝置做好了,我們就要使用這個裝置。RAID做好後,類似一個沒有格式化的新硬碟。如果我們拿到新硬碟時第一步是做什麼?對,是分割槽和格式化,安裝作業系統。RAID做好後,沒有檔案系統,一樣是沒辦法用的,所以我們做好RAID後,要來建立檔案系統;RAID只不過是把幾個硬碟或分割槽繫結在一起成為一個大的虛擬物理儲存裝置。如果我們要對這個大的虛擬裝置進行使用,就要在這個裝置上建立檔案系統才行。Linux 目前可用的檔案系統有reiserfs、xfs、ext3,我推薦reiserfs和xfs,感覺這個比較安全點。雖然現在有超強的zfs,但我認為還是處於小白鼠階段。對於重量級應用來說,我們還是觀察一段時間再說。
RAID做好後,我們要為它進行檔案系統初始化,當初始化完成後,我們就可以掛載使用了。在一般情況下,我們可以把做好的RAID掛載到/home,我們可以把所有的儲存性檔案。
在Linux中,建立檔案系統的工具有 mkfs.xfs(建立xfs檔案系統), mkfs.jfs(建立JFS檔案系統), mkfs.reiserfs (建立reiserfs檔案系統), mkfs.ext3 (建立ext3檔案系統)…… 。我們推薦的是reiserfs和xfs,不推薦ext2或ext3,為什麼不推薦?因為實踐是檢驗真理的唯一標準,效能不如人、安全性不如人,怎麼用?我不是ext檔案系統的專家,我只用最方便,維護起來比較容易的檔案系統。
RAID也可以分割槽來使用,但以我看來,大可不必,凡是能用到RAID的,大多是伺服器領域。我們可以把RAID做成後,掛載到/home目錄上。有關資料儲存的都放在RAID上。作業系統並不安裝在RAID上,當作業系統發生故障的時候,我們僅僅是修復或重灌作業系統,對資料儲存的RAID沒有任何影響。就是重灌作業系統,我們也能在幾分鐘之內恢復RAID。
如果您想把RAID再進進行分割槽使用,可以用fdisk 、parted或cfdisk 來進行分割槽工作,也可以嘗試LVM的來對分割槽進行管理,LVM能自動調整分割槽的大小。當然,我不會推薦RAID+LVM,或對RAID進行分割槽操作。
RAID做好後,我們就像使用物理硬碟一樣使用它,比如根據前面的例子,把/dev/sdb和/dev/sdc兩個硬碟做成RAID0,其裝置為/dev/md0,我們就可以對/dev/md0進行和物理硬碟一樣的操作。如果我們不分割槽,只是進行建立檔案系統,那就比較簡單了。
比如我們在/dev/md0上建立reiserfs檔案系統,我們可以用mkfs.reiserfs命令來完成。
第一步:檢視/dev/md0裝置是否存在,以及它的容量;
[root@linuxsir:~]# fdisk -l /dev/md0
Disk /dev/md0: 159.9 GB, 159999852544 bytes
2 heads, 4 sectors/track, 39062464 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
注:我們可以看到/dev/md0裝置有 158.0GB的容量,不包含有效分割槽。如果您想要用分割槽操作,請用fdisk /dev/md0 、或cfdisk /dev/md0 或parted /dev/md0來操作;
第二步:建立檔案系統;
在這裡我們是計劃用 reiserfs 檔案系統;
[root@linuxsir:~]# mkfs.reiserfs /dev/md0
mkfs.reiserfs 3.6.19 (2003 )
A pair of credits:
Nikita Danilov wrote most of the core balancing code, plugin infrastructure,
and directory code. He steadily worked long hours, and is the reason so much of
the Reiser4 plugin infrastructure is well abstracted in its details. The carry
function, and the use of non-recursive balancing, are his idea.
Oleg Drokin was the debugger for V3 during most of the time that V4 was under
development, and was quite skilled and fast at it. He wrote the large write
optimization of V3.
Guessing about desired format.. Kernel 2.6.21.5-smp is running.
Format 3.6 with standard journal
Count of blocks on the device: 39062464
Number of blocks consumed by mkreiserfs formatting process: 9404
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 2b06b743-8a4e-4421-b857-68eb2176bc50
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/md0'!
Continue (y/n):y 注:在這裡輸入y ,就進行建立檔案系統了;
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/md0.
這樣檔案系統 reiserfs 就建立成功了。如果您想建立xfs檔案系統,就用mkfs.xfs /dev/md0 ,其它檔案系統也類似 ……
第三步:掛載檔案系統並使用;
[root@linuxsir:~]# mkdir /mnt/data
[root@linuxsir:~]# mount /dev/md0 /mnt/data
[root@linuxsir:~]# df -lh /dev/md0
檔案系統 容量 已用 可用 已用% 掛載點
/dev/md0 150G 33M 149G 1% /mnt/RAID0
注: 這樣就就/dev/md0 裝置掛載到/mnt/RAID0上了。可以看到裝置大小為150G。已使用33M,掛載點為/mnt/RAID0。我們可以向裝置裡儲存檔案;
其實根據Linux檔案系統的結構,以及最新Linux軟體方便易用的特點。我們完全可以把/home獨立出來。把RAID裝置掛載到/home目錄上。凡是涉及使用者或資料儲存的,都可以放在/home中,比如資料庫,網路伺服器有關資料儲存的,都指定到 /home中的資料夾中。所有的一切都是根據方便管理為前提。
如果您的RAID是在安裝系統後建立的,如果掛載到Linux現有目錄下,要先做好相應目錄的資料遷移到RAID裝置中,然後再把RAID掛載到Linux目錄中。比如你想把RAID掛載到/home目錄中,可以先建立一個臨時的目錄,把RAID掛到這個臨時的目錄上,接著再把/home目錄下的檔案都移到 RAID上,然後再把RAID解除安裝,再重新掛載到/home中,這樣/home的資料就完遷移了。
至於如何把作業系統安裝或移到RAID上,不同的Linux發行版有不同的方法。Fedora或Redhat在安裝的過程中,就為我們提供了在RAID1上安裝系統。其它的發行版是否支援,不太知道,Slackware是不支援。如果您想把系統移植到RAID1中,可能需要安裝好系統後,再進行移植。 感覺軟RAID1在一塊硬碟上做,沒太大的必要,如果要做RAID1,也要在兩個硬碟上(或兩個屬於不同硬碟的分割槽上來做)。
如何開機掛載RAID裝置,不同的發行版也有自己的方法,流程是先啟用RAID,然後才是掛載。
4 軟RAID的高階進階及維護;
RAID做好以後,並不是萬事大吉了,還要進行日常維護;比如某個硬碟(或分割槽)壞掉,我們可以在不停機的情況下換上。或者我們為RAID做一個冗餘的硬碟或分割槽,當RAID發生故障時,冗餘硬碟或分割槽自動推上工作,能實現零停機任務。
4.1 如何向已存在的RAID中,新增一塊硬碟或分割槽;
RAID有幾種模式,比如建立、管理。下面我們所說的就是RAID的管理模式Manage,也可以說是RAID的進階應用。管理模式的目的,僅僅是為了把有問題的RAID成員換掉,或者為了管理的需要把其中一個RAID成員由另一個來替換,也可能是為了安全需要,讓新增加的硬碟或分割槽當做RAID的備用(spare)成員;在管理模式中, RAID的真正成員個數並不改變。比如我們做RAID5是,用的是三個硬碟或分割槽。在增加RAID成員時,RAID5仍是三個成員,容量還是保持不變,如果三個RAID成員完全正常健康,新增加的成員,僅僅是備用(spare)成員。備用成員的用途就是當RAID的真正成員發生問題時,備用成員會馬上啟動,僅僅是起到安全的冗餘的作用;
我們要向一個既已存在RAID中,新增或移除一個硬碟或分割槽,我們要用到mdadm 工具的 -f 和-r 以及-a 引數;
mdadm /dev/mdX -f RAID成員
mdadm /dev/mdX -r RAID成員
mdadm /dev/mdX -a RAID成員
注:
-f 同 --fail 表示把一個裝置列為有問題的裝置,以便用-r或--remove引數移除;
-r 同 --remove 表示把RAID中的一個成員移出RAID;
-a 同 --add 表示向一個RAID中新增一個成員;
--re-add 重新把最近移除的RAID成員重新新增到RAID中;
值得一提的是,這些引數的運用,必須是在RAID正常執行的情況下進行。其中RAID裝置是/dev/mdX,X是一個大於0的整數,RAID成員是一個硬碟或分割槽。新增裝置並不會把RAID的容量擴大,僅僅是為了新增備用成員,比如在RAID1、RAID5和RAID10中特加有用。當一個RAID成員發生故障的時候,要用這種辦法來讓新成員頂替工作;
舉例:
[root@linuxsir:~]# mdadm /dev/md0 -f /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -r /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb5
注:當我們想把一個RAID的成員/dev/sdb3移除 RAID裝置/dev/md0時,要首先標註它為有問題的(也可能是完全正常的,為了管理需要)。然後 用-r引數移除,接著用-a 引數再新增一個裝置/dev/sdb5到RAID裝置/dev/md0中;
當我們用mdadm -D /dev/md0檢視RAID的狀態時,我們會看到RAID的詳細資訊。比如是否正常、RAID成員…… 下面是我們需要掌握的;
Raid Level : 注:陣列級別;比如Raid5
Array Size : 注:陣列容量大小;
Used Dev Size : 注:RAID單位成員容量大小,也就是構成RAID的成員硬碟或分割槽的容量的大小;
Raid Devices : 注:RAID成員的個數;
Total Devices : RAID中下屬成員的總計個數,因為還有冗餘硬碟或分割槽,也就是spare,為了RAID的正常運珩,隨時可以推上去加入RAID的;
State : clean, degraded, recovering 注:狀態,包括三個狀態,clean表示正常, degraded 表示有問題, recovering 表示正在恢復或構建;
Active Devices : 被啟用的RAID成員個數;
Working Devices : 注:正常的工作的RAID成員個數;
Failed Devices : 出問題的RAID成員;
Spare Devices : 備用RAID成員個數,當一個RAID的成員出問題時,用其它硬碟或分割槽來頂替時,RAID要進行構建,在沒構建完成時,這個成員也會被認為是spare裝置;
Rebuild Status : 注:RAID的構建進度,比如 38% complete ,表示構建到 38%;
UUID : 注:RAID的UUID值,在系統中是唯一的;
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:表示這個成員是啟用的;
1 8 18 1 active sync /dev/sdb2 注:表示這個成員是啟用的;
4 8 19 2 spare rebuilding /dev/sdb3 注:未被啟用,正在構建中的成頁,正在傳輸資料;
3 8 49 - spare /dev/sdd1
注:spare /dev/sdd1 表示/dev/sdd1是RAID的備用成員,當RAID的正式成員/dev/sdb1、/dev/sdb2或/dev/sdb3中有一個出問題的時候,這個備用成員會自動進行工作的。這個並不是必須的,可以用新增RAID成員的辦法來新增,也可以在建立的RAID的時候新增;
4.2 如何為一個現有RAID擴充容量;
在RAID的管理模式中,我們提到增加RAID成員的辦法,如果RAID所有真正成員都是健康的,這個成員就進入備用(spare)狀態。只有當真正成員有問題時,這個備用成員才啟用頂替出問題的成員來工作。
但我們能不能向RAID新增一個新成員,並且讓他成為RAID的真正成員,並且達到為RAID擴充容量呢?比如有一個RAID5,用的是3個20G 的分割槽做的,其總容量是(3-1)x20=40G,我們能否為這個RAID5新增加一個20G的分割槽,並且讓其成為這個RAID5真正的成員,並且達到擴充容量的目的,也就是說讓這個RAID5有四個真正的成員,其容量為(4-1)x20=60G。
在硬RAID中,這個工作比較容易,但在軟RAID中,是否能實現呢?答案是肯定的,這種情況僅針對已經做好的RAID,並且已經在儲存過程中發現RAID容易不足的情況下使用。如果是一個新做的RAID,我們發現計劃錯了,我們重新做一次就行了,沒必要用擴容的辦法。
我們為現有的RAID擴充容量,利用的就是RAID的Grow模式,中譯為RAID的增長模式;應用範圍是RAID1、RAID4、RAID5、RAID6。
RAID擴容流程:
向一個已經存在的RAID中新增一個成員->執行擴容指令
注: 在這裡我們要用到RAID的管理模式中的新增成員的辦法。也就是用到mdadm 中的-a 引數,請參考上一節的內容。這時新增的成員是備用(spare)成員,我們要把備用成員“推”到位置上。這時我們要用到mdadm的Grow模式;
舉例說明:
比如我們做的RAID5,由三個硬碟分割槽/dev/sdb1、/dev/sdc1、/dev/sdd1構成,這時的RAID5真正成員就是3個。當我們新增一個分割槽/dev/sdb2到這個RAID5時,新增加的這個sdb2就是這個RAID5R 的備用(spare)成員。比如已有的RAID5的裝置是/dev/md0;
· 首先,檢視RAID狀態;
[root@linuxsir:~]# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5 注:RAID級別;
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每個成員的容量是19534912
Raid Devices : 3 注:RAID真正成員是3個裝置構成;
Total Devices : 3 注: 總共裝置是3個;
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:02:33 2007
State : clean 注:狀態正常;
Active Devices : 3 注:啟用的裝置是3個;其實就是RAID真正成員正常啟用的個數;
Working Devices : 3 注:正常工作的裝置是3個;
Failed Devices : 0 注:有問題的裝置是0個;
Spare Devices : 0 注:備用裝置是0個;
Layout : left-symmetric
Chunk Size : 64K
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d 注:RAID的UUID;
Events : 0.16
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:RAID真正成員/dev/sdb1
1 8 33 1 active sync /dev/sdc1 注:RAID真正成員/dev/sdc1
2 8 49 2 active sync /dev/sdd1 注:RAID真正成員/dev/sdd1
· 其次,我們為這個RAID5新增一個成員;
把/dev/sdb2新增到RAID裝置/dev/md0,然後檢視RAID的狀態及詳細資訊;
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb2 注:新增分割槽/dev/sdb2到/dev/md0中;
mdadm: added /dev/sdb2
[root@linuxsir:~]# mdadm -D /dev/md0 注:檢視/dev/md0的詳細資訊;
/dev/md0:
Version : 00.90.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5 注:RAID級別;raid5
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每個成員的容量是19534912
Raid Devices : 3 注:RAID真正成員是3個裝置構成;
Total Devices : 4 注: 總共裝置是4個;
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:14:13 2007
State : clean 注:狀態正常;
Active Devices : 3 注:啟用的裝置是3個;其實就是RAID真正成員正常啟用的個數;
Working Devices : 4 注:正常工作的裝置是4個;
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
Events : 0.18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:RAID真正成員/dev/sdb1
1 8 33 1 active sync /dev/sdc1 注:RAID真正成員/dev/sdc1
2 8 49 2 active sync /dev/sdd1 注:RAID真正成員/dev/sdd1
3 8 18 - spare /dev/sdb2 注:注:RAID備用成員/dev/sdb2
新增/dev/sdb2到/dev/md0後,我們發現RAID的組成裝置總數由3個變成了4個,但真正成員個數並沒有變化,多出了一個備用成員/dev/sdb2。但/dev/md0的容量並沒有變大。 所以這時我們要為RAID來擴容,解決辦法就是讓/dev/sdb2成為RAID的真正成員,RAID的容易由 40G擴充套件到 60G;
· 第三,為RAID進行擴充容量;
在這裡我們要用到RAID的Grow模式,也就是增長模式。擴充模式,極為簡單,有--size引數,-n引數 --size是指大定RAID的大小,這個可以省略,具體由你所做的RAID級別而定。 -n 代表RAID真正成員的個數。在這個例子中,RAID5真正成員是3個,後來我們又新增了一個備用成員/dev/sdb2進去。我們所做的就是把這個備用成員“推”到真正成員的位置上。也就是說RAID的真正成員由3個變成4個。只是這一簡單的指令,就可以讓RAID5容量增加起來。
[root@linuxsir:~] # mdadm -G /dev/md0 -n4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.
然後我們檢視RAID的詳細資訊;
[root@linuxsir:~] # mdadm -D /dev/md0
/dev/md0:
Version : 00.91.03
Creation Time : Tue Aug 7 01:55:23 2007
Raid Level : raid5
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID的容量,我們發現RAID的容量並沒有增大,這是因為構建沒有完成;等構建完成時就會改變過來;
Used Dev Size : 19534912 (18.63 GiB 20.00 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Aug 7 02:36:06 2007
State : clean, recovering 注:正常,恢復中;
Active Devices : 4 注:RAID的正式成員已經變到4個;
Working Devices : 4
Failed Devices : 0
Spare Devices : 0 注:備用成員由1個,減少到0個;說明已經把RAID備用成員推到了RAID的正式成員中;
Layout : left-symmetric
Chunk Size : 64K
Reshape Status : 17% complete 注:RAID重新構建狀態,已經完成17%;目前並未完成構建;
Delta Devices : 1, (3->4) 注:RAID的正式成員增加一個,由3個到4個;
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
Events : 0.100
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 18 3 active sync /dev/sdb2 注:/dev/sdb2已經由spare改變到 active ,也就是說由備用
當執行完增容後,我們發現RAID的容量並沒有增大,這是因為構建沒有完成,等RAID完成構建後,RAID的容量就會改變為 19534912x(4-1)=58604736K=60G;構建進度也可以cat /proc/mdstat 來檢視。
新增加一個RAID正式成員的辦法,不會讓RAID原有的資料丟失,也不會破壞原有的資料。所以這種辦法對RAID已經儲存大量資料,當容量發生危機時而不損失原有資料的前提下,所採用的一種安全可行的擴容辦法; 當然擴容後,你要修改 /etc/mdadm.conf;
4.3 RAID正式成員個數達不到RAID啟動要求時,如何啟動RAID;
可能存在這樣一種狀況,當RAID的一個正式成員掛掉後,這時RAID按以前說的常規辦法是不能啟動的。這時我們要強制啟動,要用到--run 引數;比如當做RAID5時,我們用到了三個硬碟或分割槽,當其中有一個掛掉,按RAID5的特點來說,資料一樣是安全完整的,但RAID5啟動按常規辦法是必須要達到做RAID時所指定的正式成員個數,這時按常規啟動辦法是不行的,我們要用到--run引數;
我們舉個例子。比如RAID5正式成員有3個/dev/sdb1,/dev/sdb2,/dev/sdb3,我們只用/dev/sdb1和/dev/sdb2來啟動RAID5;
[root@linuxsir:~] # mdadm -A --run /dev/md0 /dev/sdb1 /dev/sdb2
5 軟RAID裝置使用方向的探討;
對於軟RAID是把幾個同容量的物理磁碟或分割槽組成一個大的虛擬裝置來用,我們應用方向是什麼呢?透過RAID的定義,我們可以知道RAID是為了解決容量、讀寫效率以及磁碟冗餘安全而提出來的。
5.1 僅僅是為了擴充儲存可用空間,是否必需做RAID;
如果是僅僅解決容量問題,我看大可不必用RAID。因為LVM比RAID更為靈活,無論怎麼做,都不會帶來容易上的損失。而只有RAID0和 LINEAR 級別才不會帶來容量上的損失,RAID1、RAID5和RAID10由於要有安全冗餘,所以RAID的容量必然減少;
LVM 技術能把所有空閒硬碟或分割槽結合在一起來使用,並不要求每個分割槽或硬碟大小容易是一致的,而RAID必須要求每個RAID成員容量大小相同,如果不相同,以最小的成員的容易計算,這個損失還不算,還要有安全冗餘帶來的容量損失,比如把兩塊80G的硬碟做成RAID1,這時的RAID1是一塊硬碟的容量。LVM做好後,也相當於一個空白的虛擬裝置,可以在上面劃成一個分割槽來使用,也可以劃分幾個,如果劃成幾個,我們還可以自動調整分割槽的大小。而RAID一但做好,如果再進行分割槽,分割槽的容量是沒辦法自由調整的;
有的弟兄會問,我是不是做好RAID,然後在RAID上再做LVM,也就是RAID+LVM模式。這種方案實現起來並不困難,但對於軟RAID來說,這種方案是否真的價值? 我們用RAID的目的無非是“容量+讀寫效率+安全”。我們有必要把做好的RAID再分割的四分五裂嗎? 我感覺沒必要,因為對於儲存裝置來說,每增強一項管理技術,就意味著風險,這種風險一是來自於管理員技術水平,二是來自於裝置老化。另外集中於不分割槽的儲存裝置,也能為資料遷移和系統管理帶來方便;
5.2 在同一個硬碟做RAID是否有必要;
在同一塊硬碟上做RAID是否有必要,如果您是想提高資料讀寫速度,還是有必要的。RAID0就能為你帶來這種高速儲存的快感。如果您想在同一塊硬碟上做軟RAID,想同時兼顧效率和安全,我看大可以免了。因為硬碟一壞掉,什麼重要的資料都會一鍋爛;
5.3 軟RAID的合理使用方向;
目前支援SATA主機板的機器只能技術最多四塊硬碟。比如四個80G的SATA硬碟,IDE硬碟也同理;我們要根據自己的使用方向來做RAID。下面我根據一個示例來說明RAID的合理使用方向;
第一個硬碟分割槽情況:
/dev/sda1 20G大小
/dev/sda2 20G大小
/dev/sda3 20G大小
-----/dev/sda5 swap 分割槽 -記憶體兩倍大小
-----/dev/sda6 用於/tmp 2G大小;
-----/dev/sda7
注:我們首先把作業系統安裝到第一個分割槽/dev/sda1 ,交換分割槽是/dev/sda5,/dev/sda6為臨時/tmp的目錄;那/dev/sda1和 sda2、sda3、sda7是用做什麼的呢?可以用來安裝系統。我們設計的是僅安裝系統,涉及資料儲存的,都放到RAID上。比如我把sda1和sda2安裝同樣的系統,把由第二三四塊硬碟做好的RAID掛在/home上,所有應用資料都存在RAID上。當sda1系統被破壞時,我們可以用最短的時間啟用sda2的系統,並在sda2上裝載由第二三四塊硬碟上做的RAID。
第二三四個硬碟,我們可以用來整塊硬碟來做RAID, 不必為每塊硬碟分割槽。比如為了讀寫效率,我們可以做成RAID0,為了安全,你可以做RAID5。 如果做RAID0裝置的容量是3x80G=240G,如果做RAID5,RAID5裝置的容量是(3-1)x80=160G。有的弟兄可能會說,為什麼我不能把磁碟進行分割槽,然後做RAID0呢?RAID10也就是RAID0+RAID1的組合,安全和效率都有。這種方案也是可以的,但您必須做到,當有一個硬碟壞掉時,不會影響資料的整體安全性。也就是說,當一個硬碟壞掉時,另外兩塊硬碟組合起來,仍能組成一份完整的資料。當RAID中的一塊硬碟壞掉時,我們能透過更換硬碟,簡單的修復,就能讓RAID正常執行起來,而且資料是完整的。如果您對資料安全極為重視的,在做軟RAID的過程中,能做到這點,這個RAID方案就屬於你。
所以在做軟RAID時,首先要明白自己的目的是什麼,然後再來根據目的判斷自己的所要達到的效果。如果是簡單追求的是讀寫效率,我們就不必考慮資料的安全性。如果是資料的安全性對我們來說極為重要,我們就要判斷,當一塊硬碟壞掉時,是否影響資料的完整性!比如,我們用兩塊硬碟來做RAID5或RAID10,可以這樣說,沒有一點安全性的。無論您怎麼分割槽和組合,也不會為您帶來一點安全感。
6 常見問題及處理;
涉及一些補充和增訂的內容,我們在這裡一一列出;
6.1 如何清除一個RAID成員的超級塊儲存存的RAID資訊;
RAID成員在 superblock中所儲存的RAID資訊是極為重要的,我們可以根據這個資訊輕鬆恢復RAID。
mdadm --zero-superblock RAID成員;
如果你確認RAID成員這個成員對你沒任何用處,你已經把這個成員移除RAID,並且您想把這個裝置另作他用。這時你可以清除其 superblock的資訊。比如;
[root@linuxsir:~] # mdadm --zero-superblock /dev/sdd3
這個示例就是清除/dev/sdd3中的超級塊中所儲存的RAID資訊;
7 關於本文;
其實軟RAID使用起來比較簡單,難點在於後期的管理和維護。軟RAID的使用教程,其實用幾個命令足以能說的清楚。但一想到初學Linux的弟兄也可能象我當初學習Linux一樣,總想找一個Step By Step的教程看著實現自己想要做的東西,基於這個大多數初學者的想法,我就寫了這麼一個看起來相對複雜的文章。
這篇文章看起來條理不夠清晰,另外mdadm的模式也沒有給大家說,而是把模式分拆開來放在具體的應用中。
我僅僅是用自己從新手理解的角度來寫這篇文章,文中大量存在不規範的用語,這也是在情理之中的。最主要的是有些專業束語我不知道如何翻譯才好。
歡迎弟兄們指正,還是那句話“看北南寫的文件,要一分為二,看著批,批著看!”
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2135851/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下軟raid的實現LinuxAI
- Linux下軟體RAID的實現 (轉)LinuxAI
- linux下用mdadm命令實現軟raid(zt)LinuxAI
- Linux的軟RAIDLinuxAI
- Linux 中軟體 RAID 的使用LinuxAI
- Linux中的LVM和軟RAIDLinuxLVMAI
- linux軟RAID配置、測試、刪除LinuxAI
- linux軟RAID的建立和維護LinuxAI
- 在Linux中,如何配置軟體RAID?LinuxAI
- 在Windows NT/2000下實現"軟"RAID的方法(轉)WindowsAI
- linux的軟RAID和LVM測試LinuxAILVM
- Linux系統中資料盤建立軟RaidLinuxAI
- linux raid 0 raid 1 raid 10LinuxAI
- Linux常用命令用法及實現方式Linux
- 軟raid的建立AI
- Rhel5 軟raid5的實驗AI
- mdadm linux 做軟磁碟陣列 raid0Linux陣列AI
- 如何使用linux程式mdadm建立軟體RAID1軟陣列LinuxAI陣列
- 常用的Linux命令;Linux常用命令用法及實現方式Linux
- Linux下實現Web資料同步的四種方式LinuxWeb
- 實現Web方式軟交換配置管理系統的研究(轉)Web
- 淺析Linux的軟中斷的實現Linux
- Mac與Linux實現多種方式安裝Redis服務MacLinuxRedis
- Linux 軟體安裝的三種方式Linux
- 繼承的實現方式繼承
- InnoDB行鎖實現方式
- iOS熱更新實現方式iOS
- 在 Linux 下配置 RAIDLinuxAI
- Linux RAID卡優化LinuxAI優化
- Linux Software RAID step by stepLinuxAI
- Linux centOS軟體安裝的三種方式LinuxCentOS
- Linux 下的三大軟體安裝方式Linux
- Java中Elasticsearch 實現分頁方式(三種方式)JavaElasticsearch
- Spring實現IOC容器的兩種實現方式Spring
- 九種方式實現跨域跨域
- java執行緒實現方式Java執行緒
- Android熱更新實現方式Android
- 記住我的實現方式