mdadm命令解析

來源:互聯網
上載者:User

mdadm命令解析

 

一、 在linux系統中目前以MD(Multiple Devices)虛擬塊裝置的方式實現軟體RAID,利用多個底層的塊裝置虛擬出一個新的虛擬設備,並且利用條帶化(stripping)技術將資料區塊均勻分布到多個磁碟上來提高虛擬設備的讀寫效能,利用不同的資料冗祭演算法來保護使用者資料不會因為某個塊裝置的故障而完全丟失,而且還能在裝置被替換後將丟失的資料恢複到新的裝置上.
目前MD支援linear,multipath,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是否可以模組載入到系統中.
[root@testggv ~]# cat /proc/mdstat
Personalities :
unused devices:
[root@testggv ~]#
[root@testggv ~]# cat /proc/devices | grep md
1 ramdisk
9 md
254 mdp
[root@testggv ~]#mdadm --version
[root@testggv ~]# mdadm --version
mdadm - v2.5.4 - 13 October 2006
[root@testggv ~]#
二、mdadm管理軟raid陳列
mdadm程式是一個獨立的程式,能完成所有的軟體raid管理功能,主要有7種使用模式:
Create
使用閒置裝置建立一個新的陣列,每個裝置具有中繼資料塊
Assemble
將原來屬於一個陣列的每個塊裝置群組裝為陣列
Build
建立或組裝不需要中繼資料的陣列,每個裝置沒有中繼資料塊
Manage
管理已經存放裝置陣列中的裝置,比如增加熱備磁碟或者設定某個磁碟失效,然後從陣列中刪除這個磁碟
Misc
報告或者修改陣列中相關裝置的資訊,比如查詢陣列或者裝置的狀態資訊
Grow
改變陣列中每個裝置被使用的容量或陣列中的裝置的數目
Monitor
監控一個或多個陣列,上報指定的事件
如果MD驅動被編譯到核心中,當核心調用執行MD驅動時,會自動尋找分區為FD(linux raid autodetect格式的磁碟。所以一般會使用fdisk工具將HD磁碟或者SD磁碟分割,再設定為FD的磁碟。
[root@testggv ~]# 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.
[root@testggv ~]#

如果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
fi -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
建立一個RAID5裝置:
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 -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

初始化的時間長短和磁碟陣列自身效能以及讀寫的應用負載相關,使用cat /proc/mdstat資訊查詢RAID陣列當前重構的速度和預期的完成時間。
cat /proc/mdstat
[root@fc5 mdadm-2.6.3]# 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:
[root@fc5 mdadm-2.6.3]# 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正在被上層應用使用,暫時不能停止,必須要首先停止上層的應用,這樣也能保證陣列上資料的一致性。
[root@fc5 mdadm-2.6.3]# ./mdadm --stop /dev/md0
mdadm: fail to stop array /dev/md0: Device or resource busy
[root@fc5 mdadm-2.6.3]# umount /dev/md0
[root@fc5 mdadm-2.6.3]#./mdadm --stop /dev/md0
mdadm: stopped /dev/md02.3 組裝曾建立過的陣列模式--assemble或者其縮寫(-A)主要是檢查底層裝置的中繼資料資訊,然後再組裝為活躍的陣列。如果我們已經知道陣列由那些裝置群組成,可以指定使用那些裝置來啟動陣列。[root@fc5 mdadm-2.6.3]# ./mdadm -A /dev/md0 /dev/sd[b-h]
mdadm: /dev/md0 has been started with 6 drives and 1 spare.如果有設定檔(/etc/mdadm.conf)可使用命令mdadm -As /dev/md0。mdadm先檢查mdadm.conf中的DEVICE資訊,然後從每個裝置上讀取中繼資料資訊,並檢查是否和ARRAY資訊一致,如果資訊一致則啟動陣列。如果沒有配置/etc/mdadm.conf檔案,而且又不知道陣列由那些磁碟組成,則可以使用命令--examine(或者其縮寫-E)來檢測當前的塊裝置上是否有陣列的中繼資料資訊。[root@fc5
mdadm-2.6.3]# ./mdadm -E /dev/sdi
mdadm: No md superblock detected on /dev/sdi.
[root@fc5 mdadm-2.6.3]# ./mdadm -E /dev/sdb
/dev/sdb:
Magic : a92b4efc
Version : 00.90.00
UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a
Creation Time : Sun Aug 22 17:49:53 1999
Raid Level : raid10
Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)
Array Size : 3145536 (3.00 GiB 3.22 GB)
Raid Devices : 6
Total Devices : 7
Preferred Minor : 0
Update Time : Sun Aug 22 18:05:56 1999
State : clean
Active Devices : 6
Working Devices : 7
Failed Devices : 0
Spare Devices : 1
Checksum : 2f056516 - correct
Events : 0.4
Layout : near=2, far=1
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
2 2 8 48 2 active sync /dev/sdd
3 3 8 64 3 active sync /dev/sde
4 4 8 80 4 active sync /dev/sdf
5 5 8 96 5 active sync /dev/sdg
6 6 8 112 6 spare /dev/sdh
從上面命令結果可以找到陣列的唯一標識UUID和陣列包含的裝置名稱字,然後再使用上面的命令來組裝陣列,也可以使用UUID標識來組裝陣列。沒有一致的中繼資料的資訊裝置(例如/dev/sda和/dev/sda1等)mdadm程式會自動跳過。

[root@fc5 mdadm-2.6.3]# ./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)來指定設定檔。我們通常可以如下命令來建#立設定檔
#echo DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 > /etc/mdadm.conf
#mdadm --detail --scan >> /etc/mdadm.conf

使用設定檔啟動陣列時,mdadm會查詢設定檔中的裝置和陣列內容,然後啟動運行所有能運行RAID陣列。如果指定陣列的裝置名稱字,則只啟動對應的陣列。
[root@fc5 mdadm-2.6.3]# ./mdadm -As
mdadm: /dev/md1 has been started with 3 drives.
mdadm: /dev/md0 has been started with 6 drives and 1 spare.
[root@fc5 mdadm-2.6.3]# 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:
[root@fc5 mdadm-2.6.3]# ./mdadm -S /dev/md0 /dev/md1
mdadm: stopped /dev/md0
mdadm: stopped /dev/md1
[root@fc5 mdadm-2.6.3]# ./mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 6 drives and 1 spare.
[root@fc5 mdadm-2.6.3]# 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:
2.4 查詢陣列的狀態
我們可以通過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@fc5 mdadm-2.6.3]# 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:
[root@fc5 mdadm-2.6.3]# ./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@fc5 mdadm-2.6.3]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid5 sdh[6](F) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[7](F)
5242560 blocks level 5, 64k chunk, algorithm 2 [6/5] [_UUUUU]
unused devices:
我們也可以通過mdadm命令查看指定陣列的簡要資訊(使用--query或者其縮寫-Q)和詳細資料(使用--detail或者其縮寫-D) 詳細資料包括RAID的版本、建立的時間、RAID層級、陣列容量、可用空間、裝置數量、超級塊狀態、更新時間、UUID資訊、各個裝置的狀態、RAID演算法層級類型和布局方式以及塊大小等資訊。裝置狀態資訊分為active, sync, spare, faulty, rebuilding, removing等等。
root@fc5 mdadm-2.6.3]# ./mdadm --query /dev/md0
/dev/md0: 2.100GiB raid10 6 devices, 1 spare. Use mdadm --detail for more detail.
[root@fc5 mdadm-2.6.3]# ./mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Aug 22 17:49:53 1999
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

管理陣列
mdadm可以在Manage模式下,對運行中的陣列進行添加及刪除磁碟。常用於標識failed磁碟,增加spare(熱備)磁碟,以及從陣列中移走已經失效的磁碟等等。使用--fail(或者其縮寫-f)指定磁碟損壞。

[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
當磁碟已經損壞時,使用--remove(或者其縮寫--f)參數將這個磁碟從磁碟陣列中移走;但如果裝置還正在被陣列使用,則不能從陣列中移走。[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --remove /dev/sdb
mdadm: hot removed /dev/sdb
[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --remove /dev/sde
mdadm: hot remove failed for /dev/sde: Device or resource busy
如果陣列帶有spare磁碟,那麼自動將損壞磁碟上的資料重構到新的spare磁碟上;
[root@fc5 mdadm-2.6.3]# ./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:
如果陣列沒有熱備磁碟,可以使用--add(或者其縮寫-a)參數增加熱備磁碟
[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --add /dev/sdh
mdadm: added /dev/sdh
監控陣列
可以使用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@fc5 mdadm-2.6.3]#./mdadm --monitor --mail=root@localhost --program=/root/md.sh

--syslog --delay=300 /dev/md0 --daemonise

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.