這篇文章聊聊軟RAID
。html
隨着數據日益增加,單塊硬盤每每由於容量小而不能知足大部分人的需求,因而RAID
就應運而生。RAID
( Redundant Array of Independent Disks
)即獨立磁盤冗餘陣列,簡稱磁盤陣列。簡單地說,RAID
是由多個獨立的高性能磁盤驅動器組成的磁盤組,從而提供比單個磁盤更高的存儲性能和數據冗餘的技術。linux
這裏要提一下JBOD
(Just a Bunch of Disks
)。JBOD
將多個物理磁盤串聯起來,提供一個巨大的邏輯磁盤。JBOD
的數據存放機制是由第一塊磁盤開始按順序日後存儲,當前磁盤存儲空間用完後,再依次日後面的磁盤存儲數據。JBOD
存儲性能徹底等同於單塊磁盤,並且也不提供數據冗餘。它只是簡單提供一種擴展存儲空間的機制,JBOD
可用存儲容量等於全部成員磁盤的存儲空間之和,即擁有容量疊加的做用。目前JBOD
常指磁盤櫃,而不論其是否提供RAID
功能。算法
RAID
中主要有三個關鍵概念和技術:鏡像(Mirroring
)、數據條帶(Data Stripping
)和數據校驗(Data parity
)。windows
I/O
性能提高。不一樣等級的RAID
採用一個或多個以上的三種技術,來得到不一樣的數據可靠性、可用性和I/O
性能。至於採用何種模式的RAID
,須要在深刻理解系統需求的前提下進行合理選擇,綜合評估可靠性、性能和成原本進行折中的選擇。緩存
<center></center>併發
隨着處理器、內存、計算機接口等技術的不斷髮展,RAID
不斷地發展和革新,在計算機存儲領域獲得了普遍的應用,從高端系統逐漸延伸到普通的中低端系統。RAID
技術如此流行,源於其具備顯著的特徵和優點,基本能夠知足大部分的數據存儲需求。整體說來,RAID
主要優點有以下幾點運維
RAID
擴大了磁盤的容量,由多個磁盤組成的RAID
系統具備海量的存儲空間。如今單個磁盤的容量就能夠到10TB
以上,這樣RAID
的存儲容量就能夠達到PB
級,大多數的存儲需求均可以知足。通常來講,RAID
可用容量要小於全部成員磁盤的總容量。不一樣等級的RAID
算法須要必定的冗餘開銷,具體容量開銷與採用算法相關。若是已知RAID
算法和容量,能夠計算出RAID
的可用容量。一般,RAID
容量利用率在50%
~ 90%
之間。RAID
的高性能受益於數據條帶化技術。單個磁盤的I/O
性能受到接口、帶寬等計算機技術的限制,性能每每頗有 限,容易成爲系統性能的瓶頸。經過數據條帶化,RAID
將數據I/O
分散到各個成員磁盤上,從而得到比單個磁盤成倍增加的聚合I/O
性能。RAID
的另外一個重要特徵。從理論上講,由多個磁盤組成的RAID
系統在可靠性方面應該比單個磁盤要差。這裏有個隱含假定:單個磁盤故障將致使整個RAID
不可用。RAID
採用鏡像和數據校驗等數據冗餘技術,打破了這個假定。鏡像是最爲原始的冗餘技術,把某組磁盤驅動器上的數據徹底複製到另外一組磁盤驅動器上,保證總有數據副本可用。 比起鏡像50%
的冗餘開銷,數據校驗要小不少,它利用校驗冗餘信息對數據進行校驗和糾錯。RAID
冗餘技術大幅提高數據可用性和可靠性,保證了若干磁盤出錯時,不會致使數據的丟失,不影響系統的連續運行。RAID
是一種虛擬化技術,它對多個物理磁盤驅動器虛擬成一個大容量的邏輯驅動器。對於外部主機系統來講,RAID
是一個單一的、快速可靠的大容量磁盤驅動器。這樣,用戶就能夠在這個虛擬驅動器上來組織和存儲應用系統數據。從用戶應用角度看,可以使存儲系統簡單易用,管理也很便利。因爲RAID
內部完成了大量的存儲管理工做,管理員只須要管理單個虛擬驅動器,能夠節省大量的管理工做。RAID
能夠動態增減磁盤驅動器,可自動進行數據校驗和數據重建,這些均可以大大簡化管理工做。<center></center>ide
因爲本篇文章主要講解的是軟RAID
,因此就不展開贅述,對RAID
想要深刻了解或對RAID
各類模式感興趣的,能夠閱讀如下連接:工具
RAID
分爲軟件RAID
和硬件RAID
。佈局
硬件磁盤陣列(hardwareRAID
)是經過磁盤陣列卡(RAID
卡)來建立磁盤陣列的。在RAID
卡上會有一個專門的芯片來處理RAID
任務,能夠大大減輕原來系統的計算壓力和I/O
壓力,效率也會獲得很好的提高;同時如今大部分的RAID
卡都支持熱拔插,因此在更換損壞磁盤時是很是方便的。可是很差的一點是RAID
卡比較貴,特別是那些好一點的RAID
卡就會特別貴,並且功能還不能保證特別齊全,因此在這種狀況下就出現了軟件RAID
,來模擬硬件RAID
。
軟件RAID
是一種模擬硬件RAID
的產物,運行在操做系統上面,全部任務的處理都由CPU
來完成,因此須要佔用必定的系統資源,特別是計算和I/O
資源,因此性能不如硬RAID
,但軟RAID
實現簡單,不須要額外的硬件設備。。雖說如今的機器計算速度都很是快了,可是對於一些要求較高的場景或企業,通常最好仍是儘可能不要選擇軟件RAID
的,畢竟在總的使用成本上來講硬件RAID
性價比仍是蠻高的(硬RAID
經過RAID
卡解決了不少管理問題,大大地下降了後期運維成本)。
硬RAID
優點:
RAID
操做都由RAID
控制芯片完成,不佔用任何CPU
和內存資源,並且RAID
卡上通常還有額外的cache
進一步提高性能,同時擁有獨立的電池對緩存進行供電保護,系統重啓/電源恢復的時候能夠把緩存中未寫入硬盤的數據寫入硬盤。RAID
能夠支持全部與RAID
相關的功能和全部RAID
級別,而軟RAID
只能支持幾種基礎的RAID
級別,而且不具備硬RAID
的許多高級功能,好比點燈、緩存、熱插拔等等。RAID
獨立於系統,例如windows/linux
均可以用,自己擁有CPU
、內存、電池等。軟RAID
依賴於操做系統,若是操做系統出問題,軟RAID
就掛了。硬RAID
的兼容性要好不少,萬一系統出了問題,也能夠很方便地作系統維護和數據恢復。軟RAID
優點:
重要的事情說三遍,軟RAID
最大的優點就是便宜!!!
總的來講,硬RAID
功能上是完爆軟RAID
的,可是硬RAID
比較昂貴,通常的RAID
都須要幾千元。企業級的核心應用推薦採用硬RAID
的方案,花錢解決一切煩惱。而一些不是特別核心的應用或者我的推薦採用軟RAID
,軟RAID
目前大部分操做系統都支持,而且對基礎的RAID
的功能支持的也不錯,可以知足大部分需求,最關鍵的仍是不要錢!!!
mdadm
是Linux
操做系統上開源的軟RAID
用戶層管理工具,容許用戶建立和管理軟RAID
磁盤陣列。
目前,mdadm
支持大部分常見的陣列類型,如JBOD
、RAID0
、RAID1
、RAID4
、RAID5
、RAID6
、MULTIPATH
、RAID10
等,建立和管理RAID
也十分的方便,同時,mdadm
使用很是靈活,磁盤或者分區均可以做爲RAID
的成員盤來建立軟RAID
。主要有7
種使用模式:
模式名字 | 主要功能 |
---|---|
Create | 使用空閒的設備建立一個新的陣列,每一個設備具備元數據塊 |
Assemble | 將原來屬於一個陣列的每一個塊設備組裝爲陣列 |
Build | 建立或組裝不須要元數據的陣列,每一個設備沒有元數據塊 |
Manage | 管理已經存儲陣列中的設備,好比增長熱備磁盤或者設置某個磁盤失效,而後從陣列中刪除這個磁盤 |
Misc | 報告或者修改陣列中相關設備的信息,好比查詢陣列或者設備的狀態信息 |
Grow | 改變陣列中每一個設備被使用的容量或陣列中的設備的數目 |
Monitor | 監控一個或多個陣列,上報指定的事件 |
mdadm
使用--create
(或其縮寫-C
)參數來建立新的陣列,而且將一些重要陣列的標識信息做爲元數據能夠寫在每個底層設備的指定區間。--level
(或者其縮寫-l
)表示陣列的RAID
級別,--chunk
(或者其縮寫-c
)表示每一個條帶單元的大小,以KB
爲單位,默認爲64KB
,條帶單元的大小配置對不一樣負載下的陣列讀寫性能有很大影響。--raid-devices
(或者其縮寫-n
)表示陣列中活躍的設備個數,而--spare-devices
(或者其縮寫-x
)表示陣列中熱備盤的個數,一旦陣列中的某個磁盤失效,MD
內核驅動程序自動用將熱備磁盤加入到陣列,而後重構丟失磁盤上的數據到熱備磁盤上。
建立RAID0: mdadm --create /dev/md0 --level=0 --chunk=32 --raid-devices=3 /dev/sd[i-k]1 建立RAID1: mdadm -C /dev/md0 -l1 -c128 -n2 -x1 /dev/sd[i-k]1 建立RAID5: mdadm -C /dev/md0 -l5 -n5 /dev/sd[c-g] -x1 /dev/sdb 建立RAID6: mdadm -C /dev/md0 -l6 -n5 /dev/sd[c-g] -x2 /dev/sdb /dev/sdh 建立RAID10: mdadm -C /dev/md0 -l10 -n6 /dev/sd[b-g] -x1 /dev/sdh
若是一個塊設備元數據中含有其餘舊陣列信息,這時候會須要交互式命令確認yes/no
,若是想自動化,經過管道符的方式便可:
採用missing做爲其中一個設備,至關於建立單盤raid1 yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
Build
模式能夠用來建立沒有元數據(即沒有superblock
)的RAID0/1
設備,不能建立RAID4/5/6/10
等設備。因爲不存在元數據塊,不少區分和檢查工做沒法進行,須要對使用設備特別清楚,這種模式不經常使用,經常使用的仍是Create
模式,畢竟元數據塊仍是擁有很大的做用。
[root@test ~]# ./mdadm -BR /dev/md0 -l0 -n6 /dev/sd[b-g] mdadm: array /dev/md0 built and started. [root@test ~]# ./mdadm -BR /dev/md0 -l1 -n2 /dev/sd[b-c] mdadm: array /dev/md0 built and started. [root@test ~]# ./mdadm -BR /dev/md0 -l5 -n6 /dev/sd[b-g] mdadm: Raid level 5 not permitted with --build. [root@test ~]# ./mdadm -BR /dev/md0 –l6 -n6 /dev/sd[b-g] mdadm: Raid level 5 not permitted with --build. [root@test ~]# ./mdadm -BR /dev/md0 –l10 -n6 /dev/sd[b-g] mdadm: Raid level 10 not permitted with --build.
經過mdadm
命令查看指定陣列的簡要信息(使用--query
或者其縮寫-Q
)和詳細信息(使用--detail
或者其縮寫-D
) 詳細信息包括RAID
的版本、建立的時間、RAID
級別、陣列容量、可用空間、設備數量、超級塊狀態、更新時間、UUID
信息、各個設備的狀態、RAID
算法級別類型和佈局方式以及塊大小等信息。設備狀態信息分爲active
,sync
,spare
,faulty
,rebuilding
,removing
等等。
查詢簡要信息 [root@test ~]# mdadm --query /dev/md0 /dev/md0: 2.100GiB raid10 6 devices, 1 spare. Use mdadm --detail for more detail. 查詢詳細信息 [root@test ~]# ./mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Sun Aug 22 17:49:53 2018 Raid Level : raid10 Array Size : 3145536 (3.00 GiB 3.22 GB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 6 Total Devices : 7 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Aug 22 21:55:02 1999 State : clean Active Devices : 6 Working Devices : 7 Failed Devices : 0 Spare Devices : 1 Layout : near=2, far=1 Chunk Size : 64K UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a Events : 0.122 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 3 active sync /dev/sde 4 8 80 4 active sync /dev/sdf 5 8 96 5 active sync /dev/sdg 6 8 112 - spare /dev/sdh
上面是查詢陣列裏面的詳細信息,咱們也能夠查詢陣列中具體設備的詳細信息,使用命令--examine
(或者其縮寫-E
)來檢測當前的塊設備上是否有陣列的元數據信息,包括設備RAID
級別,設備UUID
,陣列UUID
等等。
[root@test ~]# mdadm -E /dev/sdb1 /dev/sdb1: Magic : a92b4efc Version : 1.2 Feature Map : 0x1 Array UUID : df3ceb66:95a8c503:9c6c41b2:db583c57 Name : host244:root Creation Time : Wed Apr 17 18:33:11 2019 Raid Level : raid1 Raid Devices : 2 Avail Dev Size : 167772160 (80.00 GiB 85.90 GB) Array Size : 83886080 (80.00 GiB 85.90 GB) Data Offset : 131072 sectors Super Offset : 8 sectors Unused Space : before=130992 sectors, after=0 sectors State : clean Device UUID : 8054a66a:962c52e8:be0c8425:db207be4 Internal Bitmap : 8 sectors from superblock Update Time : Sat May 4 16:13:56 2019 Bad Block Log : 512 entries available at offset 16 sectors Checksum : 6af807c8 - correct Events : 207 Device Role : Active device 1 Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
咱們還能夠經過cat /proc/mdstat
查看全部運行的RAID
陣列的狀態,在第一行中首先是MD
的設備名,active
和inactive
選項表示陣列是否能讀寫,接着是陣列的RAID
級別,後面是屬於陣列的塊設備,方括號[]
裏的數字表示設備在陣列中的序號,(S)
表示其是熱備盤,(F)
表示這個磁盤是faulty
狀態。在第二行中首先是陣列的大小,單位是KB
,接着是chunk-size
的大小,而後是layout
類型,不一樣RAID
級別的layout
類型不一樣,[6/6]
和[UUUUUU]
表示陣列有6
個磁盤而且6
個磁盤都是正常運行的,而[5/6]
和[_UUUUU]
表示陣列有6
個磁盤中5
個都是正常運行的,下劃線對應的那個位置的磁盤是faulty
狀態的。
[root@test ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid5 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 5242560 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] unused devices: <none> [root@test ~]# mdadm /dev/md0 -f /dev/sdh /dev/sdb mdadm: set /dev/sdh faulty in /dev/md0 mdadm: set /dev/sdb faulty in /dev/md0 [root@test ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid10 sdh[6] sdb[7](F) sdc[0] sdg[5] sdf[4] sde[3] sdd[2] 3145536 blocks 64K chunks 2 near-copies [6/5] [U_UUUU] [=======>........] recovery = 35.6% (373888/1048512) finish=0.1min speed=93472K/sec unused devices: <none>
而且還會展現陣列中一些狀態,好比recvoery
,resync
等等,而且還有詳細包括進度值、速度、完成塊大小等。
Linux
系統目前支持sysfs
也能夠訪問/sys/block/md0
目錄查詢陣列信息。
[root@test ~]# ls -l /sys/block/md0/ capability holders range size stat uevent dev md removable slaves subsystem [root@test ~]# ls /sys/block/md0/md/ array_state dev-sdg rd1 suspend_lo bitmap_set_bits dev-sdh rd2 sync_action chunk_size layout rd3 sync_completed component_size level rd4 sync_speed dev-sdb metadata_version rd5 sync_speed_max dev-sdc mismatch_cnt reshape_position sync_speed_min dev-sdd new_dev resync_start dev-sde raid_disks safe_mode_delay dev-sdf rd0 suspend_hi [root@test ~]# ls /sys/block/md0/slaves/ sdb sdc sdd sde sdf sdg sdh
當陣列沒有文件系統或者其餘存儲應用以及高級設備使用的話,可使用--stop
(或者其縮寫-S
)中止陣列;若是命令返回設備或者資源忙類型的錯誤,說明/dev/md0
正在被上層應用使用,暫時不能中止,必需要首先中止上層的應用,這樣也能保證陣列上數據的一致性。
[root@test ~]# mdadm --stop /dev/md0 mdadm: fail to stop array /dev/md0: Device or resource busy [root@test ~]# umount /dev/md0 [root@test ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
上面只是中止陣列,陣列其中的設備還存在着陣列元數據信息,若是須要完全刪除陣列,還須要--zero-superblock
將陣列中全部設備的元數據塊刪除。
[root@test ~]# mdadm --zero-superblock /dev/sdb
模式--assemble
或者其縮寫(-A
)主要是檢查底層設備的元數據信息,而後再組裝爲活躍的陣列。若是咱們已經知道陣列由那些設備組成,能夠指定使用那些設備來啓動陣列。
[root@test ~]# mdadm -A /dev/md0 /dev/sd[b-h] mdadm: /dev/md0 has been started with 6 drives and 1 spare.
能夠經過配置文件/etc/mdadm.conf
從新組裝,mdadm
先檢查mdadm.conf
中的DEVICE
信息,而後從每一個設備上讀取元數據信息,並檢查是否和ARRAY
信息一致,若是信息一致則啓動陣列。
mdadm -As /dev/md0
若是沒有配置/etc/mdadm.conf
文件,並且又不知道陣列由那些磁盤組成,則可使用上面提到的查詢命令--examine
(或者其縮寫-E
)來檢測當前的塊設備上是否有陣列的元數據信息,找到陣列的惟一標識UUID
和陣列包含的設備名字,而後再使用上面的命令來組裝陣列,也可使用UUID
標識來組裝陣列。沒有一致的元數據的信息設備(例如/dev/sda
和/dev/sda1
等)mdadm
程序會自動跳過。
[root@test ~]# ./mdadm -Av --uuid=0cabc5e5:842d4baa:e3f6261b:a17a477a /dev/md0 /dev/sd* mdadm: looking for devices for /dev/md0 mdadm: no recogniseable superblock on /dev/sda mdadm: /dev/sda has wrong uuid. mdadm: no recogniseable superblock on /dev/sda1 mdadm: /dev/sda1 has wrong uuid. mdadm: no RAID superblock on /dev/sdi mdadm: /dev/sdi has wrong uuid. mdadm: /dev/sdi1 has wrong uuid. mdadm: no RAID superblock on /dev/sdj mdadm: /dev/sdj has wrong uuid. mdadm: /dev/sdj1 has wrong uuid. mdadm: no RAID superblock on /dev/sdk mdadm: /dev/sdk has wrong uuid. mdadm: /dev/sdk1 has wrong uuid. mdadm: /dev/sdb is identified as a member of /dev/md0, slot 0. mdadm: /dev/sdc is identified as a member of /dev/md0, slot 1. mdadm: /dev/sdd is identified as a member of /dev/md0, slot 2. mdadm: /dev/sde is identified as a member of /dev/md0, slot 3. mdadm: /dev/sdf is identified as a member of /dev/md0, slot 4. mdadm: /dev/sdg is identified as a member of /dev/md0, slot 5. mdadm: /dev/sdh is identified as a member of /dev/md0, slot 6. mdadm: added /dev/sdc to /dev/md0 as 1 mdadm: added /dev/sdd to /dev/md0 as 2 mdadm: added /dev/sde to /dev/md0 as 3 mdadm: added /dev/sdf to /dev/md0 as 4 mdadm: added /dev/sdg to /dev/md0 as 5 mdadm: added /dev/sdh to /dev/md0 as 6 mdadm: added /dev/sdb to /dev/md0 as 0 mdadm: /dev/md0 has been started with 6 drives and 1 spare.
/etc/mdadm.conf
做爲默認的配置文件,主要做用是方便跟蹤軟RAID
的配置,尤爲是能夠配置監視和事件上報選項。Assemble
命令也可使用--config
(或者其縮寫-c
)來指定配置文件。咱們一般能夠以下命令來創建配置文件。
[root@test ~]# mdadm -Ds > /etc/mdadm.conf [root@test ~]# cat /etc/mdadm.conf # mdadm.conf written out by anaconda MAILADDR root AUTO +imsm +1.x -all ARRAY /dev/md/1 level=raid1 num-devices=2 UUID=fe796549:cdbe506c:51e5404e:fa40fee6 ARRAY /dev/md/2 level=raid1 num-devices=2 UUID=60cecdc1:f115d9e5:f9ddfb52:c3c035ab ARRAY /dev/md/3 level=raid1 num-devices=2 UUID=df3ceb66:95a8c503:9c6c41b2:db583c57 ARRAY /dev/md/4 level=raid0 num-devices=2 UUID=7c5f42c1:9b013ec0:b17b7337:33df22ca ARRAY /dev/md/5 level=raid1 num-devices=2 UUID=4cbb3226:c5acf9e3:fb156e23:9aa56a48
使用配置文件啓動陣列時,mdadm
會查詢配置文件中的設備和陣列內容,而後啓動運行全部能運行RAID
陣列。若是指定陣列的設備名字,則只啓動對應的陣列。
[root@test ~]# mdadm -As mdadm: /dev/md1 has been started with 3 drives. mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] md0 : active raid10 sdb[0] sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] md1 : active raid0 sdi1[0] sdk1[2] sdj1[1] 7337664 blocks 32k chunks unused devices: <none> [root@test ~]# mdadm -S /dev/md0 /dev/md1 mdadm: stopped /dev/md0 mdadm: stopped /dev/md1 [root@test ~]# mdadm -As /dev/md0 mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] md0 : active raid10 sdb[0] sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] unused devices: <none>
注意:
這個配置文件不是隨着陣列信息隨時變化的,而是能夠手動修改的。因此根據配置文件組裝未必百分百成功,由於以前可能陣列被手動修改過,因此建議在每一次改變陣列信息後,最好同步一下當前的陣列信息到配置文件中。
[root@test ~]# mdadm -Ds > /etc/mdadm.conf
mdadm
能夠在Manage
模式下,對運行中的陣列進行添加及刪除磁盤。經常使用於標識failed
磁盤,增長spare
(熱備)磁盤,以及從陣列中移走已經失效的磁盤等等。 使用--fail
(或者其縮寫-f
)指定磁盤損壞。
[root@test ~]# mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0
當磁盤已經損壞時,使用--remove
(或者其縮寫-f
)參數將這個磁盤從磁盤陣列中移走;但若是設備還正在被陣列使用(即不處於失效狀態),則不能從陣列中移走。
[root@test ~]# mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb [root@test ~]# mdadm /dev/md0 --remove /dev/sde mdadm: hot remove failed for /dev/sde: Device or resource busy
若是陣列帶有spare
磁盤,那麼自動將損壞磁盤上的數據重構到新的spare
磁盤上
[root@test ~]# mdadm -f /dev/md0 /dev/sdb ; cat /proc/mdstat mdadm: set /dev/sdb faulty in /dev/md0 Personalities : [raid0] [raid10] md0 : active raid10 sdh[6] sdb[7](F) sdc[0] sdg[5] sdf[4] sde[3] sdd[2] 3145536 blocks 64K chunks 2 near-copies [6/5] [U_UUUU] [=======>........] recovery = 35.6% (373888/1048512) finish=0.1min speed=93472K/sec unused devices: <none>
還可使用--add
(或者其縮寫-a
)參數增長磁盤:
[root@test ~]# mdadm /dev/md0 --add /dev/sdh mdadm: added /dev/sdh
若是在建立陣列時不想使用整個塊設備,能夠指定用於建立RAID
陣列每一個塊設備使用的設備大小。
[root@test ~]# mdadm -CR /dev/md0 -l5 -n6 /dev/sd[b-g] -x1 /dev/sdh --size=102400
而後在陣列須要擴展大小時,使用模式--grow
(或者其縮寫-G
)以及--size
參數(或者其縮寫-z
)再加上合適的大小數值就能分別擴展陣列所使用每一個塊設備的大小。
[root@test ~]# mdadm -Q /dev/md0 /dev/md0: 500.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail. [root@test ~]# mdadm --grow /dev/md0 --size=204800 [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 1024000 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] [============>......] resync = 69.6% (144188/204800) finish=0.0min speed=10447K/sec unused devices: <none> [root@test ~]# mdadm -Q /dev/md0 /dev/md0: 1000.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail.
若是上面是文件系統,在設備大小擴展後,文件系統也要同時擴展。
mdadm
還提供增長或減小陣列中設備個數的功能(reshape
),使用模式—grow
和--raid-disks
(或者其縮寫-n
)參數再加上合適的設備個數。擴展後陣列中原來的熱備盤變爲活躍磁盤,因此陣列的設備個數增長,陣列的大小也相應增長。
[root@test ~]# ./mdadm -D /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Sun Aug 22 22:16:19 1999 Raid Level : raid5 Array Size : 1024000 (1000.17 MiB 1048.58 MB) Used Dev Size : 204800 (200.03 MiB 209.72 MB) Raid Devices : 6 Total Devices : 7 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Aug 22 22:23:46 1999 State : clean Active Devices : 6 Working Devices : 7 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K UUID : 53e6395c:1af16258:087cb2a0:b66b087f Events : 0.12 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 3 active sync /dev/sde 4 8 80 4 active sync /dev/sdf 5 8 96 5 active sync /dev/sdg 6 8 112 - spare /dev/sdh [root@test ~]# ./mdadm --grow /dev/md0 --raid-disks=7 mdadm: Need to backup 1920K of critical section.. mdadm: ... critical section passed. [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdh[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 1024000 blocks super 0.91 level 5, 64k chunk, algorithm 2 [7/7] [UUUUUUU] [===>.............] reshape = 19.4% (40256/204800) finish=0.7min speed=3659K/sec unused devices: <none>
mdadm
還能夠對RAID
陣列進行監控,監控程序定時查詢指定的事件是否發生,而後根據配置來妥善處理。例如當陣列中的磁盤設備出現問題的時候,能夠發送郵件給管理員;或者當磁盤出現問題的時候由回調程序來進行自動的磁盤替換,全部監控事件均可以記錄到系統日誌中。目前mdadm
支持的事件有:
RebuildStarted
RebuildNN
(NN is 20, 40, 60, or 80
)RebuildFinished
Fail
FailSpare
SpareActive
NewArray
DegradedArray
MoveSpare
SparesMissing
TestMessage
若是配置每300
秒mdadm
監控進程查詢MD
設備一次,當陣列出現錯誤,會發送郵件給指定的用戶,執行事件處理的程序而且記錄上報的事件到系統的日誌文件。使用--daemonise
參數(或者其縮寫-f
)使程序持續在後臺運行。若是要發送郵件須要sendmail
程序運行,當郵件地址被配置爲外網地址應先測試是否能發送出去。
[root@test ~]# mdadm --monitor --mail=root@localhost --program=/root/md.sh --syslog --delay=300 /dev/md0 --daemonise
查看系統日誌信息,能夠看到哪一個陣列或者陣列中的哪一個設備發生過的哪些事件。
[root@test ~]# mdadm -f /dev/md0 /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@test ~]# tail –f /var/log/messages Aug 22 22:04:12 fc5 mdadm: RebuildStarted event detected on md device /dev/md0 Aug 22 22:04:12 fc5 kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery. Aug 22 22:04:12 fc5 kernel: md: using 128k window, over a total of 1048512 blocks. Aug 22 22:04:14 fc5 mdadm: Fail event detected on md device /dev/md0, component device /dev/sdb Aug 22 22:04:14 fc5 mdadm: Rebuild80 event detected on md device /dev/md0 Aug 22 22:04:16 fc5 mdadm: RebuildFinished event detected on md device /dev/md0 Aug 22 22:04:16 fc5 mdadm: SpareActive event detected on md device /dev/md0, component device /dev/sdh Aug 22 22:04:16 fc5 kernel: md: md0: recovery done.
回調程序從mdadm
程序接受兩個或者三個參數:事件名字,監控陣列的名字和特殊事件可能使用到的底層塊設備名字。上面的事件返回的信息以下:
Eventname: RebuildStarted Device: /dev/md0 next: Eventname: Fail Device: /dev/md0 next: /dev/sdb Eventname: Rebuild80 Device: /dev/md0 next: Eventname: RebuildFinished Device: /dev/md0 next: Eventname:SpareActive Device: /dev/md0 next: /dev/sdh
本文講述了RAID
的特色和優點,而後引入硬RAID
和軟RAID
,並分析這二者的優劣勢;最後着重對軟RAID
的建立,刪除,中止和擴展等操做進行了介紹和實踐。