RAID詳解

測試機centos6.7 x86_64

一、RAID是什麼

    簡單描述:RAID(Redundant Array of indenpensive Disk)獨立磁盤冗餘陣列:磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它將數據以分段或條帶(striping)的方式儲存在不同的磁盤中,存取數據時,陣列中的相關磁盤一起動作,大幅減低數據的存取時間,同時有更佳的空間利用率。磁盤陣列利用不同的技術,稱爲RAID level,不同的level針對不同的系統及應用,以解決數據安全的問題。簡單來說,RAID把多個磁盤組成一個邏輯扇區,因此,操作系統只會把他當作一個硬盤。


二、RAID優缺點

    優點:

    1、提高傳輸速率。RAID通過多個磁盤上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput)。在RAID中,可以讓很多磁盤驅動器同時傳輸數據,而這些磁盤驅動器在邏輯上又是一個磁盤驅動器,所以使用RAID可以單個磁盤驅動器的幾倍、幾十倍甚至上百倍的速率。這也是RAID最初想要解決的問題。因爲當時CPU的速度增長很快,而磁盤驅動器的數據傳輸速率無法大幅提高,所以需要有一種方案解決兩者之間的矛盾。RAID最後成功了。

    2、通過數據校驗提供容錯功能。普通磁盤驅動器無法提供容錯功能,如果不包括寫在磁盤上的CRC(循環冗餘校驗)碼的話。RAID容錯是建立在每個磁盤驅動器的硬件容錯功能之上的,所以它提供更高的安全性。在很多RAID中都有較爲完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗餘性。

    缺點:

    1、做不同的RAID,有RAID模式磁盤利用率低,價格昂貴。

    2、RAID0沒有冗餘功能,如果有一個磁盤(物理)損壞,則所有的數據都無法使用。

    3、RAID1磁盤利用率只有50%,是所有RAID級別中最低的。

    4、RAID5可以理解爲是RAID0和RAID1的折中方案。RAID5可以爲系統提供數據安全保障,但保障程度要比RAID1低而磁盤空間利用率要比RAID1高。


三、RAID樣式

    外接式磁盤陣列櫃:最常被使用大型服務器上,具有熱抽換(Hot Swap)的特性,不過價格都很貴。

    內接式磁盤陣列卡:因爲價格便宜,但需要較高的安裝技術,適合技術人員操作。

    利用軟件來仿真:由於會拖累機器的速度,不適合×××量的服務器。


四、RAID分類

    1、RAID 0 被稱爲條帶盤 --- 需要2塊以上的磁盤,成本低,可以提高整個磁盤的性能和吞吐量。我們通過名字來想象:RAID 0 通過把文件切割之後把數據像一條帶子一樣平鋪在每個磁盤之上。由於文件的數據分佈在每個磁盤上,所以其中一個磁盤出現問題的時候,文件就會由於缺失了某部分而損壞。並且RAID 0 不提供冗餘所以不需要額外使用空間來存儲校驗碼,所以磁盤空間都可以用作存儲文件。並且磁盤的實際容量體現爲木桶理論(最小的水平決定整體的水平)。假如有4個磁盤,分別爲320G,500G,1T,2T。則實際容量爲(最小容量的磁盤乘以硬盤數量),即320G*4。讀寫性能由於磁頭數電費增加,所以讀寫的時候磁頭之間可以實現分工合作。所以讀寫性能提升。

wKiom1avCZrh_bCvAADuZWlHN1k362.jpg



    2、RAID 1 磁盤鏡像盤 --- 數據在寫入一塊磁盤的同時,會在另外一塊閒置的磁盤上生成鏡像文件mirroring(鏡像卷),至少需要兩塊磁盤,RAID大小等於兩個RAID分區中最小的容量(最好兩個磁盤的容量一樣),可增加熱備盤提供一定的備份能力;數據有冗餘,在存儲時同時寫入兩塊磁盤,實現了數據備份;但相對降低了寫入性能,但是讀取數據時可以併發,幾乎類似於raid-0的讀取效率;

wKiom1avCcfSuLDTAAA7OqpYmXE693.png

    3、RAID 3 奇偶校驗碼的並行傳送 --- 只能查錯不能糾錯;

wKiom1avCdbxPhGCAABcCa0NJkA850.png

    4、RAID 4 帶奇偶校驗碼的獨立磁盤結構 --- 對數據的訪問是按數據塊進行的,也就是按磁盤進行的,RAID 3 是一次一橫條,而RAID 4 一次一豎條;

wKioL1avCi2xjw-MAACcTrSqndU846.jpg

    5、RAID 5 分佈式奇偶校驗的獨立磁盤結構:需要至少三塊或以上磁盤,可以提供熱備盤實現故障的恢復;採用奇偶校驗,可靠性強,且只有同時損壞兩塊磁盤時數據纔會完全損壞,至損壞一塊硬盤時,系統會根據存儲的奇偶校驗位重建數據,臨時提供服務;此時如果有熱備盤,系統還會自動在熱備盤上重建故障磁盤上的數據;

wKioL1avCjiyEt45AABcVmwTJ-w767.png

    6、RAID 6 帶有兩種分佈式存儲的奇偶校驗碼的獨立磁盤結構,在RAID 5 的基礎上進行改進,通過加入增加校驗塊,而有更好的容錯能力。由於整體的磁盤數量增加,所以讀取速率提升;但是由於寫入數據時不僅要寫入文件數據,還要計算並寫入兩個校驗塊,所以寫入速率性能下降;並且由於增加了一位校驗塊,RAID控制器要求更加複雜,所以在數據安全和磁盤性能中進行取捨,RAID 5 更受歡迎。實際的磁盤空間爲:最小的磁盤容量*(磁盤數量-2)

wKiom1avCfWC8Qw0AAGdEtbVh84273.jpg

    7、RAID 7 優化的高速數據傳送磁盤結構 -- 高速緩衝存儲器:這是一種新的RAID標準,其本身帶有智能化實時操作系統和用於存儲管理的軟件工具,可完全獨立於主機運行,不佔用主機CPU資源,RAID 7 可以看作是一種存儲計算機(Strage Computer),它與其他RAID標準有明顯區別。

    8、RAID 1+0 高可靠性於高效磁盤結構

wKioL1avClCjEvgVAABUhb5CbD4330.png

    9、RAID 0+1 高效率與高性能磁盤結構、

wKioL1avClyBiiWHAABLjiuXfbE114.png

RAID 1+0 與 RAID 0+1 的區別:RAID 1+0 是先鏡像在分區數據,再將所有硬盤分爲兩組,視爲RAID 0 的最低組合,然後將這兩組各自視爲RAID 1 運作。RAID 0+1 則是跟RAID 1+0 的程序相反,是先分區再將數據鏡射到兩組磁盤。它將所有磁盤分爲兩組,變成RAID 1 的最低組合,而將兩組磁盤各自視爲RAID 0 運作。性能上,RAID 0+1比RAID 1+0 有着更快的讀寫速度。可靠性上,當RAID 1+0 有一個磁盤受損,其餘三個硬盤會繼續運作。RAID 0+1 只要有一個硬盤受損,同組RAID 0的另一隻磁盤亦會停止運作,只剩下兩個硬盤運作,可靠性較低。因此,RAID 10 遠較RAID 01常用,零售主板絕大部分支持RAID 0/1/5/10,但不支持RAID 01。


五、常見RAID總結

    RAID Level性能提升冗餘能力空間利用率磁盤數量(塊)

    RAID 0讀、寫提升100%至少2

    RAID 1讀性能提升,寫性能下降50%至少2

    RAID 5讀、寫提升(n-1)/n%至少3

    RAID 1+0讀、寫提升50%至少4

    RAID 0+1讀、寫提升50%至少4

    RAID 5+0讀、寫提升(n-2)/n%至少6


六、mdadm工具介紹

    簡介:mdadm (multiple devices admin)是linux下標準的軟raid管理工具,是一個模式化工具(在不同的模式下);程序工作再內存用戶程序區,爲用戶提供RAID接口來操作內核的模塊,實現各種功能。

###查看:
[root@mail ~]# uname -r
2.6.32-573.el6.x86_64
[root@mail ~]# lsb_release -a
LSB Version::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-
amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID:CentOS
Description:CentOS release 6.7 (Final)
Release:6.7
Codename:Final
[root@mail ~]# rpm -qa mdadm
mdadm-3.3.2-5.el6.x86_64
###mdadm命令基本語法
mdadm [mode] <raiddevice> [options] <component-devices>
目前支持的模式
LINEAR(線性模式)、RAID0(striping條帶模式)、RAID1(mirroring)、 RAID-4、RAID-5、 RAID-6、 R
AID-10、 MULTIPATH和FAULTY
LINEAR:線性模式,該模式不是raid的標準模式,其主要作用是可以實現將幾塊小的硬盤組合爲一塊大
硬盤來使用,數組存儲時一次存滿一個硬盤在使用下一個硬盤,對上層來說操作的是一個大硬盤。
主要模式(7種)
Assemble:裝配模式:加入一個以前定義的陣列,可以正在使用陣列或從其他主機移出的陣列
Build:  創建:創建一個沒有超級塊的陣列
Create: 創建一個新的陣列,每個設備具有超級塊
Follow or Monitor: 監控RAID的狀態,一般只對RAID-1/4/5/6/10等有冗餘功能的模式來使用
Grow:(Grow or shrink) 改變RAID的容量或陣列中的設備數目;收縮一般指的是數據收縮或重建
Manage: 管理陣列(如添加spare盤和刪除故障盤)
Incremental Assembly:添加一個設備到一個適當的陣列
Misc:  允許單獨對陣列中的某個設備進行操作(如抹去superblocks 或停止陣列)
Auto-detect: 此模式不作用於特定的設備或陣列,而是要求在Linux內核啓動任何自動檢測到的陣列
#主要選項:(Options for selecting a mode)
-A, --assemble:加入並開啓一個以前定義的陣列
-B, --build:創建一個沒有超級塊的陣列(Build a legacy array without superblocks)
-C, --create:創建一個新的陣列
-F, --follow,--monitor:選擇監控(Monitor)模式
-G, --grow:改變激活陣列的大小或形態
-I, --incremental:添加一個單獨的設備到合適的陣列,並可能啓動陣列
--auto-detect:請求內核啓動任何自動檢測到的陣列
#創建模式
-C --create:創建一個新的陣列
        專用選項:
            -l:級別
            -n #:設備個數
            -a {yes|no}:是否自動爲其創建設備文件
            -c:CHUNK大小,2^n,默認爲64K
            -x #:指定空閒盤個數
            
#管理模式
-a --add:添加列出的設備到一個工作的陣列中;當陣列出於降級狀態(故障狀態),你添加一個設
備,該設備將作爲備用設備並且再該備用設備上開始數據重建
-f --fail:將列出的設備標記爲faulty狀態,標記後就可以移除設備:(可以作爲故障恢復的測試手
段)
-r --remove:從陣列中移除列出的設備,並且該設備不能出於活動狀態(是冗餘盤或故障盤)
#監控模式
-F --follow,--monitor:選擇監控(Monitor)模式
-m --mail:設置一個mail地址,在報警時給該mail發信;該地址可寫入conf文件,在啓動陣列時生效
-p --program,--alert:當檢測到一個事件時運行一個指定的程序
-y --syslog:設置所有的事件記錄於syslog中
-t --test:給啓動時發現的每個陣列生成test警告信息;該信息傳遞給mail或報警程序;(以此來測
試報警信息是否能正確接收)
#增長模式
-G --grow:改變激活陣列的大小或形態
-n --raid-devices=:指定陣列中活動的device數目,不包括spare磁盤,這個數目只能由--grow修改
-x --spare-devices=:指定初始陣列的冗餘device數目即spare device數目
-c --chunk:Specify chunk size of kibibytes.缺省爲64.chunk-size是一個重要的參數,決定了一
次向陣列中每個磁盤寫入數據的量
(Chunk :,可以理解爲raid分儲數據時每個數據段的大小(通常爲32/64/128等這類數字大小);合理
的選擇chunk大小非常重要,若chunk過大可能一塊磁盤上的帶區空間就可以滿足大部分的I/O操作,使
得數據的讀寫只侷限於一塊硬盤上,這便不能充分發揮RAID併發的優勢;如果chunk設置過小,任何很
小的I/O指令都 可能引發大量的讀寫操作,不能良好發揮併發性能,佔用過多的控制器總線帶寬,也
影響了陣列的整體性能。所以,在創建帶區時,我們應該根據實際應用的需要,合理的選擇帶區大小
。)
-z --size=:組建RAID1/4/5/6後從每個device獲取的空間總數;但是大小必須爲chunk的倍數,還需
要在每個設備最後給RAID的superblock留至少128KB的大小。
--rounding=: Specify rounding factor for linear array (==chunk size)
-l --level=: 設定 raid level.raid的幾倍
--create:   可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 
6, multipath, mp.
--build:   可用:linear, raid0, 0, stripe.
-p --layout=:設定raid5 和raid10的奇偶校驗規則;並且控制故障的故障模式;其中RAID-5的奇偶
校驗可以在設置爲::eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la,
 ra, ls, rs.缺省爲left-symmetric
--parity:   類似於--layout=
--assume-clean:目前僅用於 --build 選項
-R --run:  陣列中的某一部分出現在其他陣列或文件系統中時,mdadm會確認該陣列。此選項將不作
確認。
-f --force: 通常mdadm不允許只用一個device 創建陣列,而且此時創建raid5時會使用一個device作
爲missing drive。此選項正相反
-N --name=: 設定陣列的名稱
#裝配模式
-A, --assemble: 加入並開啓一個以前定義的陣列
#MISC模式選項
-Q, --query: 查看一個device,判斷它爲一個 md device 或是 一個 md 陣列的一部分
-D, --detail: 打印一個或多個md device 的詳細信息
-E, --examine:打印 device 上的 md superblock 的內容
#查看RAID陣列的詳細信息
mdadm -D /dev/md#
          --detail   停止陣列
          
#停止RAID陣列
mdadm -S /dev/md#
          --stop
          
#開啓RAID陣列
mdadm -A /dev/md#
          --start
          
#其他選項
-c, --config=: 指定配置文件,缺省爲 /etc/mdadm.conf
-s, --scan:  掃描配置文件或 /proc/mdstat以搜尋丟失的信息。默認配置文件:/etc/mdadm.conf
-h, --help:  幫助信息,用在以上選項後,則顯示該選項信息
-v, --verbose: 顯示細節,一般只能跟 --detile 或 --examine一起使用,顯示中級的信息
-b, --brief:  較少的細節。用於 --detail 和 --examine 選項
--help-options: 顯示更詳細的幫助
-V, --version: 版本信息
-q,--quit:   安靜模式;加上該選項能使mdadm不顯示純消息性的信息,除非那是一個重要的報告


七、創建RAID

1、直接使用硬盤硬件設備,不需要分區。
    創建一個RAID 0設備:
    mdadm --create  /dev/md0 --level=0 --chunk=32 --raid-devices=3 /dev/sd[b-d]
    創建一個RAID 1設備:
    mdadm -C /dev/md0 -l1 -c128 -n2 -x1 /dev/sd[b-d]
    創建一個RAID 5設備:
    mdadm -C /dev/md0 -l5 -n5 /dev/sd[c-g] -x1 /dev/sdb
    創建一個RAID 6設備:
    mdadm -C /dev/md0 -l6 -n5 /dev/sd[c-g] -x2 /dev/sdb /dev/sdh
    創建一個RAID 10設備:
    mdadm -C /dev/md0 -l10 -n6 /dev/sd[b-g] -x /dev/sdh
    創建一個RAID1+0設備(雙層架構):
    mdadm -C /dev/md0 -l1 -n2 /dev/sdb /dev/sdc
    mdadm -C /dev/md1 -l1 -n2 /dev/sdd /dev/sde
    mdadm -C /dev/md2 -l1 -n2 /dev/sdf /dev/sdg
    mdadm -C /dev/md3 -l0 -n3 /dev/md0 /dev/md1 /dev/md2
    
2、如果要具體使用那個硬盤的分區來做RAID,才需要fdisk特定的分區,並給他指定分區類型:fd
具體過程如下:
1)、分區
# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (1632-26108, default 1632): 
Using default value 1632
Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): 
Using default value 26108
Command (m for help): n
First cylinder (1632-26108, default 1632): 
Using default value 1632
Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): +5G
Command (m for help): n
First cylinder (2286-26108, default 2286): 
Using default value 2286
Last cylinder, +cylinders or +size{K,M,G} (2286-26108, default 26108): +5G
Command (m for help): n
First cylinder (2940-26108, default 2940): 
Using default value 2940
Last cylinder, +cylinders or +size{K,M,G} (2940-26108, default 26108): +5G
Command (m for help): n
First cylinder (3594-26108, default 3594): 
Using default value 3594
Last cylinder, +cylinders or +size{K,M,G} (3594-26108, default 26108): +5G
Command (m for help): t
Partition number (1-7): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 7
Hex code (type L to list codes): fd
Changed system type of partition 7 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-8): 8
Hex code (type L to list codes): fd
Changed system type of partition 8 to fd (Linux raid autodetect)
##這裏只是舉個例子,其它類似!特別說明:再fdisk分區後需要將分區標誌改爲Linux raid auto
類型。
# fdisk -l| grep sd   (最終效果)
Disk /dev/sda: 214.7 GB, 214748364800 bytes
/dev/sda1   *           1         103      819200   83  Linux
/dev/sda2             103        1377    10240000   83  Linux
/dev/sda3            1377        1632     2048000   82  Linux swap / Solaris
/dev/sda4            1632       26108   196604286    5  Extended
/dev/sda5            1632        2285     5246007   fd  Linux raid autodetect
/dev/sda6            2286        2939     5253223+  fd  Linux raid autodetect
/dev/sda7            2940        3593     5253223+  fd  Linux raid autodetect
/dev/sda8            3594        4247     5253223+  fd  Linux raid autodetect
# kpartx -af /dev/sda
# partx -a /dev/sda
2)、建立磁盤陣列
[root@mail soft]# mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sda{5,6,7}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
#-C:創建一個陣列,後跟陣列名稱
#-a:表示自動創建
#-l:指定陣列級別
#-n:指定陣列中活動devices的數目
3)、查看RAID5陣列
#watch cat /proc/mdstat   ##查看磁盤同步情況
# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sda7[3] sda6[1] sda5[0]    #第一行
      10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] #第二行
      
unused devices: <none>
#第一行是MD設備名稱md0,active和inactive選項表示陣列是否能讀/寫,接着是陣列的RAID級別RAID
5,後面是屬於陣列的塊設備,方括號[]裏的數字表示設備再陣列中的序號,(S)表示其是熱備盤,(F)
表示這個磁盤是faulty狀態。
#第二行是陣列的大小,用塊數來表示;後面有chunk-size的大小,然後是layout類型,不同RAID級別
的layout類型不同,[3/3] [UUU]表示陣列有3個磁盤並且3個磁盤都是正常運行的,若是[2/3]和[UU]
表示陣列有3個磁盤中2個是正常運行的,下劃線對應的那個位置的磁盤是faulty(錯誤)狀態的。
4)、查看RAID 5的詳細信息
# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 14:01:52 2016
          State : clean 
 Active Devices : 3       #活動的設備
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 512K  #數據塊大小
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 18
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
       
5)、格式化
# mke2fs -t ext4 -b 4096 -L myraid5 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=myraid5
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
655360 inodes, 2620928 blocks
131046 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#-t:指定文件系統類型
#-b:表示塊大小有三種類型分別爲 1024/2048/4096
6)、掛載並查看
# mkdir /myraid5
# mount /dev/md0 /myraid5
# cd /myraid5
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       9.5G  6.6G  2.5G  73% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sda1       772M   39M  693M   6% /boot
/dev/md0        9.8G   23M  9.2G   1% /myraid5吧   #新分區
7)、開機自動掛載
#
# /etc/fstab
# Created by anaconda on Sat Dec  5 05:19:21 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=67de25d3-6b6c-469e-b25f-63f6640a162e /                       ext4    defaults        1 1
UUID=c984f67e-5ac8-4278-9b8a-fd3541df0599 /boot                   ext4    defaults        1 2
UUID=4fa33c13-d828-42ac-80ed-66577ae37ca8 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/md0                /myraid5                ext4    defaults        0 0
# mount -a
# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/md0 on /myraid5 type ext4 (rw)    #已經掛載上了
8)、生成mdadm的配置文件
/etc/mdadm.conf作爲默認的配置文件,主要作用是爲了方便的跟蹤軟RAID的配置,尤其是可以配置監
控和事件上報選項。Assemble命令也可以使用--config(或者其縮寫)來指定配置文件。我們通常可以
如下命令來建立配置文件。
#  echo DEVICE /dev/sd[b-h] /dev/sd[i-k]1 > /etc/mdadm.conf
#  mdadm -Ds >>/etc/mdadm.conf
#  cat /etc/mdadm.conf
DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
             /dev/sdi1 /dev/sdj1 /dev/sdk1
ARRAY /dev/md1 level=raid0 num-devices=3
 UUID=dcff6ec9:53c4c668:58b81af9:ef71989d
ARRAY /dev/md0 level=raid10 num-devices=6 spares=1
 UUID=0cabc5e5:842d4baa:e3f6261b:a17a477a
#使用配置文件啓動陣列時,mdadm會查詢配置文件中的設備和陣列內容,然後啓動運行所有能運行RAI
D陣列。如果指定陣列的設備名字,則只啓動對應的陣列。


八、RAID的管理

1、給raid-5新增一個space(空)盤,添加磁盤到陣列中做備用盤(space)
# mdadm -a /dev/md0 /dev/sda8
mdadm: added /dev/sda8
[root@mail myraid5]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sda8[4](S) sda7[3] sda6[1] sda5[0]
      10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 14:48:10 2016
          State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 19
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
       4       8        8        -      spare   /dev/sda8   #備用盤
2、模擬硬盤故障
# mdadm -f /dev/md0 /dev/sda5
mdadm: set /dev/sda5 faulty in /dev/md0
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sda8[4] sda7[3] sda6[1] sda5[0](F)
      10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [>....................]  recovery =  3.5% (185844/5241856) finish=4.0min speed=2064
      9K/sec
      ##正在同步
unused devices: <none>
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 14:52:34 2016
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
 Rebuild Status : 19% complete  #同步到19%
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 24
    Number   Major   Minor   RaidDevice State
       4       8        8        0      spare rebuilding   /dev/sda8 #重建RAID 5
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
       0       8        5        -      faulty   /dev/sda5
       
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 14:55:55 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 512K
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 38
    Number   Major   Minor   RaidDevice State
       4       8        8        0      active sync   /dev/sda8   #已經同步完成
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
       0       8        5        -      faulty   /dev/sda5    #故障盤
    
3、熱移除故障的硬盤
# mdadm -r /dev/md0 /dev/sda5
mdadm: hot removed /dev/sda5 from /dev/md0   #移除sda5
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 14:57:33 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 512K
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 39
    Number   Major   Minor   RaidDevice State
       4       8        8        0      active sync   /dev/sda8
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
       
4、停止RAID
# mdadm -S /dev/md0   #停止RAID
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesys
tem or active volume group?
#上面的錯誤告訴我們磁盤陣列正在使用中不能停止,我們得先寫在RAID再停止
# umount /dev/md0
umount: /myraid5: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))  #在/myraid5文件目錄中,所以也不行
# cd
# umount /dev/md0   #卸載md0
# mdadm -S /dev/md0 #停止RAID
mdadm: stopped /dev/md0 #停止完成
# mount  #可以看到md0已經不在
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
5、開啓RAID並掛載
# mdadm -A /dev/md0 /dev/sda[6-8]  #開啓RAID
mdadm: /dev/md0 has been started with 3 drives.
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Feb  1 13:58:13 2016
     Raid Level : raid5
     Array Size : 10483712 (10.00 GiB 10.74 GB)
  Used Dev Size : 5241856 (5.00 GiB 5.37 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Mon Feb  1 15:00:03 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 512K
           Name : mail.bjwf.com:0  (local to host mail.bjwf.com)
           UUID : bec67e95:105bc368:092dafe4:d0ad43bc
         Events : 39
    Number   Major   Minor   RaidDevice State
       4       8        8        0      active sync   /dev/sda8
       1       8        6        1      active sync   /dev/sda6
       3       8        7        2      active sync   /dev/sda7
 
# cat /proc/mdstat #查看RAID
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sda8[4] sda7[3] sda6[1]
      10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>
# mount /dev/md0 /myraid5/   #掛載
# ls /myraid5/  #查看
lost+found
6、刪除RAID
# umount /dev/md0  #卸載md0
# mount | grep myraid5  #查看卸載成功與否
# mdadm -Ss /dev/md0    #停止raid
mdadm: stopped /dev/md0
# mdadm --zero-superblock /dev/sda[5-8]
# --zero-superblock 加上該選項時,會判斷如果該陣列是否包含一個有效的陣列超級塊,若有則將
該超級塊中陣列信息抹除
# rm -rf /etc/mdadm.conf  #刪除RAID配置文件


九、RAID優化

設定良好的stripe值,可以再後期使用時,減少寫入數據時對數據塊計算的負擔,從而提高RAID性能;

# mk2fs -j -b 4096 -E stripe=16 /dev/md0 # 設置時,需要用-E選項進行擴展


十、RAID監控

配置每300秒mdadm監控進程查詢MD設備一次,當陣列出現錯誤,會發送郵件給指定的用戶,執行事件處理程序並且記錄上報的事件到系統的日誌文件。使用--daemonise參數,使程序持續再後臺運行。如果要發送郵件需要postfix程序運行,當郵件地址被配置爲外網地址應先測試是否能發送出去。

# mdadm --monitor --mail=root@localhost --program=/root/md.sh  --syslog --delay=300 /dev/
md0 --daemonise 
3305
# mdadm -f /dev/md0 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
# mdadm -f /dev/md0 /dev/sd
sda   sda1  sda2  sda3  sda4  sda5  sdb   sdc   sdd   sde   sdf   sdg   sdh   sdi
# mdadm -f /dev/md0 /dev/sdb  
mdadm: set /dev/sdb faulty in /dev/md0 
# mdadm -D /dev/md0  
/dev/md0: 
        Version : 0.90 
  Creation Time : Thu Jun 27 21:54:21 2013 
     Raid Level : raid5 
     Array Size : 41942912 (40.00 GiB 42.95 GB) 
  Used Dev Size : 20971456 (20.00 GiB 21.47 GB) 
   Raid Devices : 3 
  Total Devices : 4 
Preferred Minor : 0 
    Persistence : Superblock is persistent
    Update Time : Thu Jun 27 22:03:48 2013
          State : clean, degraded, recovering 
 Active Devices : 2 
Working Devices : 3 
 Failed Devices : 1 
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 64K
 Rebuild Status : 27% complete
           UUID : c7b98767:dbe2c944:442069fc:23ae34d9
         Events : 0.4
    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde 
       1       8       32        1      active sync   /dev/sdc 
       2       8       48        2      active sync   /dev/sdd
       4       8       16        -      faulty spare   /dev/sdb
# tail –f /var/log/messages
Jun 27 22:03:48 localhost kernel:  --- rd:3 wd:2 fd:1 
Jun 27 22:03:48 localhost kernel:  disk 0, o:1, dev:sde 
Jun 27 22:03:48 localhost kernel:  disk 1, o:1, dev:sdc 
Jun 27 22:03:48 localhost kernel:  disk 2, o:1, dev:sdd 
Jun 27 22:03:48 localhost kernel: md: syncing RAID array md0 
Jun 27 22:03:48 localhost kernel: md: minimum _guaranteed_ reconstruction speed: 1000 KB/
sec/disc. 
Jun 27 22:03:48 localhost kernel: md: using maximum available idle IO bandwidth (but not 
more than 200000 KB/sec) for reconstruction. 
Jun 27 22:03:49 localhost kernel: md: using 128k window, over a total of 20971456 blocks. 
Jun 27 22:03:48 localhost mdadm[3305]: RebuildStarted event detected on md device /dev/md
0 
Jun 27 22:03:49 localhost mdadm[3305]: Fail event detected on md device /dev/md0, compone
nt device /dev/sdb
# mail
Mail version 8.1 6/6/93.  Type ? for help. 
"/var/spool/mail/root": 4 messages 4 new 
>N  1 [email protected]  Wed Jun 12 03:37  43/1629  "Logwatch for localhost.localdomai
n (Linux)" 
 N  2 [email protected]  Wed Jun 12 04:02  43/1629  "Logwatch for localhost.localdomai
 n (Linux)" 
 N  3 [email protected]  Thu Jun 27 17:58  43/1629  "Logwatch for localhost.localdomai
 n (Linux)" 
 N  4 [email protected]  Thu Jun 27 22:03  32/1255  "Fail event on /dev/md0:localhost.
 localdomain" 
& 4 
Message 4: 
From [email protected]  Thu Jun 27 22:03:49 2013 
Date: Thu, 27 Jun 2013 22:03:49 +0800 
From: mdadm monitoring <[email protected]> 
To: [email protected] 
Subject: Fail event on /dev/md0:localhost.localdomain
This is an automatically generated mail message from mdadm
running on localhost.localdomain
A Fail event had been detected on md device /dev/md0.
It could be related to component device /dev/sdb.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[2] sde[3] sdc[1] sdb[4](F) 
      41942912 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU] 
      [>....................]  recovery =  0.9% (200064/20971456) finish=1.7min speed=200
      064K/sec 
unused devices: <none>


十一、RAID擴展

如果在創建陣列時不想使用整個塊設備,可以指定用於創建RAID陣列每個塊設備使用的設備大小。然後在陣列需要擴展大小時,使用模式--grow(或者其縮寫-Q)以及--size參數(或者其縮寫-z) 在加上合適的大小數值就能分別擴展陣列所使用每個塊設備的大小。

# mdadm -C /dev/md0 -l5 -n3 /dev/sd[b-d] -x1 /dev/sde --size=1024000
# -- size單位爲KB
# mdadm -C /dev/md0 -l5 -n3 /dev/sd[b-d] -x1 /dev/sde --size=1024000 
mdadm: array /dev/md0 started.
# mdadm -D /dev/md0                                              
/dev/md0:  
        Version : 0.90  
  Creation Time : Thu Jun 27 22:24:51 2013  
     Raid Level : raid5  
     Array Size : 2048000 (2000.34 MiB 2097.15 MB)  
  Used Dev Size : 1024000 (1000.17 MiB 1048.58 MB)  
   Raid Devices : 3  
  Total Devices : 4  
Preferred Minor : 0  
    Persistence : Superblock is persistent
    Update Time : Thu Jun 27 22:24:51 2013 
          State : clean, degraded, recovering  
 Active Devices : 2  
Working Devices : 4  
 Failed Devices : 0  
  Spare Devices : 2
         Layout : left-symmetric 
     Chunk Size : 64K
 Rebuild Status : 73% complete
           UUID : 78e766fb:776d62ee:d22de2dc:d5cf5bb9 
         Events : 0.1
    Number   Major   Minor   RaidDevice State 
       0       8       16        0      active sync   /dev/sdb  
       1       8       32        1      active sync   /dev/sdc  
       4       8       48        2      spare rebuilding   /dev/sdd
       3       8       64        -      spare   /dev/sde 
# mdadm --grow /dev/md0 --size=2048000 #擴展大小
# mdadm -D /dev/md0               
/dev/md0:
        Version : 0.90
  Creation Time : Thu Jun 27 22:24:51 2013
     Raid Level : raid5
     Array Size : 4096000 (3.91 GiB 4.19 GB)
  Used Dev Size : 2048000 (2000.34 MiB 2097.15 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
    Update Time : Thu Jun 27 22:28:34 2013
          State : clean, resyncing
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 64K
 Rebuild Status : 90% complete
           UUID : 78e766fb:776d62ee:d22de2dc:d5cf5bb9
         Events : 0.3
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       3       8       64        -      spare   /dev/sde

到此所有RAID內容基本顯示完畢!如有錯漏,大神勿噴。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章