【问题标题】:Vagrant VM not saving any changes; creates new VM upon every `halt/suspend + up` (Windows Vagrant, VirtualBox, RailsDevBox)Vagrant VM 不保存任何更改;在每次“暂停/挂起+启动”时创建新的虚拟机(Windows Vagrant、VirtualBox、RailsDevBox)
【发布时间】:2014-08-25 16:14:28
【问题描述】:

我正在尝试在 Windows 机器上使用 Virtual Box + Vagrant + Rails Dev Box。我可以运行vagrant upvagrant ssh 进入虚拟机,但我所做的任何更改都没有保存,例如安装导轨。每次我haltVagrant 重新开始,就好像我第一次加载它一样。该过程经历了制作第一个vagrant up的所有步骤。

然而,我注意到我对 Vagrantfile(同步文件夹位置)所做的一项更改仍然存在。另外,如果我使用vagrant reload,更改似乎会持续存在。所以看起来问题只有在我使用vagrant haltvagrant suspend 后跟vagrant up 时才会发生。但我并不认为vagrant halt(尤其不是vagrant suspend)应该破坏虚拟机。

当我打开 VirtualBox Manager 时,我可以看到一堆已创建的 rails-dev-box VM 实例。

我在 Vagrant Github issues 站点中发现了一个类似这样的问题,但老实说,讨论完全超出了我的想象,即使该线程已关闭,我也无法理解解决方案。

如果有人知道是什么原因并可以用“新手”的术语来解释,或者如果我的问题太不透明,可以引导我完成接下来的调试步骤,我将不胜感激!

编辑 写出来并仔细考虑之后,我意识到问题实际上并不是“没有保存更改”。它们正在被保存...但我只是在运行vagrant up 时被带到一个全新的虚拟机。

【问题讨论】:

    标签: ruby-on-rails linux virtual-machine vagrant virtualbox


    【解决方案1】:

    您是否尝试过vagrant resume 而不是vagrant up

    【讨论】:

    • 我认为vagrant resume 仅在您之前使用过vagrant suspend 时才有效。我想这个问题的“解决方法”是永远不要使用vagrant halt + vagrant up,而是始终使用vagrant suspend + vagrant resume。不过,这并不能真正解决问题。 vagrant up 不应该每次都创建一个新的虚拟机。
    • vagrant up 确实根据文档创建了一个新虚拟机。 “此命令根据您的 Vagrantfile 创建和配置客户机。” docs.vagrantup.com/v2/cli/up.html
    【解决方案2】:

    我也遇到了同样的问题,有几个可能的解决方案。

    Vagrant 用来跟踪默认 VM 的文件是 .vagrant/machines/default/virtualbox/id。 (该文件的内容将是 VM 的 UUID,可以在 VirtualBox.xml 文件中找到。)如果那里引用的 VM 有任何问题,那么 Vagrant 显然只是删除该文件并告诉您重新开始.

    一个GitHub issue 报告了同样的问题,在这种情况下,VM 在 VirtualBox 中处于“无效状态”。该问题已通过删除损坏的保存状态得到解决。

    这可能是您遇到的问题,尽管不是我的问题。 如果我知道为什么会出现这个问题,我会更新这个答案。

    编辑:我从 VirtualBox Manager 手动启动了我的 vagrant VM(尽管我无法将它用于开发,因为共享文件夹不是由 Vagrant 设置的)。我没有发现任何重大问题,所以我将其关闭。接下来我手动替换了id 文件,如上所述。我又做了vagrant up,它奏效了。请注意,为了防止它被重新配置,您还需要在同一文件夹中重新创建 action_provision 文件。我的内容是:1.5:<uuid>,其中<uuid>是机器的UUID。 (我不确定 1.5 是什么意思..)我已经多次完成了 vagrant suspendvagrant halt(每个后面跟着 vagrant up),并且 没有任何进一步的问题。我仍然不知道是什么导致了这个问题。如果我有任何其他问题,或者找出发生这种情况的原因,我会再次在这里报告。

    编辑 2: 我终于找到了问题所在。首先,为了帮助追踪事情,我做了VAGRANT_LOG=debug vagrant status。这产生了很多输出,但是当我仔细研究它时,我发现了特别感兴趣的一行:VBoxManage.exe: error: could not find a registered machine with uuid <uuid>。然后我做了一些手动调试,发现VBoxManage.exe list vms返回空白。事实证明,VirtualBox 丢失了我的.VirtualBox 文件夹,因为我在 Cygwin 中完成了所有这些工作。再调试一番,发现VirtualBox要找的环境变量是HOME。我在.bashrc 中将它设置为我的Windows 主目录(/cygdrive/c/Users/<me>),它解决了这个问题,这一次更持久。

    TL;DR:

    1. 打开 VirtualBox GUI 并确保没有与您的 VM 相关的错误。
    2. 如果您在 Cygwin 中,请确保将 HOME 设置为正确的值。
    3. 否则,将 VAGRANT_LOG=debug 添加到任何 Vagrant 命令以进一步调试。

    【讨论】:

    • 感谢一百万!无论如何,从我的角度来看,这似乎是正确的答案。我的 VM-ID 必须已更改。不知道我是如何直接在 VirtualBox GUI 中摆弄它的……
    【解决方案3】:

    首先,将虚拟机的状态设置为您想要的位置,即所有已安装和配置的东西。

    在 VM 运行时,执行 vagrant global-status 获取框的“id”,然后执行 vagrant package {id} 将其打包到本地 package.box 文件中。

    vagrant box add package.box --name {whatever-name} - 应该将您的盒子添加到可用列表中。

    然后您可以创建一个新的 Vagrantfile 或修改现有文件以使用这个新名称加载 vm。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多