mdadm命令詳解


創建陣列(-C或--create)

--raid-devices(-n)

  • 功能:指定陣列中成員盤個數。
  • 舉例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd
  • 備注:當創建linear, multipath, raid0和raid1時,允許指定成員盤個數為1,但要使用--force參數。raid4與raid5不允許指定成員盤個數為1。成員盤個數可以通過--grow參數來修改,只有RAID1、RAID5 和RAID6陣列支持。

--spare-devices (-x)

  • 功能:指定陣列中熱備盤個數。
  • 舉例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd
  • 備注:無

--size (-z)

  • 功能:創建陣列時,指定每個成員盤使用多大的空間。單位KB。
  • 舉例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -z 4194304
  • 備注:當創建RAID1/4/5/6時,可以指定每個成員盤使用多大的空間。同時磁盤最后要留下128Kb大小空間,用於存放RAID的superblock。如果沒有指定該參數,mdadm將使用最小成員盤的大小指定該值。如果某個成員盤的大小大於最小成員盤1%,將會有警告信息,提示有部分空間沒有被使用。創建陣列時,如果RAID中所有成員盤使用了的空間都小於其本身的大小,那么它們剩余的空間可以通過--grow來擴容。--size=max,mdadm將自動選擇一個適合的最大值,來創建陣列。

--chunk (-c)

  • 功能:指定條帶大小。單位KB,默認值64KB。
  • 舉例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd -c 128
  • 備注:測試過指定4、8、16、32、64、128、256、1024、2048、4096、8192、16384、32768、65536、131072。最大值尚未測試出來,不知是否有最大值。

--rounding

  • 功能:指定linear陣列的rounding因子。等價於chunk size,但linear設備的chunk不是條帶分布在所有磁盤上,第一個磁盤分布完后,再分布到第二個磁盤上。
  • 舉例:mdadm --create /dev/md1 -llinear -n2 /dev/sdb /dev/sdc --rounding=128
  • 備注:如果建立raid5,指定該參數為128。mdadm –D獲取詳情時,顯示Chunk Size為128K。

--level (-l)

  • 功能:設置raid級別。
  • 舉例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd --chunk=128
  • 備注:當創建陣列時,--level參數后面可以跟定的值有linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4,raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty(指定faulty沒有創建成功)。其中,存在多個同義值。當--build陣列時,--level參數后面可以跟定的值有linear, stripe, raid0, 0, raid1, multipath, mp, and faulty。該參數不支持--grow。

--layout (-p)

  • 功能:配置raid5和raid10陣列的數據布局,控制faulty失敗模式。
  • 舉例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -p ra
  • 備注:raid5奇偶校驗塊的布局可以為left-asymmetric, left-symmetric, right-asymmetric, right-sym-metric, la, ra, ls, rs。默認為left-asymmetric。

--parity

  • 功能:等同於--layout

--bitmap (-b)

  • 功能:使用bitmap模式記錄RAID陣列有多少個塊已經同步(resync),正常停止RAID后,再將RAID組裝起來時,磁盤上已同步塊不用再次同步。
  • 舉例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --bitmap=internal --force
  • 備注:可以將bitmap記錄在文件中,文件名可以是不存在的,如果文件被用來記錄過bitmap可以通過指定--force參數來清空原來的信息。如果創建陣列的時候指定了文件,那么組裝陣列時,也要指定該文件。如果值為internal,則bitmap將被當作元數據信息,寫入到每個成員盤上面。--grow模式下,如果值為none,則bitmap信息將被清除。
  • 注意:位圖文件只能存儲在ext2或者ext3文件系統上。存儲到其他文件系統上面,可能導致嚴重問題。

--bitmap-chunk

  • 功能:指定bitmap中的每1個bit位對應RAID中每個數據塊的大小,單位為KB。如--bitmap-chunk=1024,則表示bitmap中1個bit對應RAID中1024K。即如果bitmap中第1個bit為1,代表RAID中第1M的數據在各個磁盤上是不一致的,需要同步。
  • 舉例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --bitmap=internal --bitmap-chunk=1024
  • 備注:使用一個文件存儲位圖時,默認使用最小的。不會小於4,不會超過2^21(2M)。當--bitmap=internal時,成員盤中用用記錄bitmap的空間有個最大值,如果指定的bitmap-chunk過小,則bitmap就會使用過大的空間,如果超過了最大空間,則無法創建成功。如果不指定bitmap-chunk,則會使用bitmap允許的大空間來自動計算出一個bitmap-chunk的最小值。

--write-mostly(-w)

  • 功能:陣列的成員盤指定該參數后,在應用中該成員盤只進行數據寫,而不從它上面讀取數據。該參數只針對RAID1有效。
  • 舉例:mdadm --create -l1 -n2 /dev/sdi --W /dev/sdj
  • 備注:--create 、–build和—add時,均可指定該參數。
    通過mdadm –D可以查詢到哪個設備指定了該參數。
    Number   Major   Minor   RaidDevice State
    0       8      128        0      active sync   /dev/sdi
    1       8      144        1      active sync writemostly   /dev/sdj
      通過cat /proc/mdstat也可以查看該信息。
    md1 : active raid1 sdi[0](W) sdj[1](W)
    dd if = /dev/md1 of=/dev/null bs=1M count=4096 &iostate –x /dev/sdi /dev/sdj 1 10
    發現僅僅有/dev/sdi盤有流量變化。

--write-behind

  • 功能:該參數只針對RAID1有效。對於標記為write-mostly的設備,延遲寫。若RAID1中有一個盤是本地磁盤,一個盤是網絡上導入的磁盤,則對導入的磁盤設置write-behind參數。在寫入數據時,本地磁盤數據寫完后,RAID則認為該次寫操作已完成。
  • 舉例:mdadm --create /dev/md1 -l1 -n2 /dev/sde --wrtie-mostly /dev/sdf --write-behind –bitmap=internal
  • 備注:該參數僅僅支持raid1。使用該參數,必須指定bitmap。該參數沒有經過測試。

--assume-clean

  • 功能:創建陣列時,不初始化磁盤上的數據,將指定的磁盤直接組成一個RAID。
  • 舉例:mdadm --create -l5 -n3 /dev/sd[b-d] --assume-clean
  • 備注:當我們可以保證RAID上的數據是一致的,不需要初始化,則可以使用這個參數,一方面可以節省初始化時間,更重要的是,當RAID被損壞后,如果磁盤都在系統中,可以使用此參數,恢復RAID上的數據。

--backup-file

  • 功能:通過--grow參數來擴充raid5的成員盤數量時,如果沒有空閑盤,可以通過該參數指定一個文件頂替。
  • 舉例:mdadm --grow /dev/md4 –n4 –backup-file=/tmp/file.backup
  • 備注:通過該參數,僅僅支持擴展一個磁盤。不能對降級狀態的RAID5進行擴容。擴容后,mdadm將執行數據遷移。

--name(-N)

  • 功能:陣列名稱。
  • 舉例:mdadm --create /dev/md4 -l5 -n3 /dev/sd[e-g] --metadata=1.0 --name=aaa
  • 備注:創建陣列時,superblock采用1.0版本,該參數才生效。組裝陣列的時候,可以通過該參數來組裝。mdadm -Av --name=aaa /dev/md4 /dev/sd[b-h]。如果創建時,沒有指定--name參數,mdadm將自動為陣列選取一個名字。選取規則是,選取md設備名稱的最后部分作為該陣列的名字。例如:/dev/md3,則3將被選擇為陣列的名稱。

--homehost

  • 功能:創建時,通過該參數可以將主機名記錄在成員盤的superblock信息中,在組裝時用來匹配磁盤中記錄的主機名與當前主機是否一致,如果不一致,組裝不成功。
  • 舉例:mdadm --create /dev/md1 -l5 -n3 /dev/sd[b-d] --homehost=pc3x
  • 備注:它將覆蓋mdadm.conf文件里面HOMEHOST字段。homehost信息將被保存在superblock中,對於1.0以上版本superblock,它將作為name的前綴。對於0.90版本superblock,它將存儲與UUID后64位中。

--run(-R)

  • 功能:當陣列的活躍盤上面存在其他陣列的superblock信息時,強制啟動陣列。
  • 舉例:mdada --create /dev/md0 -l5 -n3 /dev/sd[b-d] --run
  • 備注:構建陣列的盤存在其他陣列的superblock信息時,如果不加--run參數,mdadm將會彈出確認信息Continue creating array?。指定--run參數,將跳過確認信息,直接啟動陣列。

--force(-f)

  • 功能:強制mdadm接受geometry和layout說明。
  • 舉例:mdadm --create /dev/md0 -l1 -n1 /dev/sde --force
  • 備注:正常情況下,mdadm不允許使用一塊盤建立陣列,包括linear, multipath, raid0和raid1。加—force,將可以建立一塊盤的陣列。
    通常情況下,建立raid5時,mdadm會用n-1個成員盤建立一個降級狀態的陣列,然后,將最后一塊成員盤被當成熱備盤的形式加入到陣列中。這樣,mdadm將執行recover操作。加--force,mdadm將直接建立一個active狀態的陣列,然后執行resync操作。

-a, --auto{=no,yes,md,mdp,part,p}{NN}

  • 功能:通知mdadm是否創建設備文件,並分配一個未使用的次設備號。
  • 舉例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --auto=md
  • 備注:
    auto默認值是--auto=yes,需要md設備的設備文件名有一個標准格式,根據這個設備文件名的格式來指定RAID是否可分區以及該RAID的次設備號。
    當--auto=yes時標准格式為:不可分區陣列,/dev/mdNN、/dev/md/NN,如指定設備文件名為/dev/md0,則該RAID是一個不可分區的,且次設備號為0。可分區陣列/dev/md/dNN和/dev/md_dNN。
    --auto=no,將不會創建設備文件,如果不存在指定的設備文件,將不能創建陣列。
    --auto=md,創建一個不可以分區的陣列。
    --auto=mdp/part/p,創建一個可以分區的陣列。
    如果指定了--scan參數,那配置文件(/etc/mdadm.conf)里面指定的auto=將覆蓋命令行后面給定的--auto=。

--symlink=no

  • 功能:禁止創建軟連接。
  • 舉例:mdadm --create /dev/md/0 -l5 -n3 /dev/sd[b-d] --symlink=no
  • 備注:正常情況下,mdadm在/dev/md/下面創建設備時,它會在/dev/目錄下面為該設備創建一個軟連接,名字以md或者md_開始。指定該參數,將禁止該功能。即使/etc/mdadm.conf文件里面禁止創建軟連接,通過--symlink=yes也可以強制創建。

--metadata(-e)

  • 功能:指明被使用superblock類型。
  • 舉例:mdadm --create /dev/md/0 -l5 n3 /dev/sd[b-d] -e1.0
  • 備注:當創建陣列時,默認是0.90。默認值可以改變,mdadm.conf文件中,寫如下信息:CREATE metadata=1。可選擇值為:
    0.90,default:使用默認的0.90版本superblock。這個版本限制陣列只能有28個成員盤和RAID1的成員盤不能大於2TB(沒有測試過)。
    1.0,1.1,1.2:使用新版本superblock。它有新的約束。不同子版本,存儲superblock於磁盤不同位置。1.0,末尾;1.1,開始;1.2,開始4K。

Build陣列(--build)

該模式同create參數相同,但該模式創建的是無superblock的raid0 、linear、 multipath、 or faulty的RAID。詳細參數說明,見create模式。

組裝陣列--assemble或-A)

該模式用來組裝陣列。當陣列被停止后,或重啟設備時,如要繼續使用該陣列,此要將該陣列組裝起來。下面詳細介紹該模式的參數。

--uuid(-u)

  • 功能:通過匹配uuid來重構raid。
  • 舉例:mdadm -Av --uuid=af25a90b:0d43e494:46533453:86b2b0d4 /dev/md1
  • 備注:uuid號指raid的uuid號,如果磁盤中記錄的uuid號與指定的uuid號不匹配,則不使用該磁盤。

--super-minor(-m)

  • 功能:通過匹配設備次設備號來重構raid。
  • 舉例:mdadm -A /dev/md0 --super-minor=0
  • 備注:
    對於superblock版本為1.0的陣列,不能通過該參數進行重組。
    次設備號在創建陣列時,已經分配。重組陣列時,對於不包含該次設備號的設備將不能重組到陣列中。例如:重組的md設備為/dev/md0,那么mdadm將尋找次設備號為0的所有設備。
    如果創建陣列時,陣列為/dev/md1,那么所有設備的次設備號為1,即使重組后,陣列變為/dev/md3,所有設備的次設備號還為1。

--name(-N)

  • 功能:通過name組裝陣列。
  • 舉例:mdadm -A --name=god /dev/md0
  • 備注:
    僅支持superblock版本為1.0的陣列。
    創建陣列時,要指定--name(或homehost)。組裝時,--name要匹配每個設備上的name(或homehost)。下面舉例說明:
    mdadm --create /dev/md1 -l5 -n3 /dev/sd[b-d] --e1.0 --homehost=pc3x --assume-clean
    mdadm -D /dev/md1,獲取Name字段值,應該為pc3x:N,N為數字。
    mdadm --stop /dev/md1
    mdadm -A --name=Name字段值 /dev/mdX

--force(-f)

  • 功能:當superblock過期時,可以通過該參數強制組裝。
  • 舉例:mdadm -A --super-minor=0 /dev/md0 --force
  • 備注:如當RAID在重構過程中,設備重啟了,再組裝RAID時,需要加--force參數,才能組裝成功。

--run(-R)

  • 功能:當重組陣列active盤數少於創建時指定個數時,嘗試啟動陣列。
  • 舉例:mdadm -A /dev/md0 /dev/sdb /dev/sdc --run
  • 備注:正常情況下,組裝陣列時,如果指定的active盤數小於期望的盤數,mdadm將組裝成功,但狀態是inactive,無法使用該RAID。如果指定了--run參數,mdadm將通過各種方式使其啟動。下面舉例說明。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d]
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sdb /dev/sdc;執行結果如下:
    mdadm: /dev/md0 assembled from 2 drives - need all 3 to start it (use --run to insist).
    cat /proc/mdstate; 查詢到md0信息如下:
    md0 : inactive sde[0] sdf[1]
    mdadm --run /dev/md0;可以啟動md0陣列。
    mdadm --stop /dev/md0
    mdadm -A --run /dev/md0 /dev/sdb /dev/sdc;組裝陣列並啟動成功。

--no-degraded

  • 功能:組裝降級陣列,不啟動陣列。
  • 舉例:mdadm -A --no-degraded --scan /dev/md1
  • 備注:正常情況下,mdadm -A --scan組裝陣列時,即使掃描到盤個數小於陣列創建時指定盤個數,也可以組裝並啟動成功。當加上--no-degraded參數,則不啟動該陣列。

-a, --auto{=no,yes,md,mdp,part}

  • 功能:更改md設備名稱。
  • 舉例:mdadm -A --auto=mdp /dev/test /dev/sdb /dev/sdc /dev/sdd
  • 備注:關於該參數具體說明,可以看create模式下相關部分。正常情況下,如果運行mdadm -A /dev/test /dev/sd[b-d]將失敗,因為/dev/test不是標准md設備名。而指定了--auto=mdp后,可以組裝成功,並為該設備產生一個次設備號。

--bitmap(-b)

  • 功能:指定組裝RAID使用的bitmap文件,該文件為創建時指定的文件。
  • 舉例:mdadm -A --bitmap=/root/aaa.file /dev/md1 /dev/sd[b-d]
  • 備注:如果是internal類型的bitmap,重組時不需要指定。對於非internal類型的bitmap,如果不指定,組裝成功的陣列將不在有bitmap功能。

--backup-file

  • 功能:如果一個RAID使用了backup-file參數進行了擴容,那么組裝時,也需要指定backup-file。
  • 舉例:mdadm -A /dev/md0 /dev/sd[b-d] --backup-file=/root/aaa
  • 備注: 下面舉例說明:
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d]
    mdadm --grow /dev/md0 -n4 --backup-file=/root/aaa
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d] --backup-file=/root/aaa
    如果重組時,如果不指定backup file。測試結果如下:
    對於擴容完成的陣列,重組時指定backup file與否沒有關系,均可以重組和啟動成功。對於正在擴容中的陣列,停止陣列后,再重組,指定backup file與否也沒有關系,均可以重啟和啟動成功,reshape進度繼續,而非重新開始。
    the system crashed during the critical section,這種情況下重組陣列,需要指定backup file(個人理解)。因為通過—backup-file擴充盤數時,首先會進行“mdadm: Need to backup 384K of critical section..”這步操作,然后是“mdadm: ... critical section passed.”,擴充磁盤數完成,進行reshape。

--update(-U)

  • 功能:組裝陣列,更新每個設備的superblock信息。
  • 舉例:mdadm -A /dev/md0 /dev/sd[b-d] --update=xxx
  • 備注:xxx值可能為sparc2.2, summaries, uuid, name, homehost, resync, byteorder, devicesize or super-minor。
     sparc2.2:
    在linux內核版本為2.2下,需要指定該參數來給內核打一個patch。
     super-minor:
    該選項會更新每個設備的superblock信息中preferred minor字段,使該字段的值等於所屬陣列的次設備號。當使用--super-minor組裝陣列時,更換了md設備名稱。這時,該設備的次設備號就會改變。但過mdadm –E可以查詢后,發現各個成員盤中記錄的陣列的次設備號沒有更新。
     uuid:
    更新陣列的UUID。如果通過參數--uuid給定了一個合法的UUID,那么這個UUID將當作陣列的新UUID,而不是拿這個UUID來組裝陣列之用。如果--uuid未指定,將隨機選擇UUID。正常情況下,組裝陣列,其UUID是不變的。下面舉例說明:
    mdadm -A /dev/md2 --super-minor=2 --update=uuid --uuid=bc3c1314:8ac4d622:8bf1a0f2:72d806aa
    結果為,改變陣列的uuid為bc3c1314:8ac4d622:8bf1a0f2:72d806aa。
     name:
    更改存儲在陣列superblock中的Name字段。下面舉例說明:
    mdadm --create /dev/md1 -l5 -n3 /dev/sd[e-g] -e1.0 --name=pc3x --assume-clean
    mdadm --stop /dev/md1
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name; 
    結果為,陣列的Name字段由pc3x更新為md陣列的新次設備號,這里也就是1。
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name;
    結果為,陣列的Name字段將不在更新。
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name --name=aaa;
    結果為,陣列的Name字段更新為aaa。
     homehost:
    更新superblock里面的homehost信息。對於0.9版本,更新UUID。對於1.0版本,更新name。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -homehost=pc3x --assume-clean
    mdadm -D /dev/md0;查詢UUID
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d] --homehost=aaa --update=homehost
    mdadm -D /dev/md0;查詢UUID,與上面相比已改變。
     resync:
    標識陣列為dirty來表示所有冗余數據都可能是不正確。強迫mdadm開啟resync,來保證冗余數據的正確性。
     byteorder:
    該選項的存在,允許陣列在不同字節序的機器上面移動。僅針對0.9版本superblock。(沒有測試)
     summaries:
    糾正superblock中的摘要信息。包括total,working,active,failed,和spare devices。(沒有測試)
     devicesize:
    這個屬性很少使用,僅僅支持superblock版本為1.1和1.2。當陣列的成員盤改變大小的時候,這個功能會有用。成員盤的superblock中記錄了成員盤可以用於存儲數據的空間大小,當增加了成員盤空間,superblock並不會改變它相應的字段。這樣,當增加陣列空間時,就會報錯。使用--update=devicesize,可以修復這個錯誤。
    下面使用分區來測試說明。
    mdadm --creat /dev/md0 -l5 -n3 /dev/sd[b-d]1; 假設這里分區大小均為2G
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段
    mdadm --stop /dev/md0
    改變每個分區大小,增加到4G;fdisk命令先刪除原分區在建立該分區。
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段,沒有識別出新增空間。 
    mdadm -A /dev/md0 /dev/sd[b-d]1
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d]1 --update=devicesize
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段,識別出新增空間。

--auto-update-homehost

  • 功能:該項僅在auto-assembly情況下起作用。該條件下,如果沒有發現合適的陣列適合該homehost,mdadm將重新掃描所有陣列並組裝它們,並更新它們的homehost為指定值。
  • 舉例:mdadm -A --scan --homehost=aaa --auto-update-homehost
  • 備注:下面舉例說明。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --homehost=pc3x --assume-clean
    mdadm --stop /dev/md0
    mdadm -A --scan --homehost=aaa --auto-update-homehost

擴容陣列(--grow)

--raid-disks(-n)

  • 功能:改變成員盤數量。
  • 舉例:mdadm --grow /dev/md0 --raid-disks=5
  • 備注:陣列只有在正常狀態下,才能擴容,降級及重構時不允許擴容。對於raid5來說,只能增加成員盤,不能減少。而對於raid1來說,可以增加成員盤,也可以減少。但要減少成員盤時,首先要將盤faulty和removed掉。

--size(-z)

  • 功能:改變成員盤大小。
  • 舉例:mdadm --grow /dev/md0 --size=4194304
  • 備注:可以增加或者減小成員空間大小。當增加空間時,將執行resync操作。madam --grow /dev/md0 --size=max,分配可使用最大的空間給陣列。

--bitmap(-b)

  • 功能:增加或者移除bitmap。
  • 舉例:
     mdadm --grow /dev/md0 -b internal;增加bitmap
     mdadm --grow /dev/md0 -b none;移除bitmap

--level(-l)

  • 功能:尚不支持改變RAID級別。

--layout(-p)

  • 功能:改變校驗數據分布。等同於create模式下--layout選項。

管理磁盤(--manage)

--add(-a)

  • 功能:將指定設備添加到陣列中。
  • 舉例:mdadm --add /dev/md0 /dev/sdb
  • 備注:如果RAID是正常狀態,則--add一個磁盤后,該磁盤變為RAID的熱備盤。如果RAID為降級狀態,當--add所掉的成員盤時,若磁盤上記錄了bitmap信息,則根據bitmap 信息來重構RAID磁盤中需要同步的部分。如果RAID為降級狀態,--add一個非掉的成員盤,RAID開始全局重構。

--re-add

  • 功能:增加一個剛剛從陣列中移除不久的設備。
  • 舉例:mdadm -r /dev/md0 /dev/sdb --re-add /dev/sdb
  • 備注:--red-add與--add目前測試看來效果相同。

--fail(-f)

  • 功能:標記指定盤為faulty。
  • 舉例:mdadm -f /dev/md0 /dev/sdb
  • 備注:除了可以指定設備名外,也可以指定detached。使用detached,可以導致從系統detached的盤被標記為faulty(這個沒有測試)。

--set-faulty

  • 功能:作用等同於--fail

--remove(-r)

  • 功能:從陣列中移除指定設備。
  • 舉例:
     mdadm -r /dev/md0 /dev/sdb /dev/sdc,移除md0中的sdb和sdc。
     mdadm -r /dev/md1 faulty;移除一個faulty的設備,並不能同時將所有faulty設備移除。
     mdadm -r /dev/md1 detached;沒有測試。
  • 備注:只可以移除spare和faulty盤。

misc模式

--query(-Q)

  • 功能:檢查設備是否為md設備,是否為md陣列的組成部分。
  • 舉例:mdadm --query /dev/md0 or mdadm --query /dev/sdi
  • 備注:
     查詢一個md設備,輸出信息如下:
    [root@localhost ~]# mdadm --query /dev/md0
    /dev/md0: 15.100GiB raid5 3 devices, 0 spares. Use mdadm --detail for more detail.
    包括陣列名稱、陣列大小、陣列級別、陣列的盤數和熱備盤數。
     查詢一個非md設備(設備是md陣列的active盤),輸出信息如下:
    [root@localhost ~]# mdadm --query /dev/sdj
    /dev/sdj: is not an md array
    /dev/sdj: device 1 in 2 device active raid1 /dev/md3.  Use mdadm --examine for more detail.
     查詢一個非md設備(設備是md陣列的faulty盤),輸出信息如下:
    /dev/sdi: is not an md array
    /dev/sdi: device 0 in 2 device undetected raid1 /dev/md2.  Use mdadm --examine for more detail.
     查詢一個非md設備(設備存在superblock信息,但已經從md陣列移除),輸出信息:
    /dev/sdg: is not an md array
    /dev/sdg: device 2 in 3 device mismatch raid5 /dev/md0.  Use mdadm --examine for more detail.
     查詢一個非md設備(設備不存在superblock信息),輸出信息:
    [root@localhost ~]# mdadm --query /dev/sdk
    /dev/sdk: is not an md array

--detail(-D)

  • 功能:顯示一個陣列的詳細信息。
  • 舉例:mdadm --detail /dev/md0
  • 備注:
     mdadm -D /dev/md0 顯示信息如下:
    /dev/md0:
    Version : 00.90.03      //superblock版本
    Creation Time : Thu Jul 28 08:31:13 2011 //創建陣列時間
    Raid Level : raid5      //陣列級別
    Array Size : 16777088 (16.00 GiB 17.18 GB) //陣列大小
    Used Dev Size : 8388544 (8.00 GiB 8.59 GB) //每塊成員盤使用在陣列中的大小
    Raid Devices : 3      //成員盤個數,正在重構中重構盤也計算在內
    Total Devices : 3      //磁盤總個數=active+failed+spare
    Preferred Minor : 0      //陣列次設備號
    Persistence : Superblock is persistent  //是否使用superblock
    Intent Bitmap : Internal     //bitmap類型
    Update Time : Sat Jul 30 08:45:47 2011  //更新時間
    State : active       //陣列狀態
    Active Devices : 3      //活躍盤個數,正在重構中的重構盤不計算在內,而計算在Spare Device中,重構完成后,才從Spaer Devices中計算到此項中。
    Working Devices : 3      //同Raid Devices相同。
    Failed Devices : 0      //faulty盤個數。
    Spare Devices : 0      //熱備盤個數,重構過程中頂入的重構盤仍計算在內。
    Layout : left-symmetric     //冗余分布算法
    Chunk Size : 64K      //條塊大小
    UUID : f4eea5d5:1959d933:c4cd1425:c6c88f28 //RAID uuid
    Events : 0.66
    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
     mdadm -Ds顯示/proc/mdstat中所有陣列的信息
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28
    ARRAY /dev/md1 level=raid5 num-devices=3 UUID=cdaf2fef:dfe7b741:2fb91a6c:772f21a6
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a
     mdadm -D --brief /dev/md0將列出md陣列的簡略信息。
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28

--export(-Y)

  • 功能:與--detail一起使用,使陣列信息的輸出格式變為key=value的格式。
  • 舉例:mdadm --detail --export /dev/md0
  • 備注:輸出的內容為:
    MD_LEVEL=raid0
    MD_DEVICES=4
    MD_METADATA=0.90
    MD_UUID=6905fc31:e0e4cdcc:0ae08b48:7f860f33

--examine(-E)

  • 功能:打印設備上面的superblock信息
  • 舉例:mdadm --examine /dev/sdj
  • 備注:
     mdadm --examine /dev/sdb顯示信息為:
    /dev/sdb:
    Magic : a92b4efc
    Version : 00.90.00
    UUID : f4eea5d5:1959d933:c4cd1425:c6c88f28
    Creation Time : Thu Jul 28 08:31:13 2011
    Raid Level : raid5
    Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
    Array Size : 16777088 (16.00 GiB 17.18 GB)
    Raid Devices : 3
    Total Devices : 3
    Preferred Minor : 0
    Update Time : Sat Jul 30 08:45:47 2011
    State : clean
    Internal Bitmap : present
    Active Devices : 3
    Working Devices : 3
    Failed Devices : 0
    Spare Devices : 0
    Checksum : dfee75c0 - correct
    Events : 0.66
    Layout : left-symmetric
    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
     mdadm --examine --scan。如果/etc/mdadm.conf文件聲明了DEVICE字段,將掃描該字段列出的設備。如果沒有聲明,將掃描所有設備。
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28
    ARRAY /dev/md1 level=raid5 num-devices=3 UUID=cdaf2fef:dfe7b741:2fb91a6c:772f21a6
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a
     mdadm --examine --brief /dev/sdj列出具體設備所屬於陣列的信息。
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a

--sparc2.2

  • 功能:對於linux內核版本為2.2下創建的RAID,通過該參數修正陣列的superblock信息
  • 舉例:mdadm -E --sparc2.2 /dev/md0
  • 備注:如果陣列是通過2.2內核加上RAID patch的形式建立的,那樣superblock建立的不正確,至少與2.4及以后的內核不兼容。可以通過--examine --spare2.2,在顯示信息之前修正它。也可以通過--assemble --update=sparc2.2,重裝它。

--examine-bitmap(-X)

  • 功能:顯示bitmap信息。
  • 舉例:mdadm -X /dev/sdx or mdadm -X /root/bitmap.file
  • 備注:備注:mdadm -X /dev/sdh顯示內容
    Filename : /dev/sdh
    Magic : 6d746962
    Version : 4
    UUID : 85086dde:4b2d35db:8e186060:0589add1
    Events : 0
    Events Cleared : 0
    State : OK
    Chunksize : 32 KB
    Daemon : 5s flush period
    Write Mode : Normal
    Sync Size : 8388544 (8.00 GiB 8.59 GB)
    Bitmap : 262142 bits (chunks), 262142 dirty (100.0%)

--run(-R)

  • 功能:陣列中某一部分設備包含其他陣列superblock信息時,該陣列可能是inactive狀態,或需要用戶確認后才能啟動,使用該參數可以直接將陣列設為active狀態。
  • 舉例:
     mdadm --CR /dev/md0 -l5 -n3 /dev/[b-d] -x1 /dev/sde --bitmap=internal --force
     mdadm -R /dev/md0

--stop(-S)

  • 功能:停止陣列。被停止的陣列需要重新組裝后才能使用。
  • 舉例:mdadm --stop /dev/md0

--readonly(-o)

  • 功能:將active陣列變成只讀。
  • 舉例:mdadm --readonly /dev/md0
  • 備注:通過cat /proc/mdstate文件可以查看到陣列的這個變化。如果正在進行重構過程中,陣列變成了只讀,那陣列將不能夠繼續進行重構。不可以重復的對同一設備進行只讀設置。

--readwrite(-w)

  • 功能:將只讀陳列變成可讀寫。
  • 舉例:mdadm --readwrite /dev/md0
  • 備注:陣列默認是可讀寫。不可以重復的對同一設備進行可讀寫設置。

--zero-superblock

  • 功能:將包含合法md信息的superblock區域置為零。
  • 舉例:mdadm --zero-superblock /dev/sdj
  • 備注:停止陣列后,若需要清理磁盤上的陣列信息,需要執行該操作。

--test(-t)

  • 功能:與--detail一起使用,獲取陣列的狀態。
  • 舉例:mdadm --detail --test /dev/md0; echo $?
  • 備注:--detail參數單獨使用時,只有在獲取一些設備的有用信息失敗情況時,才返回非0。而與--test一起使用,echo $?的結果如下:
     0:陣列處於active狀態。
     1:陣列存於degrade和重構狀態。
     2:陣列處於disabled狀態。
     4:獲取設備信息時,存在錯誤。

-W, --wait

  • 功能:它將等待resync, recovery, or reshape完成,然后返回。
  • 舉例:mdadm -W /dev/md0
  • 備注:如果md設備沒有進行resync, recovery, or reshape,該命令將直接返回。echo $?結果為1。如果mdadm等待md設備完成resync, recovery, or reshape后,命令執行結束,echo $?為0。

監控模式(--monitor)

指定監控對象:

對於命令mdadm --monitor options... devices...,如果給出了devices,則僅僅監控指定的devices。反之,監控所有配置文件(/etc/mdadm.conf)中的devices。如果指定了--scan,則/proc/mdstate里面列出的設備也被監控。

輸出監控事件:

監控的結果就是產生事件。事件被傳遞給指定的程序或者發送給指定的E-mail,則事件報告給stdout。具體如何指定事件的輸出見下節詳述。當傳遞事件給程序時,程序立刻運行。傳遞給程序2-3個參數。第一個是事件的名稱,第二個是產生事件的md設備名稱,如果存在,第三個參數是關聯設備的名稱。

被監控事件類型:

DeviceDisappeared:對mdadm配置monitor錯誤時,會產生該事件。例如:對於一個已經配置了監控進程的md設備,再次給它配置監控進程,后配置的監控進程將產生該事件。對於--mail參數配置錯誤的參數,如配置兩個以上郵箱,之間以空格隔開。可以配置成功,但會報該事件。

RebuildStarted:md設備開始重建。

RebuildNN:md設備的重建進度到達某些值時產生監控事件。如進度值為20、40、60和80時,產生相應監控事件。

RebuildFinished:md設備重建完成。

Fail:md設備上面一個磁盤狀態為faulty。

FailSpare:熱備盤代替faulty盤失敗。

SpareActive:熱備盤代替faulty盤成功,並且Spare盤狀態最終變為active(非spare)狀態時,產生監控事件。

NewArray:/etc/mdadm.conf也/proc/mdstat兩個文件對比,mdadm.conf文件中不存在的md設備,即被報告該事件。

DegradedArray:檢查到存在降級的md設備。

MoveSpare:在使用全局熱備時,熱備盤從一個md設備移動到另一個md設備。

SparesMissing:/etc/mdadm.conf文件,某個md設備指定了spares參數(熱備盤個數),而monitor發現md設備的熱備盤個數少於指定個數時,產生該事件。

TestMessage:與--test參數配合,當運行monitor命令時,相應的md設備產生該事件。

所有事件都可以觸發程序運行,但僅有Fail、FailSpare、DegradedArray、SparesMissing 和TestMessage事件可以通過mail發送。

可監控級別:

監控md設備狀態的變化。該參數對raid1、4、5、6、10和multipath盤陣有作用。對於raid0和linear,由於它們無相關監控事件不需要監控。

監控設置全局熱備:

除了能夠報告事件外,對於處於相同spare-group的陣列,如果其中一個陣列的某個磁盤損害且不存在熱備盤,而另外陣列存在熱備盤,monitor進程可以把熱備盤移動到這個陣列上面來。及多個陣列可以共有一個熱備盤。配置文件格式如下:
DEVICE /dev/sd*
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=a7e27ec9:3389e70a:2a2d9651:abbe4ad6 spare-group=group1
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8f427b1d:d86e2313:7f5d9f04:310f9e63 spare-group=group1
對於上面md0和md1,配置了spare-group都是group1,當監控開啟后,md1若掉盤了,監控發現該事件后,會自動將md0中的熱備頂到md1中,供其使用。

--mail(-m)

  • 功能:指定郵件地址
  • 舉例:madam –monitor –mail=xxx@csdn.net /dev/md0
  • 備注:首先要保證sendmail服務啟動,同時,通過mail命令可以發送郵件成功。可以配置多個郵箱,以逗號隔開。

-program(-p), --alert

  • 功能:當事件被發現時,觸發指定的程序運行。
  • 舉例:mdadm --monitor --program=/root/pc3x.sh /dev/md0 &
  • 備注:程序可以為shell腳本,通過$1,$2,$3來獲取相應的參數。

-y, --syslog

  • 功能:事件通過syslog報告。
  • 舉例:mdadm --monitor --syslog /dev/md0 &
  • 備注:message被打印到/var/log/message文件里面

--delay(-d)

  • 功能:查看設備的延遲時間。默認是60s
  • 舉例:mdadm --monitor –mail=xxx@csdn.net --program=/root/pc3x.sh --delay=300 /dev/md0 &

--daemonise(-f)

  • 功能:mdadm將以后台demon形式來運行。
  • 舉例:mdadm --monitor --syslog /dev/md0 -f
  • 備注:demon的ID號將被打印到屏幕上面。可以配合--pid-file參數使用,將ID號打印到--pid-file參數指定的文件中。

--pid-file(-i)

  • 功能:當mdadm以demon模式運行時,把進程ID寫入到指定的文件中。
  • 舉例:mdadm --monitor --syslog --pig-file=/root/pc3x.pid /dev/md0 -f
  • 備注:注意,該參數必須和-f參數一起使用。如果不使用—pid-file參數,進程號將被打印到屏幕上,指定該參數后,進程號被寫入到指定的文件中。

--oneshot(-1)

  • 功能:立刻檢查一次盤陣,會檢查到NewArray、DegradedArray 、SparesMissing事件。
  • 舉例:mdadm --monitor --oneshot --scan --program=/root/pc3x.sh
  • 備注:該參數不能與-f參數一起使用。雖然與-f參數一起使用不會報錯,但是demon根本不會啟動起來。與—scan參數配合使用,效果更加。在配置cron一起使用,效果更上一層。

--test(-t)

  • 功能:當啟動mdadm的時候,給每個md設備發送一條TestMessage事件。
  • 舉例:mdadm --monitor --test --syslog /dev/md0 -f
  • 備注:當--test配合--scan使用時,它會給/etc/mdadm.conf文件里面的每個md設備發送TestMessage事件。如果mdadm --monitor命令指定設備,它會給每個設備發送TestMessage事件。

--config(-c)

  • 功能:指定特定的配置文件,通過配置文件指定郵件地址和程序。不使用該參數,默認文件為/etc/mdadm.conf。
  • 舉例:mdadm --monitor --scan --config=文件 --oneshot
  • 備注:如果指定其他配置文件,則/etc/mdadm.conf文件將失效。

--scan(-s)

  • 功能:監控/proc/mdsate文件中列出的所有設備。
  • 舉例:mdadm --monitor --scan --program=/root/pc3x.sh -f
  • 備注:當使用--scan參數時,--program或者—mail,兩個參數必須指定一個。同時,mdadm --monitor命令行不需要特別說明某個設備。

非特定模式參數

--help(-h)

  • 功能:顯示幫助信息,后面跟上選項名稱,將顯示該選項方式下所有選項幫助信息。
  • 舉例:mdadm --help; mdadm --help --add; mdadm --create --help

--help-options

  • 功能:顯示一些幫助信息。跟--help大同小異。
  • 舉例:mdadm --help-options

--version(-V)

  • 功能:打印mdadm版本
  • 舉例:mdadm --version

--verbose(-v)

  • 功能:對於正在發生的,顯示詳細信息。
  • 舉例:mdadm -D -v -s
  • 備注:該參數可以使用2遍,顯示額外信息。目前可以應用在--detail --scan 和 --examine --scan。

--quiet(-q)

  • 功能:避免打印完全的信息。
  • 備注:這種模式下,mdadm除非是非常重要的信息,否則不會打印任何信息。

--brief(-b)

  • 功能:顯示簡短信息。比--verbose少。
  • 舉例:mdadm -D /dev/md0 --brief
  • 備注:可以與--detail或--examine一起使用。當與--verbose一起使用時,打印--verbose與--brief中間狀態信息。

--force(-f)

  • 功能:不同模式下面有不同意思,具體詳見各個模式。仔細小心使用這個參數。

--config(-c)

  • 功能:指定配置文件。
  • 備注:默認配置文件為/etc/mdadm.conf,如果這個文件不存在,將是/etc/mdadm/mdadm.conf。如果值是none,mdadm會將配置文件看成空文件。如果值是partitions,mdadm將讀取/proc/partitions以獲取所有設備。
    mdadm --examine --brief --scan --config=partitions

--scan(-s)

  • 功能:掃描配置文件或者/proc/mdstate文件,去獲取信息。
  • 備注:從/proc/mdstate文件中獲取一些/etc/mdadm.conf文件中沒有的信息。如:成員盤。唯一例外就是misc和monitor模式下,使用—detail或者—stop,mdadm將從/proc/mdstate文件中獲取所有陣列。如mdadm --stop --scan將停止所有的md設備。

mdadm.conf

配置文件作用:

/etc/mdadm.conf作為默認的配置文件,主要作用是方便跟蹤軟RAID的配置,尤其是可以配置監視和事件上報選項。在這里我們主要說明配置文件在組裝RAID時的作用。更多mdadm.conf使用可參見man mdadm.conf。

舉例:

  • 配置磁盤設備文件名:echo DEVICE /dev/sd[b-i] > /etc/mdadm.conf
  • 配置軟RAID信息:mdadm --detail --scan >> /etc/mdadm.conf
  • 利用配置文件組裝軟RAID:mdadm -A --scan
  • 當RAID無法組裝時(如缺少成員盤,或讀寫造成superblock數據過期),強制組裝軟RAID:mdadm -A --scan --force

組裝中的幾點說明:

  • --scan參數只能根據掃描配置文件中配置的RAID,沒有配置在配置文件中的RAID不能組裝起來。
  • DEVICE中配置的是組裝RAID時,所有要掃描的磁盤,如RAID中的成員盤沒有配置到DEVICE項中,則該磁盤無法組裝到RAID中。

需要加--force才能使RAID active的情況:

  • 對於有冗余且無熱備的RAID,停止后,又掉了一塊盤,組裝時不加--force,RAID組裝起來為inactive狀態,mdadm -D 查不到RAID信息,僅/proc/mdstat中可看到簡要信息。對於先掉盤,后停止的RAID,不需要--force也可以組裝成功。
  • 對於有冗余且無熱備,RAID中所有成員盤雖然在系統中,但配置文件的DEVICE的配置缺少一個成員盤,則組裝時,可以理解為缺少一塊成員盤。因此組裝結果同1中相同。
  • 重構狀態的RAID,重啟后,不指定--force無法組裝成功。

無法將RAID組裝成active的情況:

對於上節說到的缺少一塊成員盤時,可以通過--force參數將RAID組裝起來,但對於掉了兩塊或兩塊以上的成員盤時,無法將RAID再組裝成active狀態,只能組裝成一個inactive狀態的RAID。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM