前の記事で、reshape 中に degrade するとディスクアクセスが止まったという話を書きましたが、その状態で md デバイスにアクセスするとどうなるかを調べてみました。

(途中略)
[root@linuxraidtest ~]# mdadm --manage /dev/md0 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
[root@linuxraidtest ~]# dd if=/dev/md0 of=/dev/null bs=1MiB count=3000

固まりました…

しょうがないので殺してみようと、

[root@linuxraidtest ~]# ps ax | grep dd
 2383 pts/0    D+     0:04 dd if /dev/md0 of /dev/null bs 1MiB count 3000
 2405 pts/3    R+     0:00 grep dd
[root@linuxraidtest ~]# kill 2383
[root@linuxraidtest ~]# kill -QUIT 2383
[root@linuxraidtest ~]# kill -ABRT 2383
[root@linuxraidtest ~]# kill -KILL 2383

としましたが何もおきません。当然 md デバイスも busy なので再起動以外方法がなくなります。

[root@linuxraidtest ~]# mdadm --stop /dev/md0
mdadm: fail to stop array /dev/md0: Device or resource busy
[root@linuxraidtest ~]# reboot

つまり reshape 中に degrade したアレイにはアクセスしてはいけない、ということになります。

さて、前回は電プチしましたが、さすがに実運用でそんなことをするわけにはいかないので、普通にアレイを再起動してみると、

[root@linuxraidtest ~]# mdadm --manage /dev/md0 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[4] sdd1[3] sdc1[2] sdb1[1] sda1[5](F)
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]

unused devices: <none>
[root@linuxraidtest ~]# mdadm --manage /dev/md0 --stop
mdadm: stopped /dev/md0
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
unused devices: 
[root@linuxraidtest ~]# mdadm --assemble /dev/md0 --config partitions --super-minor 0
mdadm: /dev/md0 has been started with 4 drives (out of 5).
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb1[1] sde1[4] sdd1[3] sdc1[2]
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]
      [===>.................]  reshape = 15.0% (157824/1044096) finish=3.1min speed=4704K/sec

unused devices: <none>
[root@linuxraidtest ~]#
(しばらく待つ)
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb1[1] sde1[4] sdd1[3] sdc1[2]
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]

unused devices: <none>
[root@linuxraidtest ~]# dd if=/dev/md0 bs=1MiB count=3000 | cmp /dev/stdin check.dat; echo $?
3000+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 386.504 seconds, 8.1 MB/s
0

というわけでデータは保存されています。(当たり前か)

結局のところ、reshape 中に degrade する可能性を考えると、上に載っているファイルシステムを unmount する必要があるため、オンラインで reshape できるメリットはあまり無い、ということになります。マシンがハングアップして reshape が中断されても次の起動時に正しく再開されるのが利点でしょうか。

昔々、まだ Fedora Core ではなく RedHat Linux だった頃、reshape 中にブレーカーが落ちてデータを吹っ飛ばした経験があります。その頃に比べればずっと良くなってるんですけどね。

Trackback

no comment untill now

Add your comment now