これは、なにをしたくて書いたもの?
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_EXPERIMENTAL
でdisks
を指定する必要があります。
Vagrant Experimental Feature Flag | Vagrant by HashiCorp
この機能が利用できるProviderは限られていて、現在はVirtuallBox、Hyper-V、VMwareのようですね。
最初に追加されたのは、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を使いましょう。
$ 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_EXPERIMENTAL
にdisks
を指定して、起動。
$ 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を使っていることの方が多いのですが…。