mdadm raid6のリカバリ、サイズ拡張などを試してみる

system rescue cdでraid6を作ってリカバリなどを試してみる

過去にはこんなこともしていた。mdadm RAID1復旧の試験 - Bouldering & Com.

  1. system rescue cd起動
  2. sshで接続
    1. SystemRescueCd 緊急起動、ファイル救出などに使えるSystemRescueCdを使う。 - 綾小路龍之介の素人思考
  3. 仮想hddマウント
  4. ループバック・デバイス作成
  5. raid6作成
  6. failed deviceが2つでも動くか
  7. failed markしたのを戻せるか
  8. 大きいディスクに交換して大きくできるか

結論としては問題なかった。

下準備

ループバック・デバイス作成 複数作るのでfunctionにしておく

function mk_loop () {
  dd if=/dev/zero of=10x${2}-${1} bs=10MB count=$2
  losetup /dev/loop${1} 10x${2}-${1}
}
for i in `seq 4` ; do mk_loop $i 5 ; done;
for i in `seq 5 8` ; do mk_loop $i 10 ; done;
% mdadm --create /dev/md0 --level=raid6 --raid-devices=4 /dev/loop[1-4]
% mkfs.xfs /dev/md0
% mkdir /mnt/raid
% mount /dev/md0 /mnt/raid
% echo hello raid6 > /mnt/raid/message
% cat  /mnt/raid/message
hello raid6
% mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Sep 23 14:52:48 2017
     Raid Level : raid6
     Array Size : 95232 (93.00 MiB 97.52 MB)
  Used Dev Size : 47616 (46.50 MiB 48.76 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Sat Sep 23 14:55:41 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : sysresccd:0  (local to host sysresccd)
           UUID : 88fc17be:fd8579d1:da3fc972:6379f879
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       7        1        0      active sync   /dev/loop1
       1       7        2        1      active sync   /dev/loop2
       2       7        3        2      active sync   /dev/loop3
       3       7        4        3      active sync   /dev/loop4

下準備ができた。

間違えてfailed markしちゃったらリカバリできる?

ふたつfailさせる。

% mdadm --manage /dev/md0 --fail /dev/loop3
% mdadm --manage /dev/md0 --fail /dev/loop4
% mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Sep 23 14:52:48 2017
     Raid Level : raid6
     Array Size : 95232 (93.00 MiB 97.52 MB)
  Used Dev Size : 47616 (46.50 MiB 48.76 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Sat Sep 23 14:57:37 2017
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : sysresccd:0  (local to host sysresccd)
           UUID : 88fc17be:fd8579d1:da3fc972:6379f879
         Events : 21

    Number   Major   Minor   RaidDevice State
       0       7        1        0      active sync   /dev/loop1
       1       7        2        1      active sync   /dev/loop2
       -       0        0        2      removed
       -       0        0        3      removed

       2       7        3        -      faulty   /dev/loop3
       3       7        4        -      faulty   /dev/loop4

戻せる?

% mdadm --manage /dev/md0 --re-add /dev/loop3
mdadm: re-add /dev/loop3 to md0 succeed

re-addで戻る。よかった。 addはダメ。

% mdadm --manage /dev/md0 --add /dev/loop4
mdadm: Cannot open /dev/loop4: Device or resource busy

removeしてからre-addできる?

% mdadm --manage /dev/md0 --remove /dev/loop4
mdadm: hot removed /dev/loop4 from /dev/md0

re-addを試す

% mdadm --manage /dev/md0 --re-add /dev/loop4
mdadm: --re-add for /dev/loop4 to /dev/md0 is not possible

できない。いちど外すとダメなようだ。

% mdadm --manage /dev/md0 --add /dev/loop4
mdadm: added /dev/loop4

いちど外すとaddしないといけなくて再構築が走ってしまう。

disk - How do I unmark a “failed” md device? - Ask Ubuntu

大きいディスクに交換していく

loop[3-4]から2つずつ交換していこう。

% mdadm --manage /dev/md0 --fail /dev/loop3
mdadm: set /dev/loop3 faulty in /dev/md0
% mdadm --manage /dev/md0 --fail /dev/loop4
mdadm: set /dev/loop4 faulty in /dev/md0
% mdadm --manage /dev/md0 --remove /dev/loop3
mdadm: hot removed /dev/loop3 from /dev/md0
% mdadm --manage /dev/md0 --remove /dev/loop4
mdadm: hot removed /dev/loop4 from /dev/md0

100MBのloop[5-6]を追加する

% mdadm --manage /dev/md0 --add /dev/loop5
mdadm: added /dev/loop5
% mdadm --manage /dev/md0 --add /dev/loop6
mdadm: added /dev/loop6

同様にloop[1-2]も外す

% mdadm --manage /dev/md0 --fail /dev/loop1
mdadm: set /dev/loop1 faulty in /dev/md0
% mdadm --manage /dev/md0 --fail /dev/loop2
mdadm: set /dev/loop2 faulty in /dev/md0
% mdadm --manage /dev/md0 --remove /dev/loop1
mdadm: hot removed /dev/loop1 from /dev/md0
% mdadm --manage /dev/md0 --remove /dev/loop2
mdadm: hot removed /dev/loop2 from /dev/md0

loop[7-8]を追加

% mdadm --manage /dev/md0 --add /dev/loop7
mdadm: added /dev/loop7
% mdadm --manage /dev/md0 --add /dev/loop8
mdadm: added /dev/loop8

これで全部100MBのディスクになった。

% mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Sep 23 14:52:48 2017
     Raid Level : raid6
     Array Size : 95232 (93.00 MiB 97.52 MB)
  Used Dev Size : 47616 (46.50 MiB 48.76 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Sat Sep 23 15:20:12 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : sysresccd:0  (local to host sysresccd)
           UUID : 88fc17be:fd8579d1:da3fc972:6379f879
         Events : 170

    Number   Major   Minor   RaidDevice State
       6       7        7        0      active sync   /dev/loop7
       7       7        8        1      active sync   /dev/loop8
       4       7        5        2      active sync   /dev/loop5
       5       7        6        3      active sync   /dev/loop6

growで大きくしよう

% mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 96256K
% mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Sep 23 14:52:48 2017
     Raid Level : raid6
     Array Size : 192512 (188.00 MiB 197.13 MB)
  Used Dev Size : 96256 (94.00 MiB 98.57 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Sat Sep 23 15:22:17 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : sysresccd:0  (local to host sysresccd)
           UUID : 88fc17be:fd8579d1:da3fc972:6379f879
         Events : 181

    Number   Major   Minor   RaidDevice State
       6       7        7        0      active sync   /dev/loop7
       7       7        8        1      active sync   /dev/loop8
       4       7        5        2      active sync   /dev/loop5
       5       7        6        3      active sync   /dev/loop6

大きくなった。ので、ファイルシステムを拡張する。

% xfs_growfs /dev/md0
meta-data=/dev/md0               isize=512    agcount=4, agsize=6016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0 rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=23808, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=624, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 23808 to 48128
% df -h /dev/md0
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        186M  5.3M  181M   3% /mnt/raid

上手にできました。

実験は以上で終了。なにかあっても対応できそう。

後始末

ループバック・デバイス削除

losetup -d /dev/loop0
rm loop1.img