Vagrantfileに一行書くだけでVMのディスク容量を増やす方法

# はじめに
[Vagrant](https://www.vagrantup.com/) を使うとカジュアルにVMを作ったり壊したりできて便利なのだが、VMの作成元である [box image](https://atlas.hashicorp.com/boxes/search) はディスク容量が少ないケースが多く、すぐに容量不足に陥るのがネックだと感じていた。

その解決策を探している中で、**[vagrant-disksize] (https://github.com/sprotheroe/vagrant-disksize)** というプラグインを発見した。これを使えば **Vagrantfile に設定を一行書くだけでVMのディスク容量が増やせる。**

# [vagrant-disksize] (https://github.com/sprotheroe/vagrant-disksize) プラグインを使って VM のディスク容量を増やす方法
まずは [vagrant-disksize] (https://github.com/sprotheroe/vagrant-disksize) プラグインをインストールする。

```
$ vagrant plugin install vagrant-disksize
```

あとは Vagrantfile に `config.disksize.size` の設定を一行追記して、

```rb:Vagrantfile
Vagrant.configure('2') do |config|
  config.vm.box = 'ubuntu/xenial64'
  config.disksize.size = '100GB' # <- この設定を書く
end
```

`vagrant up` を実行するだけ。

```
$ vagrant up

...(snip)...
==> default: Resized disk: old 10240 MB, req 102400 MB, new 102400 MB
==> default: You may need to resize the filesystem from within the guest.
...(snip)...
```

すると、通常は **10GB** である [ubuntu/xenial64 (20170207.0.0)](https://atlas.hashicorp.com/ubuntu/boxes/xenial64/versions/20170207.0.0) のディスク容量が・・・
<img width="738" alt="ubuntu_xenial_10GB_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/cd9a7528-c68c-f589-9eae-9be716e380c4.png">

<img width="377" alt="ubuntu_xenial_10GB_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/50016ef5-c85c-a99e-257c-b9d86260d815.png">


下記の通り、**100GB** に増える。
<img width="739" alt="ubuntu_xenial_100GB_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/3f114975-5690-c709-f90e-afe6cb017fc4.png">

<img width="371" alt="ubuntu_xenial_2_100GB.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/ce2d8dc5-fe21-99b5-9e1a-fabb4191c1c6.png">


# VM作成後でもディスク容量を増やせる
一度VMを作成してからでも、Vagrantfile のディスクサイズ設定値を増やして `vagrant halt` -> `vagrant up` を実行することで、いつでも好きなタイミングでディスク容量を増やせる。

```rb:Vagrantfile
Vagrant.configure('2') do |config|
  config.vm.box = 'ubuntu/xenial64'
  config.disksize.size = '120GB' # 100GB から 120GB に変更
end
```

```
$ vagrant halt

...(snip)...

$ vagrant up

...(snip)...
==> default: Resized disk: old 102400 MB, req 122880 MB, new 122880 MB
==> default: You may need to resize the filesystem from within the guest.
...(snip)...
```

下記の通り、**120GB** に増えている。
<img width="739" alt="ubuntu_xenial_1_120GB.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/b62aa1fe-f738-8a37-3cc5-d31d4d80fea2.png">
<img width="376" alt="ubuntu_xenial_2_120GB.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/cb61285a-5884-a953-656b-4761eaec2714.png">


# 動作確認環境
ホストOS x ゲストOSの組み合わせは下記4パターンを試し、いずれも動作することを確認した。

* Vagrant: 1.9.1
* プロバイダ: VirtualBox (5.1.14)
* ホストOS:
  * MacOS Sierra (10.12.3)
  * Windows 10 Pro (64bit)
* ゲストOS (box image): 
  * ubuntu/xenial64 (20170207.0.0)
  * ubuntu/trusty64 (20170202.1.0)

# 留意点

**[README.md#Limitations](https://github.com/sprotheroe/vagrant-disksize#limitations) に記載されていること：**

* VirtualBox 以外のプロバイダでは動作しない
* box イメージによっては上手く動作しなかったり、別途ゲストOS内でパーティション設定が必要になるかも知れない
* ディスク容量は増やす方向にしか変更できない

**その他気付いたこと：**

* ディスクイメージファイルは .vmdk とかであっても .dvi に変換される
 * このとき、VirtualBoxのアプリを起動すると下記のような警告が出る
 * これは、プラグインが変換前のディスクイメージファイルを VirtualBox の管理対象から外していないため
 * しかし、ゲストOSの動作上は特に問題とならないため、自分は気にしないでいる（もし気になれば「確認」ボタンを押して該当のディスクイメージファイルを「除去」すれば良い）
<img width="483" alt="VirtualBox_Warning.png" src="https://qiita-image-store.s3.amazonaws.com/0/78077/b9aa262e-711c-25dc-4309-2a0589bf26b3.png">


# おわりに

[vagrant-disksize] (https://github.com/sprotheroe/vagrant-disksize) プラグインを使って Vagrantfile に一行書くだけでVMのディスク容量を増やす方法を紹介した。

留意点に記載の通り環境によっては上手く動作しない場合もあるかも知れないが、そうでなければお手軽にVMのディスク容量を増やせるので便利。