我的 Ubuntu12.04 中有许多虚拟机,每次关机或重启时,我都必须逐个启动它们。
我想要帮助编写脚本以便在启动时自动启动 VBox 机器。
答案1
您可以使用 VirtualBox 自动启动服务。有关如何执行此操作的优秀教程发布在“极客管理员的生活”博客。
以下步骤改编自链接的博客文章:
首先,您需要创建文件
/etc/default/virtualbox
并添加一些变量。VBOXAUTOSTART_数据库其中包含自动启动数据库目录的绝对路径和
VBOXAUTOSTART_配置其中包含自动启动配置设置的位置。该文件应类似于以下内容:# virtualbox defaults file VBOXAUTOSTART_DB=/etc/vbox VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
现在我们需要创建文件
/etc/vbox/vbox.cfg
并添加# Default policy is to deny starting a VM, the other option is "allow". default_policy = deny # Create an entry for each user allowed to run autostart myuserid = { allow = true }
笔记:如果上面的文件名
vbox.cfg
不起作用,请尝试将其命名autostart.cfg
。如果您是唯一的用户,您只需将该行添加
default_policy = allow
到文件中vbox.cfg
。将目录的权限设置为 vboxuser 组,并确保用户可以写入目录以及粘滞位。
sudo chgrp vboxusers /etc/vbox sudo chmod 1775 /etc/vbox
将每个用户添加到
vboxusers
组。sudo usermod -a -G vboxusers USERNAME
(替换
USERNAME
为用户名)
笔记:如果您已更改当前用户的组权限,请注销并重新登录以刷新权限。(信用@kR105)
想要为单个机器启用自动启动的每个用户都必须使用以下命令设置自动启动数据库目录的路径
VBoxManage setproperty autostartdbpath /etc/vbox
并为单个虚拟机启用自动启动
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
这将在目录中创建一个
myuserid.start
文件/etc/vbox
现在重新启动 vboxautostart-service 来读取更改。
sudo service vboxautostart-service restart
重新启动系统并且虚拟机应该启动
答案2
我在 vanilla LTS 上尝试此操作时也遇到了类似的不愉快事件。
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
在此版本中,密钥文件/etc/init.d/vboxautostart 服务未安装。
据我所知,所有 VitualBox 和要求都是通过 apt-get 放入的,所以我无法解释为什么没有提供“vboxautostart-service”文件。但为了解决这个问题,以下是我对 kdmurray 帖子的更新。
1)/etc/default/virtualbox 文件对我来说已经存在。因此必须添加变量:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2)必须创造/etc/vbox/自动启动.cfg正如OP所指出的。
6b) 需要获取 vboxautostart-service 脚本并使其可执行。
cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service
6c) 提醒 rc.d 控制器,但我使用 24 作为启动时间。只输入 20 也没有启动。也许它在 virtualbox 工作之前就运行了。
sudo update-rc.d vboxautostart-service defaults 24 24
然后重新启动即可正确启动虚拟机。
答案3
您可以使用vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(其中之一)。如果它们是您通过 GUI 以外的其他方式连接的服务器,请使用“headless”。
为了在启动期间的正确时间实际运行这些命令,您需要阅读有关 Upstart 的资料。
答案4
除了上面对 vboxautostart-service 的良好描述之外,您还可以执行以下操作
VBoxManage modifyvm server --autostop-type savestate
在关机时自动停止客户机。对于 Ubuntu 14.04,我必须添加一个睡眠 30到 vboxautostart-service 停止部分,以便它等待直到客户机完全保存。