VagrantのVMDKファイルサイズが大きくなった時のベストな対処法を伝授します!

みなさんもvagrant使ってますよね?
とても便利なのですが、vmdk形式のボックスを使用しているので、ディスクサイズが可変でなく、増え続けるだけになります。


そもそも、vagrant自体がdisposableな開発環境を素早くセットアップするものだとはわかっているんだけれども、ゴリゴリにコードを書くエンジニアや、自社サービスを開発していて自動化されている環境でない限り、そこまで「開発環境を作っては捨てて・・・」といったことはしないと思います。

かくいう私も大抵はサーバ環境に依存しないウェブサイトを作っているので、片手で数えるほどの開発環境とVirtualHostで十分なわけです。


そうして、いろんなデータを少ないボックスに入れたり削除したりしていると、最初10GB程度だったvmdk のディスクサイズが60GBとかよくわかんないことになるわけです。最近ではSSDを使うことが多く、ディスク容量もそれほど多くはないので、知らない間にディスクが100%なって焦ります。


ググるとvmdk をクローンしてvdiに一度変換して・・・という方法はよくヒットするのですが、100%になったハードディスクにそんな余裕はありません(笑)。


そんな時は、ボックスを再作成すれば綺麗になります!
以下がその方法です。

1. ホスト側(mac側)のディスクスペースを空けます

60GBを捻出する必要はなく、ゲスト側で認識しているディスクサイズ分があればOKです。
私の場合Downloadや、Desktop、使ってないVMを削除して捻出しました。

2. ゲストOSでスペースをゼロ埋めします

$ sudo dd if=/dev/zero of=/tmp/ZERO bs=4K
$ sudo rm /tmp/ZERO
$ sudo /sbin/shutdown -h now

# 正直この作業は効いていないような気もします。おまじないと思ってください。

3. 既存VMからパッケージを作成

$ vagrant package {oldvm}

//パッケージを登録
$ vagrant box add {boxname} package.box
//登録したら必要ないので削除しておきます。ディスクの節約節約!
$ rm package.box

4. Vagrantfile を編集し新しいboxからVM作成します。

$ vagrant up {newvm}
//問題なく動作するか動作確認しましょう。

$ vagrant destroy {oldvm}
// 古いVMを削除します

おまけ: Timemachine のローカルバックアップ

diskUtility と df -h コマンドの違いが大きすぎる時は、Timemachineのローカルバックアップが
原因である可能性が高いです。
もしタイムマシンを有効にしている場合は、一度無効にして、ローカルバックアップを削除してみてください。

まとめ

上記の方法であれば、残りディスクスペースがなくとも短時間で復活させることができます。
ぜひご活用ください!