Xenのディスクイメージファイルを拡張してみた
Xenのディスクイメージファイルを拡張してみました。]]Ubuntu Japan[[ にXenのディスクイメージの拡張方法が書いてあったので試してみたのですが、なかなかうまくいきませんでした。
# cd /etc/xen/images # mv sarge-root.img sarge-root.img.old # dd if=/dev/zero of=zero-1gb.img bs=1024k count=1024 # cat sarge-root.img.old zero-1gb.img > sarge-root.img # e2fsck -fv sarge-root.img # resize2fs sarge-root.img # e2fsck -fv sarge-root.img # xm create /etc/xen/sarge -c
上記の手順だと少なくともOSがLinuxでLVMでインストールした場合はうまくいきません。とりあえず色々調べてみて、一応できるようになったので備忘録として残しておきます。
手順はこんな感じ
作業はすべてrootでおこなっています。
- DomainUを停止
- ddやcatでディスクイメージのサイズを大きくする
- losetupでXenイメージファイルをループバックデバイスで制御できるようにする
- fdiskで区画を変更する
- 使ったループバックデバイスを削除する
- DomainUを起動
- pvresizeでFree領域を拡張する
- lvresizeでlvを拡張
- resize2fsでスライス拡張
DomainUを停止
適当に停止してください。
$ xm destroy test001
ディスクイメージのサイズを大きくする
通常の場合。ここでは3GB増やしてみる。
$ mv test001.img test001.img.bak $ dd if=/dev/zero bs=1M count=0 seek=3072 of=./zerofile.img $ cat test001.img.bak zerofile.img > test001.img
スパースファイルの場合(ここ参考)
$ cp -p --sparse=auto test001.img test001.img.bak # sparse-fileを維持してコピー $ ls -ls test001.img 1081764 -rwxr-xr-x 1 root root 2147483649 Apr 16 03:16 test001.img $ ruby -e 'File.open("test001.img","a").truncate(5<<30)' $ ls -ls test001.img 1081764 -rwxr-xr-x 1 root root 5368709120 Apr 16 03:45 test001.img
losetupでXenイメージファイルをループバックデバイスで制御
空きloopbackデバイスを調べてループバックデバイスを設定します。
$ losetup -f /dev/loop0 $ losetup /dev/loop0 ./test001.img $ losetup -a /dev/loop0: [fd00]:19367365 (./test001.img) $ fdisk -lu /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System /dev/loop0p1 * 63 208844 104391 83 Linux /dev/loop0p2 208845 4192964 1992060 8e Linux LVM
fdiskで区画を変更する
fdiskで対象のスライスをいったん削除してシリンダサイズを再設定します。
$ fdisk /dev/loop0 Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (14-652, default 14): Using default value 14 Last cylinder or +size or +sizeM or +sizeK (14-652, default 652): Using default value 652 Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/loop0p1 * 1 13 104391 83 Linux /dev/loop0p2 14 652 5132767+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
使ったループバックデバイスを削除する
マナーとしてちゃんと後処理をする。
$ losetup -d /dev/loop0
DomainUを起動
$ xm create test001 -c
pvresizeでFree領域を拡張する
最初のpvscanでは "0 free" だが、pvresizeのpvscanでは "3.00 GB free" になっていることを確認。
$ pvscan PV /dev/xvda2 VG VolGroup00 lvm2 [1.88 GB / 0 free] Total: 1 [1.88 GB] / in use: 1 [1.88 GB] / in no VG: 0 [0 ] $ pvresize /dev/xvda2 Physical volume "/dev/xvda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized $ pvscan PV /dev/xvda2 VG VolGroup00 lvm2 [4.88 GB / 3.00 GB free] Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0 ]
lvresizeでlvを拡張
$ lvscan ACTIVE '/dev/VolGroup00/LogVol00' [1.47 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [416.00 MB] inherit $ lvdisplay /dev/VolGroup00/LogVol00 --- Logical volume --- LV Name /dev/VolGroup00/LogVol00 VG Name VolGroup00 LV UUID oeAdv9-Cml8-04Ja-uZDM-3cvt-ZwIn-KXzEAM LV Write Access read/write LV Status available # open 1 LV Size 1.47 GB Current LE 47 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 $ lvresize -L +3G /dev/VolGroup00/LogVol00 Extending logical volume LogVol00 to 4.47 GB Logical volume LogVol00 successfully resized
resize2fsでスライス拡張
resize2fsでスライスを拡張します。LV Sizeは 先ほどは 1.47GBだったのが 4.47GBになっていることを確認。
$ resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 1171456 (4k) blocks. The filesystem on /dev/VolGroup00/LogVol00 is now 1171456 blocks long. $ lvdisplay /dev/VolGroup00/LogVol00 | grep "LV Size" LV Size 4.47 GB $ df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 4.4G 901M 3.3G 22% / /dev/xvda1 99M 13M 81M 14% /boot tmpfs 151M 0 151M 0% /dev/shm
参考
Thanks!
- http://old.ubuntulinux.jp/wiki/HowToUseXen/
- http://d.hatena.ne.jp/gunshot/20080604/p1
- https://www.palmtb.net/wiki/?cmd=view&p=%A5%C7%A5%A3%A5%B9%A5%AF%A5%A4%A5%E1%A1%BC%A5%B8%A4%CE%B3%C8%C4%A5&key=Xen
- http://sokohakato.wordpress.com/linux/centos/xenimgmount/
- https://lumiere.atobe.com/blog/?item=lvm-xen-lvm
- http://sugi.nemui.org/diary/20060113.html#p03