目前所使用的 Virtualbox 主體分別是 Windows 7 與 Ubuntu 14.04/16.04 等, 在 Windows 7 的虛擬機器可以透過 http://vboxvmservice.sourceforge.net/, 讓特定虛擬機器 (virtual machine), 隨著 Host 電腦的開啟而以 service 的方式啟用. 至於在 Ubuntu 14.04 或 16.04 操作系統中, 則可以在 /etc/init.d/ 目錄下建立一個啟動程序, 然後讓電腦在開關機時執行, 主要的指令是開機時, 利用 VBoxHeadless 啟動個別的虛擬機器, 且在關機時, 利用 VBoxManage controlvm 儲存各虛擬機器的運行狀態.
StartVM 檔案的內容如下, 分別控制三台虛擬機器:
#! /bin/sh # /etc/init.d/StartVM VMUSER=yen VMNAME1="Ubuntu_1604_8888" VMNAME2="Ubuntu_1604_6666" VMNAME3="Ubuntu_1404_4444" case "$1" in start) echo "Starting VirtualBox VM..." sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME1" sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME2" sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME3" ;; stop) echo "Saving state of Virtualbox VM..." sudo -H -u $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME1" savestate sudo -H -u $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME2" savestate sudo -H -u $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME3" savestate ;; *) echo "Usage: /etc/init.d/StartVM {start|stop}" exit 1 ;; esac exit 0
接著讓 StartVM 程序檔案可以執行:
sudo chmod +x /etc/init.d/StartVM
最後則是將 StartVM 納入開機程序中:
sudo update-rc.d StartVM defaults 99 01
有關 update-rc.d 用法說明: http://manpages.ubuntu.com/manpages/precise/man8/update-rc.d.8.html.
sudo update-rc.d StartVM defaults 99 01 指令表示利用 super user 的權限執行 update-rc.d 指令, 並且讓 StartVM 程序以第 99 編號次序執行 StartVM 中的 start (以開機啟動順位排序最後的方式執行, 有效編號從 00 到 99), 而 01 則表示要求以排序編號 01 的方式執行 StartVM 中的 stop 程序. 通常 update-rc.d 中使用的 start 與 stop runlevel 編號, 是最後啟動的程序要先執行 stop (兩者相加總數為 100), 詳細說明請參考: https://help.ubuntu.com/community/UbuntuBootupHowto.
參考資料: http://askubuntu.com/questions/57220/start-vboxheadless-vm-at-startup