2008/04/12

Linux Software RAIDのオンライン容量拡張の検証

LinuxのソフトウェアRAIDにおけるオンライン容量拡張(Online Capacity Expansion)機能を検証した結果、ちゃんとディスクをアレイに追加してアレイの容量を拡張できるという結果が得られた。なお、RAID6のオンライン領域拡張もドキュメント(mdadmのmanページ)によるとできるとのこと。ホントにきちんと動いてるのかはまじめに確認してないけど、ディスク買いそろえて本番機で動かしてみようという気にさせられる結果だ。以前、面白半分に128MBのディスクでRAID5だ!とかアホをやったときに「ディスクが小さすぎ」なんて叱られた記憶があったので不安を抱いていたのだが、今回試した512MBではきちんと動いたので、どうも128MBから512MBまでの間に下限が存在するのではなかろうか(結局mdadmのソースコードを読んでたら眠くなったので挫折orz)。

下準備とかアレイの作成とか。

まずは準備。Debian etchのインストール時には特に準備は不要。ただしetchのmdadm 2.5.6ではオンライン領域拡張はできないので、etch-backportsリポジトリのmdadm 2.6以降を使う点に注意する(今回の検証で使ったのははmdadm 2.6.2)。

次にディスクを用意して"linux raid autodetect"パーティションを用意する。この辺の手順は煩雑なので省略して、できあがったパーティションがこんな感じ。実機でアレイを作る場合はbadblocksを使ってディスクの検査をしてからパーティションを作るとよいだろうと思う。

raid-test:~# fdisk -l /dev/sd[bcd]

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          63      506016   fd  Linux raid autodetect

Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1          63      506016   fd  Linux raid autodetect

Disk /dev/sdd: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1          63      506016   fd  Linux raid autodetect
ここまで終わったらおもむろにドライブ3台でRAID5のアレイを作成する。
raid-test:~# mdadm -C /dev/md0 -n 3 -l 5 /dev/sd[bcd]1
mdadm: array /dev/md0 started.

作成が終わると同時にアレイの初期化が始まる。初期化中でもアレイを読んだり書いたりは可能だが、初期化が終わるまで待ってみたところ、512MB×3のアレイの初期化にかかる時間は俺の実験用PCだと1分くらいだった。実際のディスクを数本まとめてに数百GB~数TBのアレイを作るとなると初期化に何時間もかかることがザラなのだが、処理の進捗を知りたい場合は/proc/mdstatをcatとかで見ると、下記のような進捗状況レポートを取り出せる。なお、初期化なのにrecoveryとか言っているのは気にしなくてもOK。

raid-test:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      1011840 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
      [===>.................]  recovery = 16.9% (86528/505920) finish=0.7min speed=9614K/sec
      
unused devices: <none>

で、初期化が終わると/proc/mdstatの内容からは進捗状況の表示が消えてこんな風になる。

raid-test:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[2] sdc1[1] sdb1[0]
      1011840 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>

アレイを作成できたらファイルシステムを作ってマウントする。実機だとファイルシステムにはXFSを使うのだが、今回は趣向を変えてext3にしてみた。

raid-test:~# mkfs -t ext3 /dev/md0
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
126720 inodes, 252960 blocks
12648 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=260046848
8 block groups
32768 blocks per group, 32768 fragments per group
15840 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376

Writing inode tables: 0/81/82/83/84/85/86/87/8done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
raid-test:~# mount -t ext3 /dev/md0 /mnt

dfでファイルシステムの状況を確認。512MB×3のRAID5なので、サイズが1GBあればOK。

raid-test:~# df /mnt
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0                995896     17652    927652   2% /mnt

ディスクを追加してみる。

ひとまずアレイはできたので、マウントしたままディスクを追加する。アレイに追加するディスク/dev/sdeには例によって"linux raid autodetect"パーティション/dev/sde1を作成してあるので、これを「スペアドライブ」としてまずは追加する。

raid-test:~# mdadm --manage /dev/md0 --add /dev/sde1
mdadm: added /dev/sde1

とりあえずこの段階でアレイの状態を確認して、スペアドライブが追加されていることを確認する。

raid-test:~# mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Fri Apr 11 03:59:55 2008
     Raid Level : raid5
     Array Size : 1011840 (988.29 MiB 1036.12 MB)
  Used Dev Size : 505920 (494.15 MiB 518.06 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri Apr 11 04:01:51 2008
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 8ba153b2:84ff80b7:58459788:93258e8a (local to host raid-test)
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

       3       8       65        -      spare   /dev/sde1

いよいよ今回のクライマックス。現時点でアレイは使用中3台+スペア1台という構成になっているので4台すべて使うように構成を変える。

raid-test:~# mdadm --grow /dev/md0 -n 4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.

アレイの同期処理がバックグラウンドで走るので(待たなくてもいいけど)しばらく待ってみる。進捗状況は上述した初期化の際とまったく同じ方法で確認できる。

同期が終わったら、アレイの情報を確認してホントに容量が拡張されているか確認する。

raid-test:~# mdadm -D /dev/md0
/dev/md0:
        Version : 00.91.03
  Creation Time : Fri Apr 11 03:59:55 2008
     Raid Level : raid5
     Array Size : 1011840 (988.29 MiB 1036.12 MB)
  Used Dev Size : 505920 (494.15 MiB 518.06 MB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri Apr 11 04:06:22 2008
          State : clean, recovering
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

 Reshape Status : 18% complete
  Delta Devices : 1, (3->4)

           UUID : 8ba153b2:84ff80b7:58459788:93258e8a (local to host raid-test)
         Events : 0.94

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

ファイルシステムの拡張

これでめでたくアレイにディスクが1台追加されたわけだが、アレイの上に乗っているファイルシステムには何の変化も無いので、使える容量は実際には1ビットも増えていない。それじゃ何の意味もないので、引き続きファイルシステムも(これまたオンラインで)拡張しておく。ext2/3ファイルシステムの場合はresize2fsというコマンドを使えば良い(xfsだとxfs_growfs)。ただしこれらはベースシステムには含まれないので、別途e2fsprogsとかxfsprogsというパッケージをインストールしておく必要がある。

raid-test:~# resize2fs /dev/md0
resize2fs 1.40-WIP (14-Nov-2006)
Filesystem at /dev/md0 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/md0 to 379440 (4k) blocks.
The filesystem on /dev/md0 is now 379440 blocks long.
そのまま再びdfで/mntの空き容量を確認。
raid-test:~# df /mnt/mnt
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0               1493856     17896   1401916   2% /mnt

これでめでたくオンラインで容量拡張が完了。検証も済んだしディスク買おう。技術的な問題はだいたい片付いたけど、最大の問題である「予算」が……。

参考文献

本エントリを作成するにあたって、下記のブログエントリを参照した。

0 件のコメント: