そういや Linux の LVM や RAID ってどうなってるんだっけ、と思って調べてたところ、イマドキの Linux は RAID1/RAID5 ならメンバのデバイスの数をオンラインで(= RAID を停止させずに)変更する(これを reshape と言う)ことができるようですね。特に個人ユースなら HDD を少しずつ買い足して容量を増やしていく、ということをやりたくなるので、RAID でこの機能が使えると非常にうれしいところです。

というわけで実験。

[root@linuxraidtest ~]# mdadm --create /dev/md0 --level 5 --raid-devices 3 /dev/sd[abc]1
mdadm: array /dev/md0 started.
[root@linuxraidtest ~]# mkfs.ext3 -q /dev/md0
[root@linuxraidtest ~]# mount /dev/md0 /mnt

では書き込みながら reshape してみましょう。

[root@linuxraidtest ~]# dd if=/dev/zero of=/mnt/fill.dat bs=1MiB &
[1] 2068
[root@linuxraidtest ~]# mdadm --grow /dev/md0 --raid-devices 4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
      2088192 blocks super 0.91 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
      [=>...................]  reshape =  5.7% (61380/1044096) finish=18.2min speed=896K/sec
      
unused devices: <none>
[root@linuxraidtest ~]# fg
dd if=/dev/zero of=/mnt/fill.dat bs=1MiB

ものすごーく遅くなりますが、それ以外はごく普通に動いてしまいます。

さて、md(4) や mdadm(8) の man ページを読むと、reshape 中にクラッシュしても再起動時に reshape を再開してしかもデータは保存されるみたいなことを書いてあるので、reshape 中に degrade させて電プチ、とかいう意地悪なことをやってみましょう。

まず、データが保存されてるかどうかのチェック用に、/dev/urandom からファイルを作って、それを /dev/md0 に書いておきます。

[root@linuxraidtest ~]# dd if=/dev/urandom of=check.dat bs=1MiB count=3000
3000+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 634.43 seconds, 5.0 MB/s
[root@linuxraidtest ~]# dd if=check.dat of=/dev/md0 bs=1MiB
3000+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 279.607 seconds, 11.3 MB/s

んで reshape 開始。

[root@linuxraidtest ~]# mdadm --manage /dev/md0 --add /dev/sde1
mdadm: added /dev/sde1
[root@linuxraidtest ~]# mdadm --grow /dev/md0 --raid-devices 5
mdadm: Need to backup 768K of critical section..
mdadm: ... critical section passed.
[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[4] sdd1[3] sdc1[2] sdb1[1] sda1[0]
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/5] [UUUUU]
      [>....................]  reshape =  2.6% (28608/1044096) finish=7.0min speed=2384K/sec
      
unused devices: <none>
[root@linuxraidtest ~]# mdadm --manage /dev/md0 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0

あれ、degrade させたらディスクアクセスが止まった…

[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>

むむむ?reshaping が中断された?

とりあえず見なかったことにして(おい)電プチ… & 再起動

[root@linuxraidtest ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[4] sdd1[3] sdc1[2] sdb1[1]
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]
      [====>................]  reshape = 22.2% (233284/1044096) finish=5.3min speed=2507K/sec
      
unused devices: <none>

ちゃんと reshape も再開しているようです。で、完了してから中身をチェックすると、

[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, 411.267 seconds, 7.6 MB/s
0

データは保存されている模様。

Trackback

2 comments untill now

  1. [Linux] RAID5 の reshape (その2)…

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

  2. […] しらべてみると、reshape中に再起動とかさせても平気らしいです。 こちらで実験してました。 いやー、mdadmよくできてる。 Posted By: ゆ。 Last Edit: 06 11月 2011 @ 06:03 PM Email • Permalink […]

Add your comment now