Linux mdadm 筆記

2013-07-02 CentOS

mdadm 是管理 linux soft raid 的工具,可建立, 通報及監控軟體陣列及管理 spare 磁碟,雖然效能跟硬體式的比較起來略遜一籌,若沒有很追求效能的需求,我會建議用在RD的開發主機及中小型辦公室的伺服器應用上

[注意事項]

  1. 若利用CentOS/RHEL安裝光碟安裝,/boot必須位於raid1內,若沒有打算將/boot切割出來的話,那整個 /都必須設定為raid1
  2. 目前soft raid支援raid0(strip), linear, raid1(mirror), raid10, raid4, raid5, raid6, multipath, faulty
  3. 主機版bus(ses)的頻寬是否充裕。例如若要製作 RAID 的磁碟是 IDE 介面,且兩顆硬碟都接在同一個 IDE Channel 這樣效能表現會很不好,但以現在的硬體規格來看(SATA / SAS) 就沒這問題了。SCSI 介面也可能會有 BUS 頻寬的問題
  4. Soft Raid是否支援熱插拔(HOT SWAP)? 這跟硬體有很大關係,可以參考 Linux Raid Wiki Hot Swap 一節的說明
  5. 建立好的磁碟陣列,建議在上線前,先利用 dd 測試一下 I/O 的速度


[建立Raid步驟]

  1. 檢查你的 Linux 系統是否支援 Soft Raid
    a. Linux kernel 至少 2.6 版以上
    b.檢查 /proc/mdstat ,若有表示有支援
    c.檢查是否安裝 mdadm 套件
    d. 載入 Softraid 模組
    shell># modprobe raid456
    shell># cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    unused devices : 
  2. 磁碟分割
    在處理磁碟時會有兩個常見問題:
    a. 該用分割區或整顆磁碟? mdadm 的作者建議採用整顆磁碟
    b. 該用哪種 partition type? 0xDA (non fs-data)

    更詳細的描述可以參考 partition type

  3. mdadm 的七種模式
    a. Create: 建立 array (normal creation, with per-device superblocks)

    b. Assemble: 用來重組之前建立的 Array,重組的意義是組裝,讓停掉的 Array 重新啟用
    ex:
    shell># mdadm –assemble /dev/md0 /dev/sda1 /dev/sda2 /dev/sda3

    or

    shell># mdadm –assemble –scan

    c. Follow or Monitor: 監控磁碟並做出適當的反應,此功能此能用於 raid 1,4,5,6,10,因為raid0, liner 沒有 spare, missing, failed drivers等狀態,所以無法監控

    d. Build: Build an array that doesn’t have per-device superblocks. For these sorts of arrays, mdadm cannot differentiate between initial creation and subsequent assembly of an array. It also cannot perform any checks that appropriate devices have been requested. Because of this, the Build mode should only be used together with a complete understanding of what you are doing.

    e. Grow: 用來縮小或加大 RAID, 請餐考 Growing 說明

    f. Manage: 管理 RAID 元件, 例如增加 spare 或更換已經顯示為 faulty 的磁碟

    g. Misc: 其餘的管理功能, 例如刪除舊有的 superblocks

  4. 建立 Array
    各種 Level 的磁碟陣列建立方式請參考 Raid Setup (文件包含許多磁碟校調的資訊),除 Liner, Raid0 外,在 construct 階段時,是可以進行格式化及掛載、寫入等動作,只是I/O效能會變慢。當然、在沒有完成 construction 是無容錯功能的。

    ex. create raid 5
    shell># mdadm –create –verbose –level 5 –name=Raid5-vol0 –raid-devices=3 /dev/sda1 /dev/sda2 /dev/sda3 –spare-devices=1 /dev/sda4 –metadata 1.2 –chunk=64

    # 執行後可以透過 mdstat 來確認建立結果
    shell># cat /proc/mdstat

  5. 儲存 Raid 設定, 並設定監控,若有問題會發信通知
    shell># mdadm –detail –scan >> /etc/mdadm.conf
    shell># echo “MAILADDR your@email.address” >> /etc/mdadm.conf
    shell># service mdmonitor start

    #記得確認郵件伺服器已經啟動, 若無請啟動他
    shell># service postfix start

    通知訊息如下

    This is an automatically generated mail message from mdadm
    running on lab

    A Fail event had been detected on md device /dev/md0.

    It could be related to component device /dev/hda5.

    Faithfully yours, etc.

    P.S. The /proc/mdstat file currently contains the following:

    Personalities : [raid6] [raid5] [raid4]
    md0 : active raid5 hda7[4] hda5[0](F) hda3[3] hda6[1]
    20016768 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/2] [_UU]
    [>………………..] recovery = 0.0% (0/10008384) finish=1668.0min speed=0K/sec

    unused devices:

    監控也能直接帶你需要的程式,設定方式請參考 man mdadm.conf

  6. 最後就直接格式化及掛載建立好的 md 裝置
    shell># mkfs.ext3 /dev/md0
    shell># mount -t ext3 /dev/md0 /raid


[檢測 RAID 狀態]
方法1. # cat /proc/mdstat
方法2. # mdadm –detail /dev/md0

[更換故障的硬碟]

  1. 模擬故障硬碟(適用於raid1及raid456, 不適用於Liner, Raid0) #mdadm –manage -f /dev/md0 /dev/sdb1

    or

    若系統支援熱插拔,可以直接拔掉硬碟,若不支援熱插拔,請關機處理

  2. 檢查raid狀態,確認哪顆硬碟故障(若有設定spare磁碟時,會自動 Rebuild )
    a. shell># cat /proc/mdstat

    or

    查看紀錄檔會看到類似訊息
    shell># tail -20 /var/log/messages
    raid5: Disk failure on hda7, disabling device. Operation continuing on 2 devices

    b. 關機並更換故障硬碟

    c. 開機後於新硬碟建立分割區及設定 system id為0xDA(例如新硬碟是sdd)

    d. 將故障的分割由md0卸下
    shell># mdadm –manage /dev/md0 –remove /dev/sdb1

    e.將新的硬碟分割加入到md0(加入之後會立刻rebuild)
    shell># mdadm –manage /dev/md0 –add /dev/sdd1

    若有 spare 且已經 rebuild 完成,新硬碟會變成 spare

    f.檢查raid狀態
    shell># cat /proc/mdstat

[增加 spare 到已經建立的 Array]

  1. 假設我要將 /dev/hda3 加到 md0 作為 spare用
    shell># mdadm –manage –add /dev/md0 /dev/hda3
    shell># cat /proc/mdstat
    Personalities : [raid1]
    md0 : active raid1 hda3[2](S) hda5[0] hda6[1]
    10008384 blocks [2/2] [UU]
[設定共用 spare disk]
  1. 若我的主機上有好幾個 Array,但想把 spare disk 指派給這些 Array 共用,若任何一組陣列出現問題時,這個共用的 spare disk 會自動 rebuild。

    請參考 man mdadm.conf 的 spare-group 說明,只要把 Array 設定為同一個 spare-group 群組就可以囉,若你還沒建立好 mdadm.conf 可以利用以下指令來建立
    shell># mdadm –detail –scan >> /etc/mdadm.conf

    新增 spare-group 參數到 mdadm.conf
    shell># vim /etc/mdadm.conf
    ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=c4a0a77c:fb65eac3:d57f5561:b2e66d6e spare-group=SpareGP1
    ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 spares=1 UUID=6096b78d:894b05be:7e4ec998:917543c3 spare-group=SpareGP1

  2. 重新啟動 mdmoniror 服務
    shell># service mdmonitor restart
  3. 接下來你可以模擬測試 fail 的狀況,看看原本沒有 spare disk 的陣列是否會自動 rebuild
[刪除 Array]
  1. shell># mdadm –stop /dev/md0
  2. shell># mdadm –remove /dev/md0
  3. shell># mdadm –zero-superblock /dev/sd[abc]1
  4. 移除 mdadm.conf 裡的 Array 設定

[問題紀錄]

  1. 若 create array 時出現 /dev/sdb1 appears to contain an ext2fs file system 的處理方式:

    可用 dd 清掉資料
    shell># dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

參考文獻
man mdadm.conf
mdadm

Linux Raid Wiki

轉貼至http://beakdoosan.blogspot.tw/

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱