system rescue cdでraid6を作ってリカバリなどを試してみる
過去にはこんなこともしていた。mdadm RAID1復旧の試験 - Bouldering & Com.
- system rescue cd起動
- sshで接続
- SystemRescueCd 緊急起動、ファイル救出などに使えるSystemRescueCdを使う。 - 綾小路龍之介の素人思考
- 仮想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