system rescue cdでraid6を作ってリカバリなどを試してみる
過去にはこんなこともしていた。mdadm RAID1復旧の試験 - Bouldering & Com.
- system rescue cd起動
- sshで接続
- 仮想hddマウント
- ループバック・デバイス作成
- raid6作成
- failed deviceが2つでも動くか
- failed markしたのを戻せるか
- 大きいディスクに交換して大きくできるか
結論としては問題なかった。
下準備
ループバック・デバイス作成 複数作るので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