真正删除 Vagrant 机器的所有痕迹

真正删除 Vagrant 机器的所有痕迹

如何删除 Vagrant box 的所有痕迹而不必手动进入文件系统?

我正在使用 Packer 创建自定义框,构建和销毁大量测试用例。完成测试用例后,我运行

vagrant destroy

vagrant help将此命令描述为

停止并删除 vagrant machine 的所有痕迹

一切似乎都很好。但是,当我在全新安装后创建一个新框时,我注意到当天的消息显示虚拟机是在几天前创建的。原来框也存储在 中.vagrant.d\boxes。Vagrant 正在使用这些框,而不是 Packer 创建的框,或者说是除了这些框之外,这些框位于完全不同的位置。

vagrant 文档vagrant destroy建议使用vagrant box remove

.vagrant.d\boxes现在,目录中仍有一个框。使用时vagrant box remove需要一个“名称”。

如果我跑vagrant box list,它会说

尚未安装任何盒子!使用vagrant box add以添加一些。

显然 Vagrant 不知道这个其他框。但如果我运行vagrant global-status,我会得到如下输出

id       name    provider   state    directory
-------------------------------------------------------------------------
47d1c7c  default virtualbox poweroff C:/some/path

因此,流浪者看到一些框。尝试使用vagrant box remove,无论是“name”还是“id”引用都不起作用:

C:\some\path>vagrant box remove default
The box you requested to be removed could not be found. No
boxes named 'default' could be found.

C:\some\path>vagrant box remove 47d1c7c
The box you requested to be removed could not be found. No
boxes named '47d1c7c' could be found.

当然,我可以只需手动删除框即可.vagrant.d\boxes

似乎我对 Vagrant 中“box”、“destroy”、“remove”以及几乎所有涉及这里的术语的理解都是不正确的。我无法理解这一切。有一个 Vagrant VM 目录包含一个 box,但还有 Packer 创建的 box,还有另一个 box .vagrant.d\boxesdestroy一个 box 会删除一些痕迹,但不是全部。该list命令可以看到一些 box,但看不到其他 box。这一切看起来非常不一致。

如果重要的话,我正在 Windows 7 主机上创建 CentOS 7 客户机。

答案1

Vagrant 创建一个与下载的盒子相关的内部虚拟机。

要从虚拟机和盒子中删除所有数据,我建议移除盒子并销毁虚拟机。

要列出框,请执行以下命令:

vagrant box list

要删除一个框,请执行以下命令:

vagrant box remove box/name

销毁虚拟机

vagrant destroy vm-name

您删除了所有数据。

答案2

@Loren Ipsum 我使用 VagrantFile 备份了整个目录,所以我删除了整个目录。#vagrant global-status --prune从此列表中删除所有内容。删除.vagrant.d\boxes

C:\tools\Cmder
λ vagrant global-status --prune
id       name   provider state  directory
--------------------------------------------------------------------
There are no active Vagrant environments on this computer! Or,
you haven't destroyed and recreated Vagrant environments that were
started with an older version of Vagrant.

C:\tools\Cmder
λ vagrant box list
centos/7                (hyperv, 1905.1)
debian/buster64         (virtualbox, 10.0.0)
debian/contrib-buster64 (virtualbox, 10.1.0)
debian/jessie64         (virtualbox, 8.11.1)
ubuntu/trusty64         (virtualbox, 20190514.0.0)
ubuntu/xenial64         (virtualbox, 20200204.0.0)

即使执行下面的脚本,一些框仍然显示在 vagrant box 列表中:

流浪箱清单

C:\Users\Marlon\OneDrive (master -> origin)
λ vagrant box list | cut -f 1 -d ' ' | xargs -L 1 vagrant box remove -f
You requested to remove the box 'centos/7'. This box has
multiple providers. You must explicitly select a single
provider to remove with `--provider`.

Available providers: hyperv, virtualbox
You requested to remove the box 'centos/7'. This box has
multiple providers. You must explicitly select a single
provider to remove with `--provider`.

Available providers: hyperv, virtualbox
Removing box 'debian/buster64' (v10.0.0) with provider 'virtualbox'...
Removing box 'debian/contrib-buster64' (v10.1.0) with provider 'virtualbox'...
Removing box 'debian/jessie64' (v8.11.1) with provider 'virtualbox'...
Removing box 'ubuntu/trusty64' (v20190514.0.0) with provider 'virtualbox'...
Removing box 'ubuntu/xenial64' (v20200204.0.0) with provider 'virtualbox'...

C:\Users\Marlon\OneDrive (master -> origin)
λ vagrant box list
centos/7 (hyperv, 1905.1)
centos/7 (virtualbox, 1905.1)

说实话,我不知道为什么有些框仍然显示在上面(同一提供商)。我手动执行了:

C:\Users\Marlon\OneDrive (master -> origin)
λ vagrant box remove centos/7 --provider=virtualbox --force
Removing box 'centos/7' (v1905.1) with provider 'virtualbox'...

C:\Users\Marlon\OneDrive (master -> origin)
λ vagrant box remove centos/7 --provider=hyperv --force
Removing box 'centos/7' (v1905.1) with provider 'hyperv'...

C:\Users\Marlon\OneDrive (master -> origin)
λ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.

我以这种方式删除了所有盒子,尝试了几个不使用文件系统的命令,但不幸的是,这似乎是办法......

答案3

根据我使用 vagrant 的经验,我建议:

  1. 在销毁机器之前不要在 Vagrantfile 中更改虚拟机的参数

  2. 如果发生了这种情况 - 您需要添加需要销毁的机器的信息(虚拟机名称),并通过 CMD 安全销毁它:

    vagrant destroy vmname|id
    

注意:您实际上不需要使用盒子进行任何操作来重新设置虚拟机。

答案4

对我来说,在 Windows 10 上,我删除了上面提到的主要项目后,就直接删除了 Virtual Box 中的映像。这大约占了 6GB。

相关内容