Posted on Fri Sep 19 11:37:55 +0900 2008 by nabeken
こんな経験はないだろうか。
LVM を使いましょう。ディスクが1台しかなくても使いましょう。最近では、ディストリビューションのインストーラーでも LVM を扱うことができるので、CentOSなどは知らぬ間に LVM になっていることもあります。
LVMは動作時に全ブロックデバイスを走査して、メタデータを探すので、ディスクの接続順などには一切影響を受けません。これが一番の利点です。
昔の作業記録から、どんなことができるのかを紹介します。手順は当時のままなので、古いです。
VG main からルートファイルシステム(LV)を作ります。VG に空きがない場合はすでに作った LV から空けます。
# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/main/root 10G 2.8G 7.3G 28% / /dev/main/home 214G 184G 30G 87% /home
もともと、 LV home は 230GB でしたが、今回ルートファイルシステムを作るにあたって、 10GB 減らすことにしました。減らす場合シングルユーザーモードで /dev/main/home を umount してからやる方ことにしました。ちなみに、増やす場合は mount 中でもできます。
# init 1 (もしくは grub で kernel option に linux single を追加して boot する) # umount /dev/main/home # resize_reiserfs -s -10G /dev/main/home # lvreduce -s -10G /dev/main/home
ここまでですでに 10GB 減りました。先にファイルシステムを縮小することに注意してください。
# lvcreate -L 10G main /dev/main/root
/dev/main/root ができあがっているはずです。あとはこの上にファイルシステムを作って mount すれば完了です。
kernel の設定に注意します。ルートファイルシステムで使っているファイルシステムはモジュールではなく、 kernel に組み込みます。LVM も組み込みます。
# cd /boot (もしくは、 kernel のある場所) # lvmcreat_initrd
で、 initrd-lvm-2.4.27.gz ができます。これを boot loader のオプションに指定するだけです。grub の場合は
# cat /boot/grun/menu.lst # Boot automatically after 30 secs. timeout 3 # By default, boot the first entry. default 0 # Gentoo Linux title Gentoo Linux (Linux-2.4.27) kernel (hd0,0)/bzImage-2.4.27 root=/dev/main/root ramdisk_size=8192 initrd (hd0,0)/initrd-lvm-2.4.27.gz
案外、簡単でした。実際には 20MB も必要ありません。最低、 grub から見える場所に kernel, initrd が置ける分だけあればいいです。
# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/main/root 10G 2.5G 7.6G 25% / /dev/main/home 214G 185G 29G 87% /home /dev/hda5 14G 3.5G 11G 25% /mnt/oldroot
今は上のような構成になっています。
# hdparm -t /dev/main/root /dev/main/root: Timing buffered disk reads: 90 MB in 3.04 seconds = 29.61 MB/sec # hdparm -t /dev/main/home /dev/main/home: Timing buffered disk reads: 134 MB in 3.00 seconds = 44.67 MB/sec
LVM で使うディスクを Software RAID 状のアレイに指定することもできます。RAID0 でディスク容量を拡張するよりも、LVMを使って拡張するほうがパーティションの柔軟性が上がるでしょう。(ただし、Linux専用になってしまうのが難点)
また、RAID1 でも同様にしてできます。いくつも RAID1 なパーティションを作るよりも楽です。(Software RAID も自動でブロックデバイスを走査してアレイを作ります)
# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty] md0 : active raid1 sdb1[1] sda1[0] 96256 blocks [2/2] [UU] md1 : active raid1 sdb2[1] sda2[0] 160738240 blocks [2/2] [UU] unused devices:# pvdisplay --- Physical volume --- PV Name /dev/md1 VG Name raid1 PV Size 153.29 GB / not usable 2.94 MB Allocatable yes PE Size (KByte) 4096 Total PE 39242 Free PE 17226 Allocated PE 22016 PV UUID bZJvLN-SEFs-hfRz-19bp-V61y-bO3b-3Jn05U # lvdisplay --- Logical volume --- LV Name /dev/raid1/home VG Name raid1 LV UUID xPvsep-5ZNI-xkMn-mgMc-Zxei-1wPi-uabY5U LV Write Access read/write LV Status available # open 2 LV Size 20.00 GB Current LE 5120 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:0 --- Logical volume --- LV Name /dev/raid1/root VG Name raid1 LV UUID EdGw3x-Dg76-mlFK-Q6UG-i5PJ-SnRw-hsSG7A LV Write Access read/write LV Status available # open 2 LV Size 30.00 GB Current LE 7680 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:1 --- Logical volume --- LV Name /dev/raid1/backup VG Name raid1 LV UUID su5jEh-7Q7x-7suK-KlXx-13j6-bafg-c2vYss LV Write Access read/write LV Status available # open 2 LV Size 36.00 GB Current LE 9216 Segments 2 Allocation inherit Read ahead sectors 0 Block device 253:2
こんな感じで RAID1 状にたくさんボリュームを作ることができます。dd で吸うこともできるので、ブロックデバイスでできることは大半がボリュームに対してもできます。
ストレージサーバとしては、RAIDを使わなくてもたくさんディスクを束ねられるのは楽だと思います。ディスク1台に障害があっても、被害はそのディスクに留めることができます。(ファイルシステム的に、そのディスク以外のものはなんとか復旧できる)
このマシンは3〜4年ほど前からこつこつと拡張してきたマシンです。ディスクの交換はそれなりに行っていますが、fstabを書き換えたことは1度もありません。途中でマシン(M/B, CPU)を交換しましたが、同様に追加作業は特に発生しませんでした。
# pvdisplay --- Physical volume --- PV Name /dev/sde1 VG Name storage PV Size 298.09 GB / not usable 26.81 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 9538 Free PE 0 Allocated PE 9538 PV UUID DqE9OL-5Eic-VAWX-JAtk-NEgg-tRXG-vUA14l --- Physical volume --- PV Name /dev/sdc1 VG Name storage PV Size 298.09 GB / not usable 26.81 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 9538 Free PE 0 Allocated PE 9538 PV UUID wwezAP-OZyu-2USB-QIry-W4Nd-KIa5-nL3f6W --- Physical volume --- PV Name /dev/sdd VG Name storage PV Size 465.76 GB / not usable 12.02 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 14904 Free PE 0 Allocated PE 14904 PV UUID 17HYjm-yKSH-ioMd-RrKR-EOR6-sLFX-spKeeW --- Physical volume --- PV Name /dev/sdf1 VG Name storage PV Size 465.76 GB / not usable 9.50 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 14904 Free PE 0 Allocated PE 14904 PV UUID 5gWUnD-lyyX-X80y-j583-dibh-2UoM-tXyas1 --- Physical volume --- PV Name /dev/sdb1 VG Name storage PV Size 465.76 GB / not usable 9.50 MB Allocatable yes PE Size (KByte) 32768 Total PE 14904 Free PE 2119 Allocated PE 12785 PV UUID m3t4K3-V87D-cTZZ-9KKy-MiNc-X3pv-kFYFN1 --- Physical volume --- PV Name /dev/sda2 VG Name main PV Size 153.29 GB / not usable 3.05 MB Allocatable yes PE Size (KByte) 4096 Total PE 39242 Free PE 29002 Allocated PE 10240 PV UUID YD0ryp-Mt0A-qM6J-k1wp-nuFO-KovJ-l4Ws4b # vgdisplay storage --- Volume group --- VG Name storage System ID yuki1073744028 Format lvm2 Metadata Areas 5 Metadata Sequence No 113 VG Access read/write VG Status resizable MAX LV 256 Cur LV 1 Open LV 1 Max PV 256 Cur PV 5 Act PV 5 VG Size 1.95 TB PE Size 32.00 MB Total PE 63788 Alloc PE / Size 61669 / 1.88 TB Free PE / Size 2119 / 66.22 GB VG UUID rY3ZfD-4U1K-H9lH-Mi33-jyd9-ZE2r-T02yOd