Vagrant destroyをせずにVagrantのプロジェクトディレクトリを削除した場合に仮想マシンを削除する方法

投稿者: | 2017年12月5日

はじめに

Vagrant destroyをせずにVagrantのプロジェクトディレクトリ(Vagrantfileがあるディレクトリ)を削除した場合、Vagrantから制御できなくなります。この状態から残った仮想マシンと、Vagrantがプロジェクトディレクトリ外で管理している情報を削除する方法をまとめます。

検証環境

  • macOS Sierra 10.12.6
  • Vagrant 2.0.1
  • VirtualBox 5.2.2

Vagrantのプロジェクトディレクトリ削除直後の状態

仮想マシンはVirtualBoxで実行可能な状態で残っていてVBoxManage list vmsコマンドにより確認できます。

Vagrantのインデックス情報も残っていてvagrant global-statusコマンドにより確認できます。このインデックス情報は~/.vagrant.d/data/machine-index/indexファイルに格納されています。

完全に削除するには、この二つの情報を削除します。

仮想マシンを削除する方法

VBoxManage unregistervm <uuid|vmname> --deleteコマンドを実行します。VBoxManage unregistervmコマンドは仮想マシンの登録を解除するコマンドですが、 --deleteオプションを付けた場合は関連するファイルも削除します。

ringo@stupiddog  $ VBoxManage list vms
"centos_default_1512144838296_7974" {10e2abf9-90e6-46fe-acf9-943029ff62da}

ringo@stupiddog  $ VBoxManage unregistervm centos_default_1512144838296_7974 --delete
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

削除されるファイルは、VirtualBoxのマニュアルの「8.6. VBoxManage registervm / unregistervm」に記載されています。

https://www.virtualbox.org/manual/ch08.htmlより抜粋(google翻訳)

  1. マシンによって使用され、他のマシンと共有されていない差分ファイルを含むすべてのハードディスクイメージファイル。
  2. マシンが作成した保存済みの状態ファイル(存在する場合はマシンが「保存済み」状態で、オンラインスナップショットごとに1つ)。
  3. マシンのXMLファイルとそのバックアップ
  4. マシンログファイル(存在する場合)。
  5. 上記のすべてを削除した後で空の場合は、マシンディレクトリ。

Vagrantのインデックス情報を削除する方法

vagrant global-status --pruneコマンドを実行します。--pruneオプションを指定すると無効なインデックス情報が削除されます。

https://www.vagrantup.com/docs/cli/global-status.html