如何在开机时自动启动虚拟机?

如何在开机时自动启动虚拟机?

我的 Ubuntu12.04 中有许多虚拟机,每次关机或重启时,我都必须逐个启动它们。

我想要帮助编写脚本以便在启动时自动启动 VBox 机器。

答案1

您可以使用 VirtualBox 自动启动服务。有关如何执行此操作的优秀教程发布在“极客管理员的生活”博客

以下步骤改编自链接的博客文章:

  1. 首先,您需要创建文件/etc/default/virtualbox并添加一些变量。

    VBOXAUTOSTART_数据库其中包含自动启动数据库目录的绝对路径和
    VBOXAUTOSTART_配置其中包含自动启动配置设置的位置。该文件应类似于以下内容:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
    
  2. 现在我们需要创建文件/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

  3. 将目录的权限设置为 vboxuser 组,并确保用户可以写入目录以及粘滞位。

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
    
  4. 将每个用户添加到vboxusers组。

    sudo usermod -a -G vboxusers USERNAME
    

    (替换USERNAME为用户名)

笔记如果您已更改当前用户的组权限,请注销并重新登录以刷新权限。(信用@kR105)

  1. 想要为单个机器启用自动启动的每个用户都必须使用以下命令设置自动启动数据库目录的路径

    VBoxManage setproperty autostartdbpath /etc/vbox
    

    并为单个虚拟机启用自动启动

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
    

    这将在目录中创建一个myuserid.start 文件/etc/vbox

  2. 现在重新启动 vboxautostart-service 来读取更改。

    sudo service vboxautostart-service restart
    
  3. 重新启动系统并且虚拟机应该启动

答案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 停止部分,以便它等待直到客户机完全保存。

相关内容