CLOVER🍀

That was when it all began.

Vagrant+VirtualBoxで、ディスクを拡張する

これは、なにをしたくて書いたもの?

Vagrant仮想マシンイメージを使っている時に、時々ディスクサイズを拡張したい時があるのですが。

こういう時はvagrant-disksize-pluginを使うことが多いのかなと思うのですが、更新がずいぶん止まっています。

GitHub - sprotheroe/vagrant-disksize: Vagrant plugin to resize disks in VirtualBox

どうしたものでしょう?と思っていたら、Vagrant本体の方に実験的機能が入っていたのでこちらを試してみる
ことにしました。

Vagrant Disks

Vagrant Disksは、仮想マシンにディスクを追加したり、プライマリディスクのサイズを変更したりできる機能です。

Warning! This feature is experimental and may break or change in between releases. Use at your own risk. It currently is not officially supported.

Vagrant Disks | Vagrant by HashiCorp

実験的機能なので、使う場合は自己責任ということで。

基本的な使い方は、こちら。

Vagrant Disk Usage | Vagrant by HashiCorp

有効化するには、環境変数VAGRANT_EXPERIMENTALdisksを指定する必要があります。

Vagrant Experimental Feature Flag | Vagrant by HashiCorp

この機能が利用できるProviderは限られていて、現在はVirtuallBox、Hyper-VVMwareのようですね。

最初に追加されたのは、2.2.8の時のようです。

virtualbox/disks: Add ability to manage virtual disks for guests

vagrant/CHANGELOG.md at v2.2.8 · hashicorp/vagrant · GitHub

VirtualBoxの場合、5.x以上である必要があります。

Vagrant currently only supports VirtualBox version 5.x and newer for configuring and attaching disks.

Disks for VirtualBox Provider | Vagrant by HashiCorp

特にVirtualBox固有の設定はありません。

Usage - Disks VirtualBox Provider | Vagrant by HashiCorp

今回は、プライマリディスクサイズの変更をしてみたいと思います。

環境

今回の環境は、こちら。

$ vagrant version
Installed Version: 2.2.18
Latest Version: 2.2.18
 
You're running an up-to-date version of Vagrant!


$ VBoxManage --version
6.0.24r139119

Providerは、VirtualBoxです。

OSは、Ubuntu Linux 18.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:    18.04
Codename:   bionic


$ uname -srvmpio
Linux 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Vagrant Disksを使ってプライマリディスクを拡張してみる

では、Vagrant Disksを使ってみます。こちらを見ながら、プライマリディスクの拡張を行います。

Vagrant Disk Usage | Vagrant by HashiCorp

対象としては、こちらのboxを使いましょう。

ubuntu/bionic64

$ vagrant init ubuntu/bionic64

まずは、Vagrant Disksを使わずに仮想マシンを起動してみます。

$ vagrant up
$ vagrant ssh

仮想マシンに入って、ディスクの構成を見てみます。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            480M     0  480M   0% /dev
tmpfs            99M  600K   98M   1% /run
/dev/sda1        39G  1.1G   38G   3% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
vagrant         457G  191G  266G  42% /vagrant
tmpfs            99M     0   99M   0% /run/user/1000

プライマリディスクは、40Gですね。

仮想マシンから出て、いったん破棄。

$ vagrant destroy -f

続いて、Vagrantfileを変更してconfig.vm.diskを追加します。プライマリディスクを60Gにしてみましょう。

  config.vm.disk :disk, size: "60GB", primary: true

環境変数VAGRANT_EXPERIMENTALdisksを指定して、起動。

$ VAGRANT_EXPERIMENTAL="disks" vagrant up

すると、起動時に実験的機能を有効にしたことを表すメッセージが表示されます。

==> vagrant: You have requested to enabled the experimental flag with the following features:
==> vagrant: 
==> vagrant: Features:  disks
==> vagrant: 
==> vagrant: Please use with caution, as some of the features may not be fully
==> vagrant: functional yet.

そして、ディスクサイズのリサイズが行われていることも表示されます。

==> default: Configuring storage mediums...
    default: Disk 'vagrant_primary' needs to be resized. Resizing disk...

仮想マシンに入って、

$ vagrant ssh

ディスクを確認。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            480M     0  480M   0% /dev
tmpfs            99M  600K   98M   1% /run
/dev/sda1        59G  1.1G   58G   2% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
vagrant         457G  191G  266G  42% /vagrant
tmpfs            99M     0   99M   0% /run/user/1000

プライマリディスクが60Gになっていることが確認できました。

これは、仮想マシンを再起動してもそのままになっていて、その時には環境変数VAGRANT_EXPERIMENTAL
指定する必要はありません。

$ vagrant halt

$ vagrant up

次は、すでに存在している仮想マシンのディスクサイズを変更してみます。今は60Gですが、これを80Gにして
みましょう。

  config.vm.disk :disk, size: "80GB", primary: true

環境変数VAGRANT_EXPERIMENTALを指定して、reload

$ VAGRANT_EXPERIMENTAL="disks" vagrant reload

すると、リサイズが始まります。

==> default: Configuring storage mediums...
    default: Disk 'vagrant_primary' needs to be resized. Resizing disk...

仮想マシンに入って確認。

$ vagrant ssh

プライマリディスクが、80Gに拡張されました。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            480M     0  480M   0% /dev
tmpfs            99M  600K   98M   1% /run
/dev/sda1        78G  1.1G   77G   2% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
vagrant         457G  191G  266G  42% /vagrant
tmpfs            99M     0   99M   0% /run/user/1000

実験的機能ですが、Providerによってはこの機能を使ってもよいでしょう。

まあ、自分はふだんlibvirt Providerを使っていることの方が多いのですが…。