nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

Vagrant libvirt boxのディスクサイズを変更する

Vagrantは便利なんですが、ディスクイメージのサイズが固定されているので、デカイもの突っ込んで新しいイメージを作成とかするときに困ってしまいました。単にデカイのつっこむなら別のディスクをアタッチすればいいのですが、新しいイメージを作る時にはVagrant boxにはディスクイメージは2つ同梱できないので困ります。どうせqcow2のthinなので上限大きくしても特に影響なしで使いやすいですし。

今回はRHEL 7.1のイメージで、Red Hat Container Development Kitという今回のような開発とか評価用途のサポートなしのダウンロードのところにRHEL 7.1のVagrant libvirt boxがあるのでダウンロードします。ちなみにVirtualBox用のもあります。

https://access.redhat.com/downloads/content/293/ver=1/rhel---7/1.0.0/x86_64/product-downloads

ダウンロードしたboxの元サイズは500Mちょいです。.boxはfile *.boxしてみるとわかりますがtar.gzなので、展開してみます。

$ mkdir work
$ cd work
$ tar xf ../rhel-server-libvirt-7.1-0.x86_64.box
$ ls -l
total 1543500
-rwxr-xr-x. 1 nekop nekop 1580531712 Mar 12 01:25 box.img
-rw-r--r--. 1 nekop nekop         62 Mar 12 01:25 metadata.json
-rw-r--r--. 1 nekop nekop        356 Mar 12 01:25 Vagrantfile
$ file box.img 
box.img: QEMU QCOW Image (v2), 10737418240 bytes
$ cat metadata.json 
{"provider": "libvirt", "format": "qcow2", "virtual_size": 11}

中身のbox.imgは11Gのqcow2イメージです。今回はこれを20Gへ拡大します。

中身の構成を見てみましょう。

$ virt-filesystems -lh --parts --pvs --vgs --lvs --extra -a box.img
Name                     Type       VFS     Label MBR Size Parent
/dev/sda1                filesystem unknown -     -   1.0M -
/dev/sda2                filesystem ext4    -     -   200M -
/dev/VolGroup00/LogVol00 filesystem ext4    -     -   8.0G -
/dev/VolGroup00/LogVol01 filesystem swap    -     -   1.5G -
/dev/VolGroup00/LogVol00 lv         -       -     -   8.0G /dev/VolGroup00
/dev/VolGroup00/LogVol01 lv         -       -     -   1.5G /dev/VolGroup00
/dev/VolGroup00          vg         -       -     -   9.8G /dev/sda3
/dev/sda3                pv         -       -     -   9.8G -
/dev/sda1                partition  -       -     83  1.0M /dev/sda
/dev/sda2                partition  -       -     83  200M /dev/sda
/dev/sda3                partition  -       -     8e  9.8G /dev/sda

/dev/sda3がLVMのパーティションで、これを拡大すれば後はオンラインでどうにでも割り当てられますね。謎の1Mの/dev/sda1がありますが使われていませんね。

20Gのqcow2イメージを作って、virt-resize/dev/sda3をリサイズ指定します。PVも自動的にpvresizeしてくれます。

qemu-img create -f qcow2 box.img.new 20G
virt-resize --expand /dev/sda3 box.img box.img.new
mv box.img.new box.img
tar czf ../rhel-7.1-20g.box ./*

これで20Gのイメージが出来上がりました。

起動してルートパーティションを拡大してみます。

$ df
Filesystem                      1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00   8093624 1520852   6138596  20% /
devtmpfs                           498944       0    498944   0% /dev
tmpfs                              508380       0    508380   0% /dev/shm
tmpfs                              508380    6668    501712   2% /run
tmpfs                              508380       0    508380   0% /sys/fs/cgroup
/dev/vda2                          194235   96794     83105  54% /boot
$ sudo lvresize -L 12G /dev/VolGroup00/LogVol00
$ sudo resize2fs /dev/VolGroup00/LogVol00
$ df
Filesystem                      1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00  12255112 1524888  10128280  14% /
devtmpfs                           498944       0    498944   0% /dev
tmpfs                              508380       0    508380   0% /dev/shm
tmpfs                              508380    6668    501712   2% /run
tmpfs                              508380       0    508380   0% /sys/fs/cgroup
/dev/vda2                          194235   96794     83105  54% /boot