我有一个装有 Ubuntu 12.04 LTS 的 Vagrant box。有时在强制关机后(例如由于机器无响应),vagrant box 下次启动时会失败。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
Virtualbox 中的预览截图表明该框挂在 grub 阶段,永远等待用户输入来选择内核。
因此,每次发生这种情况时,我都会vb.gui = true
在 Vagrantfile 中进行设置,重新启动机器并选择内核进行手动启动。有趣的是,选择一次内核后,后续无头启动就可以正常工作 - 直到下一次非正常机器关闭。
我的问题是:有没有一种更优雅的方法,不需要手动干预,以防止强制关机后 vagrant box 挂在 grub 内核选择屏幕上?
答案1
首先,获取机器id
# Before v1.1
# MACHINE_ID=$(awk -F\" '{print $6}' .vagrant)
# After v1.1
MACHINE_ID=$(cat .vagrant/machines/default/virtualbox/id)
关闭虚拟机
VBoxManage controlvm ${MACHINE_ID} poweroff
然后使用 GUI 控制台启动机器
VBoxManage startvm ${MACHINE_ID}
等待它启动、登录、运行:
sudo update-grub
成功后关闭
VBoxManage controlvm ${MACHINE_ID} poweroff
此后,vagrant up 将正常启动你的虚拟机
答案2
添加到/etc/default/grub
您的盒子:
GRUB_RECORDFAIL_TIMEOUT=0
然后运行:
sudo update-grub