イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

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