Vagrant 加载失败,因为 grub2 在非正常关机后等待内核选择

Mic*_*Osl 5 grub2 virtualbox vagrant

我有一个带有 Ubuntu 12.04 LTS 的 Vagrant 盒子。有时在强制关机后(例如因为机器没有响应),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...
Run Code Online (Sandbox Code Playgroud)

Virtualbox 中的预览屏幕截图表明该框挂在 grub 阶段,永远等待用户输入以选择内核。

Vagrantbox 卡在 grub 的屏幕截图

所以每次出现这种情况,我都会vb.gui = true在Vagrantfile中设置,重启机器,选择内核手动启动。有趣的是,在选择内核一次后,随后的无头启动再次正常工作 - 直到下一次不正常的机器关闭。

我的问题是:有没有更优雅的方式不需要人工干预来防止强制关机后 vagrant box 挂在 grub 内核选择界面?

Syl*_*eau 4

首先获取机器id

# Before v1.1
# MACHINE_ID=$(awk -F\" '{print $6}' .vagrant)
# After v1.1
MACHINE_ID=$(cat .vagrant/machines/default/virtualbox/id)
Run Code Online (Sandbox Code Playgroud)

关闭虚拟机电源

VBoxManage controlvm ${MACHINE_ID} poweroff
Run Code Online (Sandbox Code Playgroud)

然后使用 GUI 控制台启动机器

VBoxManage startvm ${MACHINE_ID}
Run Code Online (Sandbox Code Playgroud)

等待它启动、登录、运行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

成功后关闭

VBoxManage controlvm ${MACHINE_ID} poweroff
Run Code Online (Sandbox Code Playgroud)

之后,vagrant up 将正常启动你的虚拟机

来源


小智 1

添加到/etc/default/grub您的盒子:

GRUB_RECORDFAIL_TIMEOUT=0
Run Code Online (Sandbox Code Playgroud)

并运行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)