天天看點

mdadm 磁盤軟RAID詳解

raid0:   mdadm –assemble /dev/md0 /dev/sda1 /dev/sdb1

使用sda1和sdb1建立RAID0,條帶大小是64KB:  mdadm –create /dev/md0 –chunk=64 –level=0 –raid-devices=2 /dev/sda1 /dev/sdb1

建立md0,RAID級别是RAID1,條帶大小事64KB,成員盤是sda1、sdb1:   mdadm –create /dev/md0 –chunk=64 –level=1 –raid-devices=2 /dev/sda1 /dev/sb1

删除raid: mdadm –stop /dev/md0

轉載:https://blog.csdn.net/a7320760/article/details/10442715

1. 文檔資訊

目前版本1.2

建立人朱榮澤

建立時間2011.01.07

修改曆史

版本号時間内容

1.02011.01.07建立《mdadm詳細使用手冊》1.0文檔

1.12011.01.10增加”實驗”内容

1.22012.04.13删除”實驗内容”

2. mdadm的主要功能

 mdadm是一個用于建立、管理、監控RAID裝置的工具,它使用linux中的md驅動。

    mdadm程式是一個獨立的程式,能完成所有軟體RAID的管理功能,主要有7中使用模式。

模式名字主要功能(對于存儲管理系統)

Create使用空閑的裝置建立一個新的陣列,每個裝置具有中繼資料塊建立RAID時使用的指令

Assemble将原來屬于一個陣列的每個塊裝置組裝為陣列在存儲管理系統一般不使用該模式

Build建立或組裝不需要中繼資料的陣列,每個裝置沒有中繼資料塊在存儲管理系統一般不使用該模式

Manage管理已經存儲陣列中的裝置,比如增加熱備磁盤或者設定某個磁盤失效,然後從陣列中删除這個磁盤用于增加熱備盤

移除失效盤

Misc報告或者修改陣列中相關裝置的資訊,比如查詢陣列或者裝置的狀态資訊用于查詢RAID資訊

Grow改變陣列中每個裝置被使用的容量或陣列中的裝置的數目,改變陣列屬性(不能改變陣列的級别)在存儲管理系統一般不使用該模式

Monitor監控一個或多個陣列,上報指定的事件,可以實作全局熱備監控RAID,寫入日志

3. 概念解析

/proc/mdstat : 目前md(軟RAID)的狀态資訊

/etc/mdadm.conf : mdadm的配置檔案

Active devices : RAID中的活動元件裝置

Faulty device : RAID中失效的裝置

Spare device : RAID中熱備盤

Device Names : RAID裝置名、标準格式是”/dev/mdNN”或者”/dev/md/NN”

md            : Multiple Devices虛拟塊裝置(利用底層多個塊裝置虛拟出一個新的虛拟塊裝置)。

md driver        : MD的驅動

Array            : 陣列,跟RAID意思相同

Raid            :不解釋

md device        : 就是使用MD建立的軟體RAID

md array :同上

md裝置        :同上

4. mdadm各個選項

指令概要: 

mdadm

 [模式選項] [RAID裝置名] [子選項…] [元件裝置名…]

模式選項子選項備注

無特定模式–verbose顯示更詳細的資訊

用于 –detail –scan 或者 –examine –scan

–force某些選項強制執行

–config=指定配置檔案,預設是”/etc/mdadm.conf”或者是”/etc/mdadm/mdadm.conf”,假如配置檔案名是 “partitions”,則mdadm會讀取/proc/partitions的裝置用于scan。

假如配置檔案名是”none”,則mdadm會認為配置檔案是空的。

–scan從配置檔案或者/proc/mdstat中掃描資訊。

–metadata=定義元件裝置上超級塊的類型。對于–create,預設是0.90。

0,0.90 : 限制一個RAID中的裝置數為28個,限制元件裝置大小為2TB

1,1.0,1.1,1.2 :不同的子版本号辨別在不同的地方存儲超級塊。1.0在裝置的結尾,1.1在裝置的開頭,1.2在裝置的4K處。

–homehost=在建立一個RAID時,homehost名會記錄在超級塊中。在1.X超級塊中,它是RAID名字的字首。0.90超級塊中,homehost名的的SHA1值會儲存在UUID的後半部分。

當使用Auto-Assemble時,隻有相同homehost名的RAID才會被組建。

–create

–build

–grow

–raid-devices=指定一個RAID中active devices的數目。

–spare-devices=指定建立一個RAID時spare devices中的數目。

–size=在RAID1/4/5/6中每個裝置所能利用的資料容量。這個值必須是 chunk size的整數倍。而且必須留128K的裝置空間用于RAID超級塊。假如沒有指定,則預設使用最小裝置空間。

該選項能用–grow 進行擴容。

–chunk=條帶大小

–rounding=在linear array中的rounding factor,等于條帶大小

–level設定RAID級别,RAID級别有(有些是同義詞,比如raid5和5):

Linear,raid0,0,stripe,raid1,1,mirror,raid4,4,raid5,5,raid6,6,raid10,10,multipath,mp,faulty。

–build隻支援linear,stripe,raid0,0,raid1,multipath,mp,faulty。

–grow不支援改變RAID級别。

–layout=

(–parity=)

設定RAID5、RAID10資料布局類型,控制faulty級别的failure的模式。

--bitmap=這個選項對性能可能有影響,具體檢視《mdadm手冊翻譯》

設定一個檔案用于儲存write-intent位圖。

當檔案名是”internal”時,位圖複制儲存在RAID元件裝置(一個RAID的所有元件裝置)的超級塊中。當–grow,檔案名是”none”時,位圖會被移除。

–bitmap-chunk=這個選項對性能可能有影響,具體檢視《mdadm手冊翻譯》

設定位圖中每位所映射塊的大小。

當使用”internal”位圖時,映射塊的大小是自動設定的(根據超級塊中可用空間)。

–write-mostly–build、–create、–add後的裝置都被标記上”wirte-mostly”。這個選項隻對RAID1有效,即”md”driver會避免從RAID1的所有裝置讀取資料。假如鏡像的速度很慢,這是非常有用的。

–write-behind=該選項隻對RAID1有效。這個選項會設定最大的寫隊列深度,預設值是256。使用write-behind的前提是先設定write-intent bitmap,先設定裝置為write-mostly。

–assume-clean告訴mdadm這個array已經clean。當array從一個嚴重的故障中恢複時,這個選項會保證沒有資料會被覆寫。當建立RAID1和RAID10時,這個選項也能避免初始化同步。但是使用該選項必須要很謹慎。

–backup-file=當使–grow為RAID5增加元件裝置數時,該檔案儲存關鍵資料。(該檔案不能在該RAID5上,以免發生死鎖。)

–name給一個RAID設定名字,隻在1.X超級塊中有用,它是簡單的字元串,用于assembling時識别RAID元件裝置。

–run強制激活RAID。(當一個RAID中的某些元件裝置被其他RAID或者檔案系統占用時)。使用這個選項,裝置上有舊的中繼資料資訊的提示會被忽略。

–forcemdadm無條件接受指定的參數。

使用該選項可以隻使用一個裝置建立RAID;

建立RAID5時使用該選項,使得RAID5初始化不使用recovery模式,而是校驗同步所有元件裝置上的資料(比recovery模式要慢)。詳情請見指令舉例中的建立RAID

–auto=建立md裝置檔案。選項是{no,yes,md,mdp,part,p}{NN}。預設是yes。

“yes”要求RAID裝置名是标準格式的,然後裝置檔案類型和minor号會自動确定。

比如RAID裝置名是”/dev/mdx” 檢視/proc/partitions可以看到mdx的major号是9,minor号是x。

當使用”md”時,RAID裝置名可以是非标準格式,比如”/dev/md/zhu”,然後建立兩個裝置檔案/dev/md/zhu 還有 /dev/mdx,并給這兩個裝置檔案配置設定相同的major号和minor号(也就是這兩個裝置檔案指向同一個裝置)。配置設定minor号的方法是:配置設定一個沒有使用過的minor号,這個minor号就是/dev/mdx中的數字x。檢視/proc/partitions和/proc/mdstat,RAID裝置名還是/dev/mdx。

當使用”mdp,p,part”時,RAID裝置名可以是非标準格式,比如”/dev/md/zhu”,除了建立裝置檔案/dev/md/zhu 還有 /dev/mdx外,還會建立 /dev/md/zhup1, /dev/md/zhup2, /dev/md/zhup3, /dev/md/zhup4,這些是分區裝置檔案。

–symlink=no預設下–auto會建立/dev/md/zhu的軟連接配接 /dev/md_zhu。假如使用該選項,則不會建立軟連接配接。

–assemble–uuid=重組RAID,要求元件裝置的uuid相同

–super-minor=minor号會儲存在每個元件裝置中的超級塊中,可以根據這個重組RAID。

–name=根據RAID名重組RAID。

–force即使一些超級塊上的資訊過時了,也可以強制重組。

–run即使RAID中的元件裝置不完整(例如原來建立4塊盤的RAID5,現在隻發現3塊成員盤),RAID也被重組,并啟動。

(假如不用–run,RAID隻被重組,但是不啟動)

–no-degraded和–scan選項一起使用。

禁止RAID中的元件裝置不完整時啟動RAID,知道RAID中的元件完整。

–auto如–create中的 –auto

–bitmap指定bitmap檔案(當RAID建立時所指定的bitmap檔案),假如RAID使用internal類型的bitmap,則不需指定。

–backup-file=當增加RAID5的元件裝置數,指定backup-file檔案。在RAID5重構過程中,假如系統當機,backup-file檔案會儲存關鍵資料,使得重新開機系統之後,重構可以繼續進行。假如沒有指定backup-file,mdadm會使用熱備盤上的空間作為備份空間。

–update=更新RAID中每個元件裝置的超級塊資訊。選項有sparc2.2、summaries、uuid、name、homehost、resync、byteorder、super-minor

–auto-update-homehost隻對auto assembly情況下有用。

Manage模式–add給RAID線上添加裝置(可用于添加熱備盤)

–re-add給RAID重新添加一個以前被移除的裝置。

假如一個RAID使用write-intent bitmap時,它的一個裝置被移除後又被重新添加,bitmap可以避免完全重建,而是隻更新那些裝置被移除後已經被更新過的塊資料。

–reomve移除裝置,隻能移除failed(失效)和spare(熱備)裝置。(是以假如要移除RAID5中的一個活動裝置,需要先使用–fail選項使該裝置的狀态變成failed,然後才能移除。)

該選項後面跟的是裝置名(比如是 /dev/sdc),也可以是

failed

detached

關鍵字。Failed使得是以失效的部件被移除,detached使得是以被拔出的硬碟被移除。

–fail使RAID中某個裝置變成failed狀态。

關鍵字。

Misc模式–query查詢一個RAID或者一個RAID元件裝置的資訊

–detail查詢一個RAID的詳細資訊

–examine查詢元件裝置上的超級塊資訊

–sparc2.2用于修正超級塊資訊,詳情請見使用者手冊。

–examnie-bitmap檢視bitmap檔案中的資訊

–run啟動不完整的RAID(比如本來是有4塊盤的RAID5,現在3塊盤也可以啟動)。

–stop禁止RAID活動,釋放所有資源。但是RAID中元件裝置上的超級塊資訊還在。還可以重新組建和激活RAID。

–readonly使RAID隻能隻讀

–readwrite使RAID能讀寫

–zero-superblock假如一個元件裝置包含有效的超級塊資訊,那麼這個超級塊會被寫0覆寫。假如使–force選項,則不管超級塊中是否有資訊,都會被寫0覆寫。

–test假如–detail一起使用,則mdadm的傳回值是RAID的狀态值。

0 代表正常

1 代表降級,即至少有一塊成員盤失效

2 代表有多快成員盤失效,整個RAID也失效了(對于RAID1/5/6/10都适用)。

4 讀取raid資訊失敗

–monitor

(–follow)

–mail設定警報郵件

–program當監測到一個事件發生時,關于該事件的資訊會作為參數被發給該程式

–syslog所有事件都會通過syslog報告

–delayMdadm會隔多少秒輪詢各個RAID,預設是60秒

–daemoniseMdadm會建立一個子進行作為背景監控程式。該子程序的PID号會輸入到stdout上。

–pid-file當–daemonise一起使用時,子程序的PID号會寫入該檔案中

–oneshot隻會檢測RAID一次。它會檢測NewArray、DegradedArray、SparesMissing事件。

在cron腳本中運作”mdadm –monitor –scan –oneshot”會定期報告。

–test對每個RAID産生TestMessage,用于測試mail、program是否正确。

5. 各種模式的使用 Assemble模式

用法:mdadm –assemble md-devices options-and-component-devices…

例子:#mdadm –assemble /dev/md0 /dev/sda1 /dev/sdb1

說明:把sda1和sdb1重組成/dev/md0。

用法:mdadm –assemble –scan md-devices-and-options…

例子:#mdadm –assemble –scan /dev/md0

說明:從配置檔案讀出裝置清單,根據超級塊中的資訊,重組/dev/md0。

用法:mdadm –assemble –scan options…

例子:#mdadm –assemble –scan –uuid=xxxxxxx

說明:從配置檔案讀出裝置清單,根據超級塊中的uuid資訊,重組uuid是xxxxxxx的RAID。

假如#mdadm –assemble –scan指令後面沒有裝置清單,mdadm會讀取配置檔案中所列的RAID資訊,并嘗試重組。假如系統中沒有/etc/mdadm.conf配置檔案,則會從/proc/partitions中讀取裝置清單。是以使用mdadm時,必須保證mdadm中的狀态資訊(/proc/mdstat)和/etc/mdadm.conf配置檔案一緻,否則重新開機作業系統後,會出現問題。

Create模式

用法:mdadm –create md-device –chunk=X –level=Y –raid-devices=Z devices

例子:# mdadm –create /dev/md0 –chunk=64 –level=0 –raid-devices=2 /dev/sda1 /dev/sdb1

說明:使用sda1和sdb1建立RAID0,條帶大小是64KB。

例子:#mdadm –create /dev/md1 –chunk=64 –level=1 –raid-devices=1 /dev/sdc1 missing

說明:建立一個降級的RAID1,同樣可以使用missing建立降級的RAID4/5/6。

Misc模式

用法:mdadm options… devices..

例子:#mdadm –detail –test /dev/md0

說明:這條指令的傳回值:0代表md0正常;1代表md0至少有一個failed的元件裝置;2代表md0有多個failed元件裝置,這個md0已經不能使用,即失效(md0是raid1、raid5、raid6、raid10時);4代表擷取md0裝置資訊錯誤。

Monitor模式 (隻監控raid1/5/6/10,不監控raid0)

用法: mdadm –monitor options… devices..

說明:mdadm除了報告事件以外,mdadm還可以把一個RAID中的熱備盤移動到另一個沒有熱備盤的RAID中,前提條件是這些RAID都屬于同一個spare-group(RAID的spare-group可以在配置檔案裡設定)。

說明:當指令中有裝置清單時,mdadm隻會監控這些裝置。當沒有裝置清單時,配置檔案中的所有RAID都會被監控。當使用–scan選項時,/proc/mdstat中的裝置也會被監控。

說明:傳給program的三個參數是事件名、涉及到的md device名、涉及到的其他裝置(比如元件裝置失效)。

說明:監控的事件有

    DeviceDisappeared 當RAID0和linear中某個裝置失效時,就會出現RAID消失。

    RebuildStarted    重建RAID

    RebuildNN    重建百分比,NN代表20,40,60,80

    RebuildFinished 重建結束

    Fail RAID中某個活動元件裝置失效

    FailSpare RAID中某個熱備盤失效

    SpareActive RAID中熱備盤啟用,用于重建RAID

    NewArray 在/proc/mdstat中監控到有新的RAID被建立

    DegradedArray RAID降級

    MoveSpare 熱備盤從一個RAID中移動到另外一個RAID中,前提是這兩個RAID屬于同個spare-group

    SparesMissing 發現RAID中的熱備盤數比配置檔案中的少

    TestMessage 測試

說明:隻有Fail、FailSpare、DegradedArray、SparesMissing、TestMessage事件才會觸發發送Email。

Grow模式

說明:能改變RAID1、5、6中的”size”屬性。

說明:能改變RAID1、5中的”raid-disks”屬性。

說明:增加移除RAID中的write-intent bitmap。

6. 指令舉例 建立配置檔案

例子:#echo ‘DEVICE /dev/hd*[0-9] /dev/sd*[0-9]‘ > mdadm.conf

#mdadm –detail –scan >> mdadm.conf

說明:建立配置檔案的原型。

建立RAID

例子:#mdadm –create /dev/md0 –chunk=64 –level=1 –raid-devices=2 /dev/sda1 /dev/sb1

說明:建立md0,RAID級别是RAID1,條帶大小事64KB,成員盤是sda1、sdb1

給RAID增加熱備盤

例子:#mdadm /dev/md0 -add /dev/sdc1

說明:給md0增加熱備盤sdc1。

檢視RAID資訊群組件裝置資訊

例子:#cat /proc/mdstat

說明:檢視目前所有RAID的狀态

例子:#mdadm –detail /dev/md0

說明:檢視md0的詳細資訊

例子:#mdadm –examine /dev/sda1

說明:檢視元件裝置sda1中超級塊的資訊和狀态

删除RAID

例子:#mdadm –stop /dev/md0

說明:停止md0的運作

例子:#mdadm — zero-superblock /dev/sda1

說明:清除元件裝置sda1中超級塊的資訊

監控RAID 7. 配置檔案詳解 格式簡要說明

格式說明:SYNTAX xxx xxx xxx xxx xxx

注釋說明:#This is a comment.

多行說明:假如任意一行中開頭是以空白開頭的(space/tab),這行被看做是上一行的延續。

空行說明:空行被忽略。

關鍵字說明 DEVICE

    該關鍵字後面跟的是裝置清單(裝置和分區),這些裝置可能是某個md裝置的元件。當要查找某個RAID的元件裝置時,mdadm會掃描這些裝置。

例子:DEVICE /dev/hda* /dev/hdc*

例子:DEVICE /dev/hd*[0-9] /dev/sd*[0-9]

例子:DEV /dev/sd*

例子:DEVICE /dev/discs/disc*/disc

例子:DEVICE partitions

說明:mdadm會讀取/proc/partitions中的裝置。假如在配置檔案中沒有DEVICE關鍵字,

    則假定”DEVICE partitions”,也就是預設會讀取/proc/partitions中的裝置。

ARRAY

例子:

說明:關鍵字ARRAY辨別一個活動的RAID,ARRAY後面跟着的是RAID的名字。RAID名字後面跟着的是RAID的屬性值,這些屬性值辨別一個RAID,或者辨別一個組的成員RAID(spare-group)。假如給出了多個屬性值,則每個元件裝置中的超級塊資訊必須比對屬性值。

屬性值如下:

uuid=128bit的值,用16進制表示。

name=當建立RAID時使用–name指定的名字(跟RAID裝置名概念不一樣)。不是所有的超級塊版本都支援–name。

super-minor=當一個RAID,該RAID的裝置名是/dev/mdX,minor号碼就是X。

devices=該屬性值後面跟着裝置名或者裝置名模式(它們用逗号隔開)。注意:這些裝置名必須包含在DEVICE中。

level=RAID的級别

num-devices=一個完整的RAID中活動裝置數。

spares=RAID中所設定的熱備盤數目。

spare-group=RAID組名,所有具有相同spare-group名的RAID會共享熱備盤(前提是使用mdadm –monitor監控RAID)。mdadm會自動把一個RAID中的熱備盤移動到另一個RAID(這個RAID有faild盤或者missing盤,而且沒有熱備盤)中。

auto= 

bitmap=指定write-intent bitmap檔案。功能跟”–assemble –bitmap-file”一樣。

metadata=指定超級塊版本。

MAILADDR

使用monitor模式(同時也使–scan選項)時,警報事件發送到的Email位址。

MAILFROM

郵件位址。

PROGRAM

    “mdadm –monitor”監測到的事件都會發送給這個程式。

隻能有一個程式。

CREATE

    該行中是建立RAID時使用的預設值。

owner=代替系統預設的USER ID(root)

group=代替系統預設的GROUP ID(disk)

mode=權限

metadata=超級塊的版本

symlinks=no不用軟連接配接

配置檔案例子

DEVICE /dev/sd[bcdjkl]1

DEVICE /dev/hda1 /dev/hdb1

# /dev/md0 is known by it’s UID.

ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371

# /dev/md1 contains all devices with a minor number of

# 1 in the superblock.

ARRAY /dev/md1 superminor=1

# /dev/md2 is made from precisey these two devices

ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1

# /dev/md4 and /dev/md5 are a spare-group and spares

# can be moved between them

ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df

spare-group=group1

ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977

# /dev/md/home is created if need to be a partitionable md array

# any spare device number is allocated.

ARRAY /dev/md/home UUID=9187a482:5dde19d9:eea3cc4a:d646ab8b

auto=part

MAILADDR [email protected]

PROGRAM /usr/sbin/handle-mdadm-events

CREATE group=system mode=0640 auto=part-8

HOMEHOST

8. 注意事項

當系統中不存在配置檔案/etc/mdadm.conf、/etc/mdadm/mdadm.conf時,系統啟動時,md驅動會自動查找分區為FD格式的磁盤。是以一般會使用fdisk工具将hd磁盤和sd磁盤分區,再設定為FD的磁盤分區。是以假如直接使用/dev/sda、/dev/sdb建立RAID,系統重新開機後,不會重組該RAID。

繼續閱讀