1. 程式人生 > >linux raid基本知識要點

linux raid基本知識要點

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-1x單個硬碟(分割槽)容量,比如我們用三塊80G硬碟做成RAID5,容量就是兩塊容量的和160G。在寫入上,資料被分拆成若干份,分別向RAID5的每個成員下寫入。比如把linuxsir.tar.bz2寫入RAID5時,要先把linuxsir.tar.bz2分拆成若干份,分別寫入RAID5成員中。因為涉及到冗餘,所以資料在讀入速度上並不是很快,沒辦法和RAID0相比,但RAID5的寫入資料速度沒有RAID1RAID0快,也沒有不做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的冗餘安全。但經過我在軟RAID0RAID1RAID5RAID10測試過程中發現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的級別、成員、RAIDUUID等……這種方法把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表示,YRAID的級別。RAID的級別有RAID0就用0表示,RAID1就用1表示,RAID5就用RAID5表示,RAID10就用10表示。RAID的級別是根據自己的使用方向和現有磁碟和分割槽個數來定位。如果你就想高速讀寫、大容量,對資料安全性要求不高,那就用RAID0,如果對資料要求較高,可以用RAID1RAID5,再者就是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;值得注意的是RAID0RAID1至少需要兩個設定,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/sdbRAID0裝置的一個成員,/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