VirtualBoxの仮想マシンをまとめてexportする
スクリプト
バックアップを取りたいが何回もexport何回もするのがめんどいので下記スクリプトを使う
#! /bin/sh list=(`vboxmanage list runningvms | sed -e "s/^.*\"\(.*\)\".*$/\1/"`) for vm in ${list[@]} ; do vboxmanage controlvm ${vm} poweroff; vboxmanage export ${vm} -o ${vm}.ova; done
説明
list=(`vboxmanage list runningvms | sed -e "s/^.*\"\(.*\)\".*$/\1/"`)
vboxmanage list runningvms
は起動している仮想マシンの一覧を取得している。
sed -e "s/^.*\"\(.*\)\".*$/\1/"
は取得した一覧から仮想マシンの名前のリストを取得している。
(正直、sedはよくわからんので、代わりにcut -d" " -f1
でいい気がする。 )
sedの結果を配列としてlistへ代入している。
for vm in ${list[@]} ; do 処理 done
list配列から1つずつ値を取り出してvmという変数に代入している。
list配列から値を取り出すたびに処理を行う。
vboxmanage controlvm ${vm} poweroff;
仮想マシンが起動しているとexportできないのでシャットダウンしている。 (余談だが、controlvm poweroffは電源引っこ抜くのと同じ動作らしい(公式のリンクを貼る))
vboxmanage export ${vm} -o ${vm}.ova;`
仮想マシンをexportする。
-o
によってexportする仮想マシンに名前をつけることができる。
もうちょいきれいにスクリプト書いた
よりshellスクリプトらしく、パイプ処理で記述した。
run_vm
を書き換えれば、ipアドレスの一覧を取得したりできる。
#!/bin/sh function get_name_of_runningvms(){ vboxmanage list runningvms | cut -d" " -f1 } function run_vm(){ while read -r line do echo "$line" | xargs -I{} vboxmanage startvm {} --type headless done } get_name_of_runningvms | run_vm