host 側に LVM でパーティションを切って、そこに KVM なりなんなりの仮想マシン (guest) をインストールした場合、あとから guest のディスクを増やすのにはこんなふうにすればいいかな、というメモ。
まず host 側で LVM パーティションを作成し、そこに guest をインストール。
# lvcreate --size 4G --name guestvm /dev/VolGroupVM # virt-install --connect qemu:///system --name guestvm --ram 512 --file /dev/VolGroupVM/test # (略
guest のインストールでは LVM を使用せず、普通にパーティションを切る。3つ目のプライマリパーティションを / にマウントして、全部ひとまとめ。
- /dev/vda1 => /boot
- /dev/vda2 => (swap)
- /dev/vda3 => /
guest インストール後の df と fdisk の結果はこんな感じになる。
[guest]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda3 3454588 2224760 1051508 68% / /dev/vda1 101086 17867 78000 19% /boot tmpfs 255296 0 255296 0% /dev/shm [guest]# fdisk /dev/vda Command (m for help): p Disk /dev/vda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 78 522112+ 82 Linux swap / Solaris /dev/vda3 79 522 3566430 83 Linux
さて、拡大したくなったら一旦 guest を落として、host 側で LVM パーティションを拡大。
[host]# lvextend --size +10G /dev/VolGroupVM/guestvm
guest を起動をするとディスク自体は大きくなってるけどパーティションテーブルがそのままなので、
[guest]# fdisk /dev/vda Command (m for help): p Disk /dev/vda: 15.0 GB, 15032385536 bytes 255 heads, 63 sectors/track, 1827 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 78 522112+ 82 Linux swap / Solaris /dev/vda3 79 522 3566430 83 Linux
一旦末尾のパーティション (primary 3) を削除して、新しくディスクいっぱいのパーティションを作成。
Command (m for help): d Partition number (1-4): 3 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (79-1827, default 79): Using default value 79 Last cylinder or +size or +sizeM or +sizeK (79-1827, default 1827): Using default value 1827 Command (m for help): p Disk /dev/vda: 15.0 GB, 15032385536 bytes 255 heads, 63 sectors/track, 1827 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 78 522112+ 82 Linux swap / Solaris /dev/vda3 79 1827 14048842+ 83 Linux
"w" でパーティションテーブルを書き込んで fdisk 終了。新しいパーティションテーブルを認識させるために guest を reboot。
起動したら resize2fs でファイルシステムを拡大。
[guest]# resize2fs /dev/vda3 resize2fs 1.39 (29-May-2006) Filesystem at /dev/vda3 is mounted on /; on-line resizing required Performing an on-line resize of /dev/vda3 to 3512210 (4k) blocks. The filesystem on /dev/vda3 is now 3512210 blocks long. [guest]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda3 13617624 2226496 10693996 18% / /dev/vda1 101086 17867 78000 19% /boot tmpfs 255296 0 255296 0% /dev/shm
無事、拡大に成功。guest の再起動は必要だけども、LVM での拡大と fdisk でのパーティション切り直しは一瞬で終わるし resize2fs はオンラインでできるので、ダウンタイムはかなり短くてすむ。
もちろん guest 側でも LVM を使っても問題ないのだけど (vgextend / lvextend / resize2fs すればいい)、LVM だと何かあった時 (起動しないけどファイルをサルベージしたいとか)、host からマウントするのが面倒そうだったので、こんな感じにしてみた。