mdadm命令解析
一,在Linux系統中目前MD(Multiple Devices)虛擬塊設備的方式實現軟件RAID,利用多個底層的塊設備虛擬出一個新的虛擬設備,并且利用條帶化(stripping)技術將數據塊均勻分布到多個磁盤上來提高虛擬設備的讀寫性能,利用不同的數據冗余算法來保護用戶數據不會因為某個塊設備的故障而完全丟失,而且還能在設備被替換后將丟失的數據恢復到新的設備上。
目前MD支持 Linear,Mulyipath,Raid0(stripping),Raid1(mirror),Raid4,Raid5,Raid6,Raid10等不同的冗余級別和級成方式,當然也能支持多個RAID陳列的層疊組成Raid1 0,raid5 1等類型的陳列,
文章主要講解用戶層mdadm如何管理軟件RAID及使用中經常遇到的問題及解決辦法,現流行的系統中一般已經化悲憤MD驅動模塊直接編譯到內核中或編譯為可動態加載的驅動模塊,我們可以在機器啟動后通過cat /proc/mdstat看內核是否已經加載MD驅動或者cat/proc/devices是否有MD塊設備,并且使用lsmod看MD是否可以模塊加載到系統中。
# cat /proc/mdstat
Personalities :
unused devices:
# cat /proc/devices | grep md
1 ramdisk
9 md
254 mdp
# mdadm –version
mdadm – v3.3.4 – 3rd August 2015
二,mdadm管理軟RAID陳列
mdadm程序是一個獨立的程序,能完成所有的軟件raid管理功能,主要有7種使用模式:
- Create:使用空閑的設備創建新的整列,每個設備有元數據塊
- Assemble:將原來屬于一個陣列的每個塊設備組裝為陣列
- Build:創建或組裝不需要元數據的陣列,每個設備沒有元數據塊
- Manage:管理已經存儲陣列中的設備,比如增加熱備磁盤或者設置某個磁盤失效,然后從陣列中刪除這個磁盤
- Misc:報告或者修改陣列中相關設備的信息,比如查詢陣列或者設備的狀態信息
- Grow:改變陣列中每一個設備被使用的容量或陣列中的設備的數目
- Monitor:監控一個或多個陣列,上報指定的事件
如果MD驅動被編譯到內核中,當內核調用執行MD驅動驅動時,會自動查找分區為FD(linux raid autodetect)格式的磁盤。所以一般關于會使用fdisk工具將HD磁盤或者SD磁盤分區,在設置為FD磁盤。
# fdisk /dev/hdc
The number of cylinders for this disk is set to 25232.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-25232, default 1):
Using default value 1
Last cylinder or size or sizeM or sizeK (1-25232, default 25232):
Using default value 25232
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or
busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
如果MD驅動時模塊形式加載,需要在系統運行時由用戶層腳本控制RAID陳列啟動運行,如在FedoraCore系統中在、etc/rc.d/rc.sysinit文件中有啟動軟RAID陣列的指令,若RAID的配置文件mdadm.conf存在,則調用mdadm檢查配置文件里的選項,然后啟動RAID陣列。
echo “raidautorun /dev/md0” | nash –quiet
if [ -f /etc/mdadm.conf]; then
/sbin/mdadm -A -s
-A:指裝載一個已存在的陣列
-s:指查找mdadm.conf文件中的配置信息。
人工停止盤陳:#mdadm -S /dev/md0
創建新的陣列
mdadm使用
–create(或者縮寫-C)參數來創建新的陳列并且將一些重要陣列的表示信息作為元數據可以寫在每一個底層設備的指定區間
–level(-l)表示陣列的RAID級別
–chunk(-c)表示每個條帶單元大小,以KB為單位,默認為64KB,條帶單元的大小配置對不同負載下的陣列讀寫性能有很大影響
–raid-devices(-n)表示陣列中活躍的設備個數
–spare-devices(-x)表示陣列中熱備盤的個數,一定陣列中某個磁盤失效,MD內核驅動程序自動用將熱備磁盤加入到陣列
,然后重構丟失磁盤上的數據到熱備磁盤上
創建一個RAID 0設備:
mdadm –create /dev/md0 –level=0 –chunk=32 –raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
創建一個RAID 1設備:
mdadm –create /dev/md0 –level=1 –chunk=128 –raid-devices=2 –spare-devices=1 /dev/sdb1 /dev/sdc1 /dev/sdd1
創建一個RAID 5設備:
mdadm –create /dev/md0 –level=5 –raid-devices=5 /dev/sd[c-g]1 -spare-devices=1 /dev/sdb1
創建一個RAID 10設備:
mdadm -C /dev/md0 -l10 -n6 /dev/sd[b-g] -x1 /dev/sdh
創建一個RAID1 0設備:
mdadm -C /dev/md0 -l 1 -n2 /dev/sdb dev/sdc
mdadm -C /dev/md1 -l 1 -n2 /dev/sdd dev/sde
mdadm -C /dev/md2 -l 1 -n2 /dev/sdf dev/sdg
mdadm -C /dev/md3 -l 0 -n3 /dev/md0 /dev/md1 /dev/md2
初始化的時間長短和磁盤陣列自身性能以及讀寫的應用負載相關,使用cat /proc/mdstat信息查詢RAID陣列當前重構的速度和語氣的完成時間。
# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0]
3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]
[===>………..] resync = 15.3% (483072/3145536) finish=0.3min speed=120768K/sec
unused devices:
# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0]
3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]
unused devices:
使用陣列:
MD設備可以像普通塊設備那樣直接讀寫,也可以做文件系統格式化。
#mke2fs -j /dev/md0
mkdir -p /mnt/md-test
#mount /dev/md0 /mnt/md-test
停止正在運行的陳列:
當陣列沒有文件系統或者其他存儲應用以及高級設備使用的話,可以使用–stop(-S)停止陣列,如果命令返回設備或者資源忙類型的錯誤,說明/dev/md0正在被上層應用使用,暫時不能停止,必須要首先停止上層的應用,這樣也能保證陣列上數據的一致性。
# ./mdadm –stop /dev/md0
mdadm: fail to stop array /dev/md0: Device or resource busy
# umount /dev/md0
#./mdadm –stop /dev/md0
mdadm: stopped /dev/md0
暫時和大家分享到這里,有不足的地方請諒解。
原創文章,作者:eedsxb,如若轉載,請注明出處:http://www.www58058.com/85697