« [ vm ] VirtualBox 4.0.0 に拡張パック ( extension pack ) をインストールする | トップページ | [ VirtualBox ] How to save the state of a virtual machine and stop it without GUI. »

2011/04/26

[ 備忘録 ] コマンドラインから Virtual Box の仮想マシンを停止する方法

2012-11-14 修正
起動している仮想マシンを確認するコマンドを修正しました。
yu さん、ご指摘ありがとうございました。

VirtualBox で仮想マシン実行中に、ホストをシャットダウンしようとすると警告が表示されます。 もちろん、警告を無視して VirtualBox を強制終了させればホストをシャットダウンできますが、 この場合は VirtualBox の設定が壊れたり仮想マシンが壊れてしまうことがあります。

震災の影響で電力供給が不安定ないまだと、UPS ( 無停電電源装置 ) のシャットダウンシグナルをトリガーとしてマシンを停止させたい(*1)といったこともあるでしょう。UPS からシャットダウンシグナルが送られてくる場合はその地域に停電が発生している可能性もあり、マシンにリモート接続してシャットダウンといった方法は取れないことも考えられます。安全に仮想マシンを停止するにはどうすればいいのでしょうか?

結論からいってしまうと、VirtualBox には VBoxManage という仮想マシンの設定や状態を管理するコマンドが用意されているので、これを利用します。VBoxManage コマンドですべての仮想マシンを終了するスクリプトを作成しておき、シャットダウンシグナル受信時にそのスクリプトが実行されるようにしておきます。

VBoxManage コマンドで仮想マシンを停止するには次の 2 つのステップで操作します。

  1. 起動している仮想マシンを確認する
  2. 起動している仮想マシンを停止する

1. 起動している仮想マシンを確認する
VBoxManage コマンドに "list runningvms" オプションをつけて実行します。

> VBoxManage list runningvms
"ubuntu10_04" {57e88170-bb7e-4728-ba05-4724cdfe6cdb}
"squeeze_x64" {0d584575-84f6-4800-b74c-ef6b22cfbe9a}

ダブルクォートで囲まれている部分、上記の例では "ubuntu10_04" と "squeeze_x64" が、GUI の仮想マシン名にあたるものです。 その横の波かっこ {} で囲まれている部分、上記の例では {57e88170-bb7e-4728-ba05-4724cdfe6cdb} と {0d584575-84f6-4800-b74c-ef6b22cfbe9a} が UUID と呼ばれるもので、VirtualBox がそれぞれの仮想マシンの管理に使用している固有の識別子です。

2. 起動している仮想マシンを停止する
VBoxManage コマンドに "cntrolvm <VM> savestate" オプションをつけて実行します(*2)。
<VM> の部分は、先ほど確認した仮想マシン名または UUID を使用します。

たとえば、先ほど確認した中にある squeeze_x64 を停止する場合は次のようになります。
100% と表示されてプロンプトに復帰すれば停止処理は完了しています。

> VBoxManage controlvm {0d584575-84f6-4800-b74c-ef6b22cfbe9a} savestate
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

起動中の仮想マシンすべてを停止するスクリプトを作成し、シャットダウン時に実行するようにしておきましょう(*3)。

(*1) シャットダウンシグナルを送ってくれるかどうかは UPS 次第です。安物だと何もしてくれないことも・・・

(*2) "cntrolvm <VM> poweroff" というオプションもありますが、こちらは「いきなり電源ケーブルを引っこ抜く」ことに相当します。つまり、こちらを実行するとデータは保存されませんし、仮想マシンが壊れる可能性もあります。

(*3) Windows の場合はグループポリシーで設定します。XP/Vista/7 では通常は設定用画面は見えませんが、MMC というツールを使用することで設定できます (下位エディション除く )。

Reference
VirtualBox Manual Chapter8. VBoxManage

|

« [ vm ] VirtualBox 4.0.0 に拡張パック ( extension pack ) をインストールする | トップページ | [ VirtualBox ] How to save the state of a virtual machine and stop it without GUI. »

コメント

> VirtualBox list runningvms は
vboxmanage list runningvms ですね

> VBoxManage controlvm {0d584575-84f6-4800-b74c-ef6b22cfbe9a} savestate は
VBoxManage controlvm 0d584575-84f6-4800-b74c-ef6b22cfbe9a savestate ?

投稿: yu | 2012/10/26 12時04分

yu さん、ご指摘ありがとうございます。

状態確認のコマンドはご指摘の通り "VBoxManage list runningvms" でした。
修正しました。

状態の保存は VirtualBox ver 4.2.4 で確認したところ {} 付でした。

投稿: Fomalhaut (管理人) | 2012/11/14 20時39分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/103108/51501778

この記事へのトラックバック一覧です: [ 備忘録 ] コマンドラインから Virtual Box の仮想マシンを停止する方法:

« [ vm ] VirtualBox 4.0.0 に拡張パック ( extension pack ) をインストールする | トップページ | [ VirtualBox ] How to save the state of a virtual machine and stop it without GUI. »