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を使ってディスクの検査をしてからパーティションを作るとよいだろうと思う。
ここまで終わったらおもむろにドライブ3台でRAID5のアレイを作成する。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
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というパッケージをインストールしておく必要がある。
そのまま再びdfで/mntの空き容量を確認。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.
raid-test:~# df /mnt/mnt Filesystem 1K-blocks Used Available Use% Mounted on /dev/md0 1493856 17896 1401916 2% /mnt
これでめでたくオンラインで容量拡張が完了。検証も済んだしディスク買おう。技術的な問題はだいたい片付いたけど、最大の問題である「予算」が……。
参考文献
本エントリを作成するにあたって、下記のブログエントリを参照した。
0 件のコメント:
コメントを投稿