我有一台 Ubuntu 14.04 主机,上面有一些由 Virtualbox 5.1 驱动的 win 客户机。其中一些非常大,需要大约 1-2-3 分钟才能进入保存状态。
据我所知,至少有两个 init.d 脚本用于控制关机时的虚拟机状态。可能还有其他脚本吗?
1. init.d/vboxdrv
它在 /etc/rc0.d 文件夹中的优先级为 80
这个需要关闭和关闭用户中的变量/etc/default/virtualbox并运行VBoxManage controlvm savestate对于每个正在运行的虚拟机。
此脚本停止所有虚拟机后退出,它像“单线程”任务一样工作。
2. init.d/vboxautostart-服务
/etc/rc0.d 文件夹中的优先级为 65
这个需要完全配置的自动启动服务,例如/etc/vobx/.start和/etc/vobx/.stop和其他工作人员……
此脚本立即退出,因为它仅运行带有特定参数的自动启动服务守护进程:
stop() {
[ -z "$VBOXAUTOSTART_DB" ] && exit 0
[ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0
PARAMS="--stop --config $VBOXAUTOSTART_CONFIG"
# prevent inheriting this setting to VBoxSVC
unset VBOX_RELEASE_LOG_DEST
for user in `ls $VBOXAUTOSTART_DB/*.stop`
do
start_daemon `basename $user | sed -ne "s/\(.*\).stop/\1/p"` $binary $PARAMS > /dev/null 2>&1
done
return $RETVAL
}
所以...当我们在独立模式下使用该脚本时,我的意思是
sudo service vboxautostart-service stop
或者
sudo service vboxdrv stop
一切都很完美。第一个显示10%...20%...30%...每个虚拟机的进度条。第二个立即退出,但运行的二进制文件完成其工作并停止虚拟机...
但!当主机关闭时(shutdown -h now),我认为 upstart 会终止该脚本(超时?),因为 /etc/init/ 中没有为上述脚本提供任何作业配置。据我所知,默认 upstart 终止延迟为 5 秒。
我在 Google 上搜索了很多帖子和创建脚本的方法,这些方法看起来与 vbox 包中已经存在的脚本大相径庭,所以我觉得使用这些建议没有任何意义。它们都没有提供在主机重启/关闭时保证用户正常关机(或保存状态)的方法。
当然,我知道我可以手动关闭所有虚拟机,然后再关闭主机...但这对我来说并不方便...此外,关机可以由 apcupsd 启动,否则...依我之见,虚拟机控制应该由打算这样做的人来完成)))
如果有人能帮我解答下一个问题,我将不胜感激:
- 我们是否应该调整 upstart 配置,以便为 vbox init 脚本提供足够的时间关闭(保存状态等)?或者其他解决方案?
- 应该优先使用哪个脚本来关闭虚拟机?autostart-service 还是 vboxdrv?我说得对,这只取决于单用户主机环境中的喜好吗?