virtualboxをCUIで操作する
2020/11/10 章: バックアップを取りたいが何回もexport何回もするのがめんどい
のスクリプトがめちゃめちゃだったので正しく動くように更新
2020/11/10 章: 複数起動したいとき
のコマンドがテキトーすぎて間違っていたので正しく動くように更新
2021/06/28 ケーブル接続設定を変更するを追記
概要
virtualboxをコマンドで操作したい。 vboxmanageコマンドで操作することができる。 しかし、vboxmanageコマンドのヘルプを見ても情報が足りなくてよくわらないため、コマンドの使い方のメモを残す。 たびたび追記したい。
コマンド
vboxmanage サブコマンド パラメータ のように記述する
仮想マシンの名称とUUIDの一覧を出力する
例
入力
$ vboxmanage list vms
出力
"foo bar" {f661256d-f63a-4548-a252-12e7bdda1b80} "burabura" {ab31256d-f63a-4548-a252-12e7bdda1b80} ...
説明
めんどくなったのでコマンドだけメモ 後で使ったらどう動くか、使い方など整理する
仮想マシンのIPアドレスを取得する
$ VBoxManage guestproperty enumerate vmname | grep IP
起動している仮想マシンのリストを出力する
$ vboxmange list runningvms
virtualboxで管理している仮想マシンのリストを出力する
$ vboxmanage list vms "foo bar" {f661256d-f63a-4548-a252-12e7bdda1b80} "vm name" {uuid}の形式で出力される
仮想マシンを起動する
$ vboxmanage startvm uuid|vmname --type headless
仮想マシンをシャットダウンする
注: 公式が電源からブチッと抜くのと同じだよって言っているので
できたらshellからshutdownコマンド使ってあげてください。
$ vboxmanage controlvm uuid|vmname poweroff
仮想マシンのコピーを作成する
$ vboxmanage clonevm <uuid|vmname> --mode machine --options keepallmacs --name <name> --register
仮想マシンのネットワークの設定を確認する
$ vboxmanage showvminfo uuid|vmname
したの方のNICのところに、ネットワーク種別や物理ネットワークIFの設定が記述されている
仮想マシンのネットワーク種別の設定を変更する
$ vboxmanage modifyvm <uuid|vmname> -nic<1-N> none|null|nat|bridged|intnet|hostonly|generic
仮想マシンの物理IFの割当を変更する
$ vboxmanage modifyvm <uuid|vmname> -bridgeadapter<1-N> none|<devicename>
仮想マシンをexportする
$ vboxmanage export <name> -o <name>.ova
仮想マシンをimportする
$ vboxmanage import --options keepallmacs <filepath>
importするときに設定を変える。
まず、確認のため実際にインポートはせずに、インポートした場合の設定を確認する。
$ vboxmanage import --dry-run <filepath>
出力結果が下記のようにでる 1
0: Suggested OS type: "WindowsXP" (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all) 1: Suggested VM name "Windows XP Professional_1" (change with "--vsys 0 --vmname <name>") 2: Suggested VM group "/" (change with "--vsys 0 --group <group>") 3: Suggested VM settings file name "/home/klaus/VirtualBox VMs/dummy2 2/dummy2 2.vbox" (change with "--vsys 0 --settingsfile <filename>") 4: Suggested VM base folder "/home/klaus/VirtualBox VMs" (change with "--vsys 0 --basefolder <path>") 5: End-user license agreement (display with "--vsys 0 --eula show"; accept with "--vsys 0 --eula accept") 6: Number of CPUs: 1 (change with "--vsys 0 --cpus <n>") 7: Guest memory: 956 MB (change with "--vsys 0 --memory <MB>") 8: Sound card (appliance expects "ensoniq1371", can change on import) (disable with "--vsys 0 --unit 5 --ignore") 9: USB controller (disable with "--vsys 0 --unit 6 --ignore") 10: Network adapter: orig bridged, config 2, extra type=bridged 11: Floppy (disable with "--vsys 0 --unit 8 --ignore") 12: SCSI controller, type BusLogic (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}"; disable with "--vsys 0 --unit 9 --ignore") 13: IDE controller, type PIIX4 (disable with "--vsys 0 --unit 10 --ignore") 14: Hard disk image: source image=WindowsXp.vmdk, target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0 (change controller with "--vsys 0 --unit 11 --controller <id>"; disable with "--vsys 0 --unit 11 --ignore")
次に変更した場合、どうなるかdry runする 例えば今は名前が 1: Suggested VM name のところに、"Windows XP Professional_1"と書いてある 下のchange withに従ってオプションを付ける
$ vboxmanage import --dry-run -vsys 0 --vmname "dogsnailvm" <filepath>
出力
0: Suggested OS type: "WindowsXP" (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all) 1: Suggested VM name "dogsnailvm" (change with "--vsys 0 --vmname <name>") 2: Suggested VM group "/" (change with "--vsys 0 --group <group>") 3: Suggested VM settings file name "/home/klaus/VirtualBox VMs/dummy2 2/dummy2 2.vbox" (change with "--vsys 0 --settingsfile <filename>") 4: Suggested VM base folder "/home/klaus/VirtualBox VMs" (change with "--vsys 0 --basefolder <path>") 5: End-user license agreement (display with "--vsys 0 --eula show"; accept with "--vsys 0 --eula accept") 6: Number of CPUs: 1 (change with "--vsys 0 --cpus <n>") 7: Guest memory: 956 MB (change with "--vsys 0 --memory <MB>") 8: Sound card (appliance expects "ensoniq1371", can change on import) (disable with "--vsys 0 --unit 5 --ignore") 9: USB controller (disable with "--vsys 0 --unit 6 --ignore") 10: Network adapter: orig bridged, config 2, extra type=bridged 11: Floppy (disable with "--vsys 0 --unit 8 --ignore") 12: SCSI controller, type BusLogic (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}"; disable with "--vsys 0 --unit 9 --ignore") 13: IDE controller, type PIIX4 (disable with "--vsys 0 --unit 10 --ignore") 14: Hard disk image: source image=WindowsXp.vmdk, target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0 (change controller with "--vsys 0 --unit 11 --controller <id>"; disable with "--vsys 0 --unit 11 --ignore")
おkなら、実際に設定を変更してインポートする
$ vboxmanage import -vsys 0 --vmname "dogsnailvm" <filepath>
仮想マシンを削除する
$ vboxmanage unregister <uuid|name>
ケーブル接続設定を変更する(2021/06/28追記)
pingが通らないなどのトラブルの原因の1つとして、ケーブル接続設定がある。
この設定は仮想マシンのイーサネットポートにケーブルが接続されているか、抜いているかをエミュレートしている。
チェック有りがケールブルを接続している、チェックなしがケーブルを抜いている状態を示す(onが接続、offが抜く)。
vboxmanage modifyvm <uuid | name> --cableconnected<1-N> <on | off> vboxmanage modifyvm dogsnailvm --cableconnected1 on
よく使う
インポートの際に、macアドレスを維持したいことが多々ある。 macが変わってしまうと、/dev ~のファイルやらなんやら設定し直すことになってめんどい。 のでインポートする際に下記オプションをつける
$ vboxmanage import dogsnailvm.ova --options keepallmacs
バックアップを取りたいが何回もexport何回もするのがめんどい
バックアップを取りたいが何回も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
複数起動したいとき
xargsでいっこずつ渡せばいけたはず
dogsnailという名前を含む仮想マシンをすべて起動するには下記のようなコマンドで実現できる。
grep以前を調整すれば応用可能
vboxmanage list vms | grep dogsnail | cut -d" " -f1 | xargs -I{} vboxmanage startvm {} --type headless
参考
-
Chapter 8. VBoxManage: https://www.virtualbox.org/manual/ch08.html↩