第13章 QEMU モニタを利用した仮想マシンの管理

目次

13.1. モニタコンソールへのアクセス
13.2. ゲストシステムについての情報取得
13.3. VNC パスワードの変更
13.4. デバイスの管理
13.5. キーボードとマウスの操作
13.6. 利用可能なメモリ量の変更
13.7. 仮想マシンのメモリダンプ
13.8. 仮想マシンのスナップショット管理
13.9. 仮想マシンの一時停止 (サスペンド) と復元
13.10. ライブマイグレーション

QEMU が実行中であればモニタコンソールが提供され、ユーザとの対話操作が可能と なります。モニタコンソールでのコマンドを利用すると、動作中のオペレーティング システムの調査やリムーバブルメディアの交換を行なったり、スクリーンショットや サウンドデータを採取したり、その他仮想マシンに関するいくつかの制御を行なうこと ができます。

13.1. モニタコンソールへのアクセス

QEMU からモニタコンソールにアクセスするには、 Ctrl+Alt+2 を押します。 QEMU の モニタコンソールから抜けたい場合は、 Ctrl+Alt+1 を押します。

コンソールの使用中にヘルプを表示させたい場合は、 help? コマンドを利用します。また、特定のコマンドに対してヘルプを 表示するには、 help コマンド のように入力します。

13.2. ゲストシステムについての情報取得

ゲストシステムについての情報を取得するには info オプション コマンドを利用します。何もオプションを指定せずに実行すると、利用可能なオプションの 一覧が表示されます。オプションでは分析したい項目を指定します:

info version

QEMU のバージョンを表示します。

info commands

利用可能な QMP コマンドを表示します。

info network

ネットワークの状態を表示します。

info chardev

キャラクタデバイスを表示します。

info block

ハードディスクドライブやフロッピィディスクドライブ、 CD-ROM ドライブ など、ブロックデバイスについての情報を表示します。

info blockstats

ブロックデバイスについての読み込み/書き込み統計情報を表示します。

info registers

CPU レジスタを表示します。

info cpus

利用可能な CPU についての情報を表示します。

info history

コマンドラインの履歴を表示します。

info irq

割り込みに関する統計情報を表示します。

info pic

i8259 (PIC) の状態を表示します。

info pci

PCI に関する情報を表示します。

info tlb

仮想メモリと物理メモリのマッピング情報を表示します。

info mem

有効な仮想メモリのマッピング情報を表示します。

info jit

ダイナミックコンパイラの情報を表示します。

info kvm

KVM の情報を表示します。

info numa

NUMA の情報を表示します。

info usb

ゲスト側の USB デバイスの情報を表示します。

info usbhost

ホスト側の USB デバイスの情報を表示します。

info profile

プロファイル情報を表示します。

info capture

キャプチャ (オーディオ録音) 情報を表示します。

info snapshots

現在保存されている仮想マシンのスナップショットについて、 情報を表示します。

info status

現在の仮想マシンの情報を表示します。

info pcmcia

PCMCIA の状態を表示します。

info mice

ゲスト側のどのマウスがイベントを受信しているかを 表示します。

info vnc

VNC サーバ情報を表示します。

info name

現在の仮想マシン名を表示します。

info uuid

現在の仮想マシンの UUID を表示します。

info usernet

ユーザネットワークのスタック接続状態を表示します。

info migrate

マイグレーション状態を表示します。

info balloon

バルーンデバイスの情報を表示します。

info qtree

デバイスの木構造を表示します。

info qdm

qdev デバイスモデルリストを表示します。

info roms

ROM の情報を表示します。

info migrate_cache_sizes

現在のマイグレーション xbzrle (=Xor Based Zero Run Length Encoding; XOR ベースのゼロ長エンコーディング) のキャッシュサイズを 表示します。

info migrate_capabilities

xbzrle 圧縮などの様々なマイグレーション機能の状態を表示します。

info mtree

VM ゲスト のメモリ階層構造を表示します。

info trace-events

利用可能なトレースイベントとその状態を表示します。

13.3. VNC パスワードの変更

VNC のパスワードを変更するには、 change vnc password コマンドを入力し、新しいパスワードを 入力します:

(qemu) change vnc password
Password: ********
(qemu)
    

13.4. デバイスの管理

リムーバブルメディアデバイスに接続されているデバイスやファイルを開放 (取り出す) には、 eject デバイス名 コマンドを 利用します。 -f オプションを指定すると、強制的な取り出しを 実行します。

リムーバブルメディア (たとえば CD-ROM など) のメディア交換を行なうには、 change デバイス名 コマンドを 利用します。リムーバブルメディアのデバイス名は、 info block コマンドで取得できます:

(qemu) info block
ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/sr0 ro=1 drv=host_device
(qemu) change ide1-cd0 /path/to/image
     

13.5. キーボードとマウスの操作

モニタコンソールから、キーボードやマウスの入力を擬似させることができます。たとえば お使いのグラフィカルユーザインターフェイス (GUI) が低レベルなキー入力の組み合わせを 奪い取ってしまうような場合 (たとえば X Window での Ctrl+Alt+F1 など) は、 sendkey キー指定 コマンドでキー入力を送信することができます:

sendkey ctrl-alt-f1

キー指定 オプションで使用するキー名の一覧を表示するには、 sendkey コマンドを入力して Tab を押します。

マウスを制御したい場合は、下記のコマンドを利用することができます:

mouse_move dxdy [dz]

dx, dy で指定する座標にマウスのポインタを移動します。 dz は任意指定で、 スクロールホイールの移動量を指定します。

mouse_button

マウスボタンの状態を変更します (1=左ボタン, 2=中央ボタン, 4=右ボタン) 。

mouse_set インデックス

どのマウスデバイスがイベントを受け取るかを指定します。インデックスで 指定する値は、 info mice コマンドで取得することができます。

13.6. 利用可能なメモリ量の変更

-balloon virtio オプションを指定して仮想マシンを起動し、 擬似仮想化バルーンデバイスが有効化した場合は、動的にメモリ量の割り当てを変更する ことができます。バルーンデバイスの有効化について、詳しくは 11.1項 「qemu-kvm を利用した基本インストール」 をお読みください。

バルーンデバイスに関する情報をモニタコンソール内で表示したい場合や、どのデバイスが 有効になっているのかを判断したい場合は、 info balloon コマンドを利用します:

(qemu) info balloon

バルーンデバイスが有効になっている場合は、 balloon メガバイト コマンドを実行して、 メモリ量の割り当てを指定することができます:

(qemu) balloon 400

13.7. 仮想マシンのメモリダンプ

仮想マシン内のメモリをディスクやコンソール出力に保存したい場合は、 下記のコマンドを実行します:

memsave アドレスサイズファイル名

仮想メモリのダンプを指定した アドレス から開始し、 サイズ で指定したサイズ分だけ ファイル名 のファイルに保存します。

pmemsave アドレスサイズファイル名

物理メモリのダンプを指定した アドレス から開始し、 サイズ で指定したサイズ分だけ ファイル名 のファイルに保存します。

x /フォーマットアドレス

仮想メモリのダンプを フォーマット で指定した 形式で、 アドレス のアドレスから開始します。 フォーマット は 3 つのパラメータから構成 される文字列で、 カウント形式サイズ を指定します:

カウント には、ダンプされる項目数を指定します。

形式 には、 x (16 進数), d (符号付き 10 進数), u (符号無し 10 進数), o (8 進数), c (キャラクタ), i (アセンブラ命令) のいずれかを指定します。

サイズ には、 b (8 ビット), h (16 ビット), w (32 ビット), g (64 ビット) のいずれかを指定します。 x86 環境では、 hwi を併記することもでき、この場合はそれぞれ 16 ビットや 32 ビットのコード 命令サイズを選択することができます。

xp /フォーマットアドレス

物理メモリのダンプを フォーマット で指定した 形式で、 アドレス のアドレスから開始します。 フォーマット は 3 つのパラメータから構成 される文字列で、 カウント形式サイズ を指定します:

カウント には、ダンプされる項目数を指定します。

形式 には、 x (16 進数), d (符号付き 10 進数), u (符号無し 10 進数), o (8 進数), c (キャラクタ), i (アセンブラ命令) のいずれかを指定します。

サイズ には、 b (8 ビット), h (16 ビット), w (32 ビット), g (64 ビット) のいずれかを指定します。 x86 環境では、 hwi を併記することもでき、この場合はそれぞれ 16 ビットや 32 ビットのコード 命令サイズを選択することができます。

13.8. 仮想マシンのスナップショット管理

[Warning]

QEMU モニタを利用したスナップショット管理の機能は、 SUSE では公式に サポートはしていませんが、下記の情報は特定の用途で役立つものであるため、 説明のみ行なっているものです。

仮想マシンのスナップショットとは、 CPU や RAM の状態、および全ての書き込み可能な ディスクの内容を含む、その時点での完全な仮想マシンの状態を保存するための仕組み です。仮想マシンのスナップショット機能を利用するには、少なくとも 1 台以上の 固定された (リムーバブルでない) 書き込み可能なブロックデバイスが必要で、 このディスクは qcow2 形式で存在していなければなりません。

スナップショットは、お使いの仮想マシンを特定の状態で保存しておきたい場合に便利な 仕組みです。たとえば仮想サーバ内でネットワークサービスを設定し、その時点の状態を 保存しておいて、全く同じ状態に素早く復元したいような場合に利用します。 またスナップショットは、何か実験的なことを行なって VM ゲスト を不安定にさせて しまうようなことを行なうような場合、事前にいったん仮想マシンの電源を落としてから その時点でのバックアップを作成するような用途にも利用することができます。 この章では前者のような場合について手順を説明しています。後者のような用途の場合は、 11.2.3項 「qemu-img による仮想マシンのスナップショット管理」 をお読みください。

QEMU モニタでは、スナップショットを管理するのに下記のようなコマンドを利用する ことができます:

savevm 名前

名前 でタグ付けした名前で、新しい仮想マシンの スナップショットを作成します。なお同名のスナップショットが存在した場合は、 上書きされます。

loadvm 名前

名前 でタグ付けした名前のスナップショットを 読み込みます。

delvm

仮想マシンのスナップショットを削除します。

info snapshots

利用可能なスナップショットについて、情報を表示します。

(qemu) info snapshots 
Snapshot list:
ID1       TAG2               VM SIZE3        DATE4          VM CLOCK5
1         booting                4.4M 2010-11-22 10:51:10   00:00:20.476
2         booted                 184M 2010-11-22 10:53:03   00:02:05.394
3         logged_in              273M 2010-11-22 11:00:25   00:04:34.843
4         ff_and_term_running    372M 2010-11-22 11:12:27   00:08:44.965

1

スナップショットの識別番号です。通常は自動的に加算される値です。

2

スナップショットの識別用文字列です。 ID を人間にとって読みやすい形に したものと言えます。

3

スナップショットが占有するディスク領域を示しています。実行中のアプリケーションが 占有するメモリサイズが大きければ大きいほど、スナップショットのサイズも 大きくなります。

4

スナップショットを作成した日時を示しています。

5

仮想マシンの時計に関する状態を示しています。

13.9. 仮想マシンの一時停止 (サスペンド) と復元

下記に示すコマンドが、それぞれ仮想マシンを一時停止 (サスペンド) させたり 復元させたりするためのものです:

stop

仮想マシンの実行を一時停止 (サスペンド) します。

cont

仮想マシンの実行を再開 (レジューム) します。

system_powerdown

マシンに対して ACPI シャットダウン要求を送信します。実際のマシンで言うところの 電源ボタンに似た動作になります。

q または quit

QEMU を即時に終了します。

13.10. ライブマイグレーション

ライブマイグレーション処理は、任意の仮想マシンを一方のホストシステムから他方の ホストシステムに移行するための仕組みで、可用性を一切損なうことがありません。 移行の処理は恒久的に行なうこともできますし、メンテナンスなどの理由で一時的な 移行を行なうこともできます。なお、移行元と移行先の各ホストは同じアーキテクチャで あることがお勧めですが、 AMD と Intel アーキテクチャの間でも移行できます。

ライブマイグレーションの要件は下記のとおりです:

  • ライブマイグレーションは、同じ CPU 機能を持つ VM ホストサーバ 同士でのみ実現 できます。ライブマイグレーション対応の CPU モデルは、 -cpu qemu64 (既定値) のみで、追加の機能が何も指定 されていない場合のみです。

  • 物理デバイスをホストからゲストにパススルーすることはできません。

  • VM ホストサーバ と VM ゲスト は、それぞれ適切な時刻維持機能がインストール されている必要があります。

  • AHCI インターフェイス, virtfs 機能, -mem-path コマンドラインオプションは、それぞれマイグレーションとの互換性が ありません。

  • SP3 が動作しているホスト上のゲストを、 SP2 や SP1 の動作している ホストに移行することはできません。

  • 仮想マシンのイメージは、移行元と移行先の両方からアクセス可能でなければ なりません。たとえば共有の NFS ディスクなどに配置されている場合などが 該当します。

  • イメージのディレクトリは、両方のホストで同じパスに配置されている必要が あります。

  • 両方のホストは同じサブネット内に存在していなければなりません。

  • 移行元と移行先のゲストは、いずれも同じ方法で起動されていなければなりません。

ライブマイグレーションは下記の手順で行ないます:

  1. まずは移行元の仮想マシンを動作中の状態にします。

  2. 次に仮想マシンを移行先のホストで起動し、一時停止させて移行を受け付けられる モードにします。起動時のパラメータは移行元のホストと同じもののほか、 -incoming tcp:IP アドレス:ポート を追加で指定します。ここで IP アドレス には ライブマイグレーションのデータを受け付ける IP アドレスを、 ポート には TCP ポートをそれぞれ指定します。 IP アドレスに 0 を指定した場合は、仮想マシンは全てのインターフェイスで ライブマイグレーションを受け付けるようになります。

  3. 次に移行元のホストでモニタコンソールを表示させ、 migrate -d tcp:移行先 IP アドレス:ポート コマンドを入力して、移行作業を開始します。

  4. 移行状況を表示するには、移行元のホストにあるモニタコンソールから、 info migrate コマンドを実行します。

  5. 移行作業をキャンセルするには、移行元のホストにあるモニタコンソールから、 migrate_cancel コマンドを実行します。

  6. また、移行作業での最大ダウンタイム (サービス停止時間) を指定するには、 migrate_set_downtime 秒数 コマンドを実行します。

  7. 移行処理の最大転送速度を [バイト毎秒] の単位で指定するには、 migrate_set_speed 速度 コマンドを実行します。


openSUSE KVM を利用した仮想化 13.1