Linux software raid (md)にon lineでデバイスを追加してサイズを拡大してみる
Linux Software RAID (md)の onlie resizeの続編的ですが。
このmdは紆余曲折あって(?)現在は1TB HDD 5本でRAID5(スペアなし)という構成になっています。
が、なんとなく若干手狭な感じが出てきました(debian の iso imageにBDとか入ってきた
せいか、油断するとあふれることが...)
そこで、少し前からkernelでサポートされた「mdにデバイスを追加してでかくしてみる」ことを
してみましょう。1TBを5本→1TBを6本の構成にしてみます。
最初はこんな感じ。
$ lsscsi [6:0:0:0] disk ATA WDC WD740GD-00FL 21.0 /dev/sda [8:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdb [11:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdc [13:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdd [14:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sde [16:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdf [18:0:0:0] cd/dvd Optiarc DVD RW AD-7170A 1.02 /dev/sr0
$ df /storage Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/md0 3845731848 3078934784 766797064 81% /storage $ df -h /storage Filesystem サイズ 使用 残り 使用% マウント位置 /dev/md0 3.6T 2.9T 732G 81% /storage
$ sudo mdadm --misc --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Fri Oct 17 21:15:30 2008 Raid Level : raid5 Array Size : 3907039744 (3726.04 GiB 4000.81 GB) Used Dev Size : 976759936 (931.51 GiB 1000.20 GB) Raid Devices : 5 Total Devices : 5 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Sep 22 08:58:55 2009 State : clean Active Devices : 5 Working Devices : 5 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : 7b919d4f:b9e7742c:84bd942a:d4b8378f Events : 0.19904 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1 2 8 17 2 active sync /dev/sdb1 3 8 81 3 active sync /dev/sdf1 4 8 65 4 active sync /dev/sde1
HDDはSATA/SASのエンクロージャに全部ささってますし、最近のSATAの
デバイスであれば(少なくともahciの一部、sata_sil24、sata_mvはOk)hot plugで
つなげば認識してくれるので、無造作に(物理的に)HDDをさして認識させます。
$lsscsi [6:0:0:0] disk ATA WDC WD740GD-00FL 21.0 /dev/sda [8:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdb [11:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdc [13:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdd [14:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sde [15:0:0:0] disk ATA WDC WD10EADS-00M 01.0 /dev/sdg [16:0:0:0] disk ATA WDC WD10EACS-22D 01.0 /dev/sdf
/dev/sdgが増えました。
fdisk とかでパーティションを一つだけ切って、タイプを Linux raid autodetect
(0xfd)にしときます。
$ fdisk -l /dev/sdg Disk /dev/sdg: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0xfec868df Device Boot Start End Blocks Id System /dev/sdg1 1 121601 976760001 fd Linux raid autodetect
次にmdにこのHDDを追加します。
$ sudo mdadm /dev/md0 --add /dev/sdg1 mdadm: added /dev/sdg1 $ sudo mdadm --misc --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Fri Oct 17 21:15:30 2008 Raid Level : raid5 Array Size : 3907039744 (3726.04 GiB 4000.81 GB) Used Dev Size : 976759936 (931.51 GiB 1000.20 GB) Raid Devices : 5 Total Devices : 6 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Sep 22 09:08:50 2009 State : clean Active Devices : 5 Working Devices : 6 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K UUID : 7b919d4f:b9e7742c:84bd942a:d4b8378f Events : 0.19909 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1 2 8 17 2 active sync /dev/sdb1 3 8 81 3 active sync /dev/sdf1 4 8 65 4 active sync /dev/sde1 5 8 97 - spare /dev/sdg1 $ cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdg1[5](S) sdc1[0] sde1[4] sdf1[3] sdb1[2] sdd1[1] 3907039744 blocks level 5, 64k chunk, algorithm 2 [5/5] [UUUUU] unused devices:
こんな感じでスペアとして追加されます。
でもって、RAIDデバイスの数を変更します。
変更には mdadmの --grow オプションと --raid-devicesを組み合わせて指定します。
$ sudo mdadm /dev/md0 --grow --raid-devices=6 mdadm: Need to backup 1280K of critical section.. mdadm: ... critical section passed.
ここまでは、とりあえず数秒で終了します。
で、ここからRAIDの再構成が行われますがこれがものすごく時間がかかるので
気長に待ちましょう。
$ cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdg1[5] sdc1[0] sde1[4] sdf1[3] sdb1[2] sdd1[1] 3907039744 blocks super 0.91 level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] [>....................] reshape = 0.0% (279424/976759936) finish=1951.8min speed=8337K/sec unused devices:
mdのサイズにもよると思いますが、今回のサイズだと丸一日はかかるつもりで
いないとダメです(わら
この間もmdデバイスはon lineなので、通常どおり使用できます(が、まぁ今回の構成だと
このrebuild中にHDD一本でも死ぬとアウトなわけですが(わら 基本ここにはmirrorしか
入って無いので最悪死んでも復元できるので気にしない。もちろん用途によっては、
もう少し冗長性をとりましょう)
ただし、このrebuildが終わらないと「mdとしてのサイズが以前のまま(デバイス追加
する以前のサイズのまま)」なので、以下のファイルシステムのresizeはできません。
でもって、rebuildが終わったのを確認したら、ファイルシステムをresizeします。
$ sudo resize2fs /dev/md0 resize2fs 1.41.9 (22-Aug-2009) Filesystem at /dev/md0 is mounted on /storage; on-line resizing required old desc_blocks = 233, new_desc_blocks = 292 Performing an on-line resize of /dev/md0 to 1220949920 (4k) blocks.
これも容量によると思いますが、30分くらい待つと完了。
$ df /storage Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/md0 4807165280 3089638432 1717526848 65% /storage $ df -h /storage Filesystem サイズ 使用 残り 使用% マウント位置 /dev/md0 4.5T 2.9T 1.6T 65% /storage
ほい、できました。