Debian squeeze / VirtualBox 4.0.4
/etc/default/virtualbox に次の行を書いておくと、ホストのシャットダウン時に自動的に 現在稼動中の仮想マシンを一時停止・保存する
SHUTDOWN_USERS="hoge" SHUTDOWN=savestate
書ける内容は次のとおり
# enter the following variables in /etc/default/virtualbox: # SHUTDOWN_USERS="foo bar" # check for running VMs of user foo and user bar # SHUTDOWN=poweroff # SHUTDOWN=acpibutton # SHUTDOWN=savestate # select one of these shutdown methods for running VMs
ただしホストの起動時には 自動的に復旧しない
今動作中の仮想マシンの一覧の表示
$ vboxmanage list runningvms "Onet" {181384bb-8c1b-4389-89ba-1a00837a434b} "Twoson" {b81559f9-7dff-4ee6-8eab-04aa3fdb2c4b} "Threek" {6896afda-8060-4293-a9de-99e17afc2c57}
仮想マシンの一時停止、保存
$ vboxmanage controlvm 181384bb-8c1b-4389-89ba-1a00837a434b savestate
仮想マシンの起動
$ vboxmanage startvm 181384bb-8c1b-4389-89ba-1a00837a434b
perlのワンライナーでuuidを抽出する
set LINE='"Onet" {181384bb-8c1b-4389-89ba-1a00837a434b}' echo $LINE | perl -pe 's/.*\{(.*)\}.*/\1/'
bashでuuidを抽出する
set LINE='"Onet" {181384bb-8c1b-4389-89ba-1a00837a434b}' set ${LINE#*\{};echo ${1%%\}*}
一般ユーザーでプログラムを実行する
su - hoge -c "ls /tmp"
sudo -u hoge ls /tmp
自動で全ての稼動中の仮想マシンを停止したり再開したりするスクリプト
稼動中の仮想マシンの一覧を/var/tmp/runningvmsに出力して、全部停止する
次回起動時に/var/tmp/runningvmsを読んで、止めた分を再開する。
#!/bin/sh # for Cygwin #PATH=/usr/local/bin:/usr/bin:/bin:/cygdrive/c/Program\ Files/Oracle/VirtualBox #RUNNINGVMS=/var/tmp/runningvms #VBOXMANAGE=VBoxManage # for Linux PATH=/sbin:/usr/sbin:/bin:/usr/bin RUNNINGVMS=/var/tmp/runningvms VBOXMANAGE=sudo -u hoge vboxmanage case "$1" in start) while read LINE; do $VBOXMANAGE startvm $LINE done < $RUNNINGVMS rm $RUNNINGVMS ;; stop) $VBOXMANAGE list runningvms | perl -pe 's/.*\{(.*)\}.*/\1/' > $RUNNINGVMS while read LINE; do $VBOXMANAGE controlvm $LINE savestate done < $RUNNINGVMS ;; *) echo "Usage: $0 {start|stop}" exit 3 ;; esac
と、ここまで書いて ググッてみたら
http://www.revulo.com/blog/20090516.html
にすでにスクリプトがあった。こっちの方が複数ユーザに対応してて格好いい。
と、思ってから ふと /etc/init.d/vboxdrv を見たらすでに何もかも書いてあった。