VM ゲスト の起動や停止など、ほとんどの管理作業はグラフィカルなアプリケーションである 仮想マシンマネージャ とコマンドラインである virsh
の両方で実施することができます。ただし、 VNC 経由でのグラフィカルコンソールへのアクセスは、グラフィカルユーザインターフェイスでのみアクセスすることができます。
VM ホストサーバ 内で動作させる場合、 libvirt
のツールである 仮想マシンマネージャ, virsh
, virt-viewer
の各ツールを利用することで、ホスト内で動作する VM ゲスト を管理することができます。ただし、リモートの VM ホストサーバ にある VM ゲスト を管理することもできます。この場合、 libvirt
にリモートから接続できるように設定する必要があります。詳しくは 第11章 「接続と認可」 をお読みください。
仮想マシンマネージャ でリモートのホストに接続するには、まずは 11.2.2項 「仮想マシンマネージャ による接続の管理」 での説明に従って、接続を設定する必要があります。また、 virsh
や virt-viewer
でリモートのホストに接続する場合は、 -c
オプションで接続 URI を指定する必要があります (たとえば virsh -c qemu+tls://saturn.example.com/system
や virsh -c xen+ssh://
など) 。接続 URI の書式は、使用する接続の種類とハイパーバイザによって異なります。詳しくは 11.2項 「VM ホストサーバ への接続」 をお読みください。
なお、本章内でのコマンド例では、いずれも接続 URI を略しています。
VM ホストサーバ 内で libvirt
を利用して管理されている全 VM ゲスト の一覧表示
仮想マシンマネージャ のメインウインドウには、接続している VM ホストサーバ 内にある全ての VM ゲスト が一覧表示されています。それぞれの行にはマシンの名前のほか、状態 (
, , ) がアイコンとテキストで、そして CPU の使用率を表すバーも表示されています。virsh
による VM ゲスト の一覧表示 #Edit sourceVM ゲスト の一覧を表示するには、 virsh
list
コマンドを使用します:
>
virsh list
>
virsh list --all
詳細およびさらなるオプションについては、 virsh help list
または man 1 virsh
で表示されるマニュアルページをお読みください。
VM ゲスト は VNC 接続でアクセスすることができる (グラフィカルコンソールの場合) ほか、ゲスト側のオペレーティングシステムで対応している必要がありますが、シリアルコンソール経由でアクセスすることもできます。
VM ゲスト のグラフィカルコンソールを表示することで、物理マシンに VNC 接続しているのと同じように仮想マシンを扱うことができるようになります。また、接続先の VNC サーバで認証を求めるよう設定している場合、ユーザ名 (必要であれば) とパスワードの入力を求められます。
VNC コンソール内でマウスのボタンを押すと、マウスカーソルは 「捕捉」 状態になり、コンソールの外側には移動できなくなります。捕捉を解除するには、 Alt–Ctrl を押してください。
マウスカーソルがコンソール内に捕捉されず、 VM ゲスト のウインドウの内側と外側を自由に行き来できるようにしたい場合は、 VM ゲスト にタブレット入力デバイスを追加してください。詳しくは 13.5項 「入力デバイス」 をお読みください。
Ctrl–Alt–Del などの特殊なキー入力は、ホスト側で処理されてしまい、 VM ゲスト には配送されません。これらの特殊なキー入力を VM ゲスト 側に受け渡すには、 VNC ウインドウ内にある メニューの中から、送信したいキーを選択してください。なお、 メニューは 仮想マシンマネージャ と virt-viewer
を利用している場合にのみ使用することができます。 仮想マシンマネージャ では、 ヒント: 仮想マシンに対する特殊キーの送信について で説明している手順で、 「sticky key」 を使用することもできます。
仕様上は VNC に対応していれば、全てのビューアから VM ゲスト に接続することができます。ただし、ゲストへのアクセスに際して SASL 認証を使用している場合や TLS/SSL 接続を設定しているような場合、利用できる VNC ビューアは限られてきます。 tightvnc
や tigervnc
などの一般的な VNC ビューアには、 SASL 認証の機能も、 TLS/SSL 接続への対応も用意されていません。 仮想マシンマネージャ と virt-viewer
の組み合わせ以外で唯一対応しているものは、 Remmina (詳しくは4.2項 「Remmina: リモートデスクトップクライアント」 をお読みください) のみとなります。
仮想マシンマネージャ 内にある VM ゲスト の項目を選択して、マウスの右ボタンを押します。
ポップアップメニューから
を選択します。virt-viewer
を利用したグラフィカルコンソールの表示 #Edit sourcevirt-viewer
はシンプルな VNC ビューアで、 VM ゲスト のコンソール用にいくつかの機能が追加されています。たとえば 「wait」 モードを指定して起動すると、接続を行う前に VM ゲスト が開始されるのを待つようになります。また、 VM ゲスト が再起動された場合、自動的に再接続する機能も用意されています。
virt-viewer
では、 VM ゲスト の指定を名前のほか、 ID や UUID で指定することができます。 virsh
list --all
を実行すると、これらのデータを表示することができます。
実行中や一時停止中のゲストに接続する場合は、 ID や UUID 、もしくは名前で選択することができます。シャットオフされている VM ゲスト の場合は、 ID が付与されていませんので、 UUID や名前で選択してください。
8
のゲストに接続:>
virt-viewer 8
sles12
という名前の停止中のゲストに接続; ゲストの起動が行われるまで待機する設定:>
virt-viewer --wait sles12
--wait
オプションを指定すると、 VM ゲスト が実行中でない場合、接続が保留状態になります。ゲストが起動すると、ビューアが表示されるようになります。
詳しくは virt-viewer
--help
もしくは man 1 virt-viewer
をお読みください。
SSH 経由で接続しているホストに対して virt-viewer
で接続を開く場合、 SSH のパスワードは 2 回入力する必要があります。最初の 1 回は libvirt
での認証に、もう 1 回は VNC サーバとの認証になります。なお、 2 回目のパスワードは、 virt-viewer の開始時にコマンドラインで指定する必要があります。
仮想マシンのグラフィカルコンソールに接続するには、 VM ゲスト にアクセスするクライアント側でも、グラフィカル環境を用意する必要があります。グラフィカルな環境を必要としない場合や、使用したくない場合は、 virsh
でシリアルコンソール経由を介してシェルにアクセスすることができます。 VM ゲスト のシリアルコンソールにアクセスするには、下記のようなコマンドを入力して実行します:
>
virsh console sles12
virsh console
には 2 種類のオプションフラグが存在しています。 --safe
を指定すると、コンソールに対して排他アクセスを行おうとします。 --force
を指定すると、接続を行う前に既存の接続を全て切断します。いずれの機能とも、ゲスト側のオペレーティングシステムでの対応が必要となります。
VM ゲスト に対してシリアルコンソール経由でアクセスするには、ゲスト側のオペレーティングシステムがシリアルコンソールに対応し、適切に設定されている必要があります。詳しくはゲスト側のオペレーティングシステムのマニュアルをお読みください。
SUSE Linux Enterprise や openSUSE の場合、シリアルコンソールへのアクセスは既定で無効化されています。有効化したい場合は、下記のようにします:
YaST ブートローダモジュールを起動して、 console=ttyS0
を追加します。
YaST ブートローダモジュールを起動して、シリアルコンソールを有効化したい起動項目を選択します。選択を行ったら console=ttyS0
を追加します。これに加えて、 /etc/inittab
ファイルを編集し、下記の行のコメント文字を外します:
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
VM ゲスト の開始や停止、一時停止は、 仮想マシンマネージャ もしくは virsh
で行うことができます。また、 VM ホストサーバ の起動時に VM ゲスト を自動的に開始するように設定することもできます。
なお、 VM ゲスト をシャットダウンする際は、正常な手順でシャットダウンを行うか、もしくは強制的にシャットダウンを行うかを選択することができます。強制的なシャットダウンはコンピュータの電源を抜く行為と同じであり、正常な手順でシャットダウンができない場合にのみ実施すべきものです。また、強制的なシャットダウンを行うと、 VM ゲスト 内のファイルシステムを破壊してしまうことがあるほか、データを失ってしまうこともあります。
正常にシャットダウンを行うには、 VM ゲスト 側が ACPI に対応するよう設定されていなければなりません。 仮想マシンマネージャ でゲストを作成している場合、 VM ゲスト の ACPI 対応は自動的に設定されます。
ゲスト側のオペレーティングシステムにも依存しますが、 ACPI が利用できれば正常にシャットダウンできるというわけではありません。本番環境で使用する場合は、あらかじめ正常にシャットダウンできること、および再起動できることを確認してからご使用ください。なお、 openSUSE や SUSE Linux Enterprise Desktop などでは、シャットダウンや再起動を行うのに Polkit による認可を必要とするように設定することもできます。このポリシーが全ての VM ゲスト で無効化されていることを確認してください。
Windows XP や Windows Server 2003 のゲストインストール時に ACPI を有効化した場合、 VM ゲスト の設定のみを変更しただけでは設定不足となります。詳しくは下記をお読みください:
なお、 VM ゲスト 側の設定にかかわらず、ゲスト側のオペレーティングシステム内からシャットダウンを行うことで、正常なシャットダウンを実現することができます。
VM ゲスト の状態変更は 仮想マシンマネージャ のメインウインドウのほか、 VNC ウインドウからも行うことができます。
VM ゲスト の項目を選択して、マウスの右ボタンを押します。
表示されたポップアップメニューから、
, のいずれか、もしくは 内にある選択肢のいずれかを選択します。10.2.1.1項 「仮想マシンマネージャ を利用したグラフィカルコンソールの表示」 に示されている手順に従って、 VNC ウインドウを表示します。
ツールバー内、もしくは
メニュー内にある , のいずれか、もしくは 内にある選択肢のいずれかを選択します。VM ホストサーバ の起動時にゲストを自動的に開始するように設定することができます。この機能は既定では有効化されておらず、それぞれの VM ゲスト に対して個別に設定する必要があります。全ての仮想マシンを一括で有効化することはできません。
仮想マシンマネージャ で設定したい VM ゲスト の項目を選んでダブルクリックし、コンソールを表示します。
› を選んで、 VM ゲスト の設定ウインドウを表示します。
を選択し、表示された を選択します。
を押して新しい設定を保存します。
virsh
を利用した VM ゲスト の状態変更 #Edit source下記の例では、 「sles12」 という名前の VM ゲスト の状態を変更しています。
>
virsh start sles12
>
virsh suspend sles12
>
virsh resume sles12
>
virsh reboot sles12
>
virsh shutdown sles12
>
virsh destroy sles12
>
virsh autostart sles12
>
virsh autostart --disable sles12
VM ゲスト の状態保存を行うことで、ゲストのメモリの内容を保存することができます。この操作はコンピュータの ハイバネーション (休止状態) に似た操作です。状態保存された VM ゲスト の復元を行うことで、その時点の状態に素早く戻すこともできます。
状態保存を行うと、 VM ゲスト は一時停止状態になり、その時点でのメモリ内容をファイルに保存したあと、 VM ゲスト が停止されます。ただし、この操作では VM ゲスト の仮想ディスクのコピーが作成されるわけではありません。また、仮想マシンの状態保存にかかる時間は、割り当てているメモリ量に依存して決まります。また状態保存を行うと、 VM ゲスト に割り当てていたメモリが VM ホストサーバ 側に戻され、利用できるようになります。
状態復元の操作は、以前に状態保存しておいた VM ゲスト のメモリ状態を読み込んで、実行中の状態に戻す操作です。ここではゲストの起動処理は発生せず、状態を保存した時点の状態に戻します。この操作は、ハイバネーションからの復帰に似ています。
libvirt
ではいくつかの状態保存形式に対応しています。既定では raw
形式が使われ、 VM ゲスト のメモリページをそのまま連続したストリームに記録します。なお raw
形式は、複数の同時読み込み/同時書き込みには適切ではありません。
raw
状態保存形式に加え、 libvirt
では zstd
, lzop
, gzip
, bzip2
, xz
の各形式に対応しています。これらは raw
形式と同様に連続したストリームに書き込みますが、それぞれの名前で示された圧縮アルゴリズムで圧縮処理が行われます。これによりファイルサイズが小さくなり容量の節約につながりますが、保存や復元にかかる時間は長くなり、ホストの CPU 資源もそれなりに使用してしまいます。
このほか sparse
状態保存形式では、事前に計算された固定のオフセット値を利用して VM ゲスト 内のメモリページの読み込み/書き込みを行います。保存されたファイルは VM ゲスト のメモリの論理サイズにおおよそ等しくなりますが、ディスク内で占有するサイズは VM ゲスト が実際に使用しているサイズになります。 VM ゲスト のメモリページで固定のオフセット値を使用することで、 sparse
形式は複数の同時読み込み/同時書き込みに対応できますので、特にメモリ割り当ての大きな VM ゲスト の保存や復元にかかる時間が削減できることになります。
既定の状態保存形式は、 /etc/libvirt/qemu.conf
内の save_image_format
で設定することができます。このほか、状態保存の実施時に virsh
で指定することもできます。 virsh
による状態保存/状態復元については、 10.4.2項 「virsh
による状態保存と状態復元」 をお読みください。
なお、 VM ゲスト の状態がファイルに保存されることから、処理を実施するにあたっては十分な容量を確保する必要があります。 sparse
状態保存形式を使用した場合、保存ファイルの論理サイズはおおよそ VM ゲスト のメモリ割り当て量に等しくなります。ただし、ディスク内における実際のサイズは、 VM ゲスト のメモリ使用状況に依存してそれより小さくなります。これは VM ゲスト 内で未使用のメモリをファイルに書き込まないためで、このような理由から sparse
(疎 (まば) らな) という名前が付けられています。
raw
状態保存形式の場合は、論理サイズと実際のサイズは等しくなります。いずれも VM ゲスト のメモリ使用状況に依存して決まります。 raw
と sparse
のどちらかを使用する場合、ファイルサイズは下記のコマンドで見積もることができます (メガバイト単位):
>
free -mh | awk '/^Mem:/ {print $3}'
上記以外の圧縮形式の場合はこれより小さくなりますが、どれだけ小さくなるのかは圧縮アルゴリズムの効率次第です。
VM ゲスト の状態保存を行った後は、必ず状態復元を行うものとし、通常の起動や開始は行ってはなりません。通常の起動や開始を行ってしまうと、マシンの仮想ディスクが途中の状態のまま起動することになってしまうほか、状態保存のファイルとも整合性が取れなくなってしまうため、状態復元を行うとシステムが壊れてしまいます。
状態保存された VM ゲスト を正しく使用し続けるには、状態復元を忘れずに実施してください。また、 virsh
で VM ゲスト の状態保存を行った場合は、 仮想マシンマネージャ を使用してはなりません。この場合は virsh
で復元を行ってください。
VM ゲスト の状態を保存してから長い時間 (2〜3時間以上) が経過した後に復元を行った場合、時刻同期サービスが正しく時刻を修正できなくなったりする場合があります。このような場合は、 VM ゲスト の時刻を手作業で修正してください。たとえば KVM ホストであれば、 QEMU のゲストエージェントを利用することで、 guest-set-time
コマンドでゲスト側の時刻を修正することができます。詳しくは 第21章 「QEMU ゲストエージェント」 をお読みください。
VM ゲスト の VNC 接続ウインドウを表示します。また、ゲストが動作中であることを確認します。
› › を選択します。
VM ゲスト の VNC 接続ウインドウを表示します。また、ゲストが動作中でないことを確認します。
› を選択します。
VM ゲスト を 仮想マシンマネージャ から状態保存していると、ゲストの 警告: 保存後の復元作業について で説明しているとおり、 virsh
で状態保存を行っている場合に注意してください。
virsh
による状態保存と状態復元 #Edit sourcelibvirt
では、 仮想マシンマネージャ よりもより細かく保存/復元処理を制御することができます。 virsh save
や virsh restore
では様々な制御を行うことができますが、最も基本的な形式は VM ゲスト の名前や ID, UUID とファイル名を指定する形式となります。たとえば下記のようになります:
>
virsh save openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
VM ゲスト の復元の場合は、保存されたファイル名を指定するだけです。下記のようになります:
>
virsh restore /virtual/saves/openSUSE-Leap.vmsav
VM ゲスト のメモリサイズが大きい場合で、特に高速なストレージシステムを使用しているような場合は、十分な転送速度を確保するために追加のオプション設定が必要となります。これは VM ホストサーバ のファイルシステムキャッシュが逆効果になってしまうためで、 bypass-cache
オプションを指定して無効化する必要があるためです。具体的には下記のようになります:
>
virsh save --bypass-cache openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
>
virsh restore --bypass-cache /virtual/saves/openSUSE-Leap.vmsav
高速なストレージを搭載したシステムの場合、 VM ゲスト のメモリページを同時に読み書きするように指定することで、保存や復元にかかる時間を改善することもできます。このような場合は、 10.4項 「VM ゲスト の状態保存と状態復元」 にも示しているとおり、 sparse
状態保存形式を指定して、複数の同時読み込み/同時書き込みを行ってください。なお、同時数を指定するにあたっては、 VM ホストサーバ 内で動作する他の処理に影響がないようにしてください。 VM ホストサーバ のリソースが論理的に区切られているような場合であれば、一般的に VM ゲスト に割り当てられている物理 CPU 数と同じ値を指定してください。これは、保存処理の開始時に VM ゲスト の仮想 CPU が停止するため、それをそのまま保存処理に使用できることになるからです。
たとえば下記の例では、 VM ゲスト の保存や復元を VM ホストサーバ のファイルシステムキャッシュを経由せず、同時 4 チャンネルで実施しています:
>
virsh save --bypass-cache --image-format sparse --parallel-channels 4 openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
>
virsh restore --bypass-cache --parallel-channels 4 /virtual/saves/openSUSE-Leap.vmsav
なお、状態保存時に使用したファイルの形式については、復元時に指定する必要はありません。
保存や復元の処理の詳細、および利用可能なオプションについての詳細は、 virsh help save
, virsh help restore
, man 1 virsh
をそれぞれお読みください。
VM ゲスト のスナップショット機能は、 CPU やメモリ、デバイスの状態のほか、書き込み可能な全てのディスクの内容を含む、完全な仮想マシンのスナップショットです。仮想マシンのスナップショット機能を使用するには、接続されている全てのハードディスクが qcow2 形式である必要があるほか、少なくとも 1 つ以上のディスクが書き込み可能である必要があります。
スナップショットを使用することで、その時点でのマシンの状態を自由に復元できるようになります。これは特に、設定を誤ってしまった場合の巻き戻しや、多数のパッケージを誤ってインストールしてしまった場合の取り消しに便利な仕組みです。また、 VM ゲスト がシャットオフ中に採取されたスナップショットを適用した場合は、適用後に起動を行う必要があります。また、スナップショットの適用を行うと、現時点での状態が破棄されます。
スナップショット機能は KVM の VM ホストサーバ にのみ対応しています。
スナップショットの種類を説明するにあたって、下記のいくつかの用語を使用しています:
スナップショットを元の VM ゲスト の qcow2 ファイル内に保存する方式です。このファイルには、スナップショットで保存された情報と、スナップショットを採取してからの変更点の両方が記録されます。内部スナップショットの利点としては、必要な全ての情報が 1 つのファイル内に保存されていて、マシン間で複製や移動を行う手間が省けるという点にあります。
外部スナップショットでは、元の qcow2 ファイルを保存して読み込み専用とし、それとは別に新しく qcow2 ファイルを作成してそこに変更点を記録します。元のファイルは バッキング もしくは ベース ファイルと呼ばれ、新しく作成したほうのファイルは オーバーレイ もしくは 派生 ファイルと呼ばれます。外部スナップショットは、 VM ゲスト のバックアップを作成する際に便利です。ただし、外部スナップショットは 仮想マシンマネージャ ではサポートしておらず、 virsh
でも直接削除することができません。 QEMU での外部スナップショットについて、詳しくは 35.2.4項 「ディスクイメージの効率的な使用」 をお読みください。
VM ゲスト の動作中に採取するスナップショットを意味します。内部スナップショット形式での動作中スナップショットの場合、デバイスとメモリ、ディスクの各状態を保存することができます。 virsh
を利用した外部スナップショット形式での動作中スナップショットの場合は、メモリとディスクのうちいずれか、もしくはその両方の状態を保存することができます。
VM ゲスト がシャットオフ (シャットダウン) されている間に採取するスナップショットを意味します。ゲストが動作していない状態で採取することから、メモリも使用されていない状態になりますので、矛盾を一切発生させずに採取することができるようになります。
仮想マシンマネージャ では動作中スナップショットであってもオフラインスナップショットであっても、内部スナップショットにしか対応していません。
仮想マシンマネージャ でスナップショットの管理ビューを表示するには、まず 10.2.1.1項 「仮想マシンマネージャ を利用したグラフィカルコンソールの表示」 の手順で VNC のウインドウを表示します。その後、 › を選択するか、ツールバーから を選択します。
選択した VM ゲスト に対する既存のスナップショットの一覧が、ウインドウの左側に表示されます。現時点での最新のスナップショットには、緑色のチェックマークが付けられます。ウインドウの右側には、左側で選択しているスナップショットの詳細が表示されます。詳細にはスナップショットのタイトルとタイムスタンプのほか、採取時点での VM ゲスト の状態や説明などが表示されます。また、動作中スナップショットである場合には、その時点でのスクリーンショットも表示されます。なお、
の内容については、この表示から変更することができます。それ以外のスナップショットデータについては、変更できません。VM ゲスト に対して新しいスナップショットを採取するには、下記の手順を実施します:
オフラインスナップショットを採取する場合は、まず VM ゲスト をシャットダウンします。
VNC ウインドウ内の左下にある
ボタンを押します。ウインドウが表示されます。
欄にスナップショットの名前を入力します。必要であれば、 欄に詳細を記述します。名前は作成後に変更することはできません。後からスナップショットの状況がわかるような名前を入力してください。
を押すと採取が行われます。
選択した VM ゲスト のスナップショットを削除するには、下記の手順を実施します:
VNC ウインドウ内の左下にある
ボタンを押します。削除の確認メッセージが表示されますので、
を押します。選択したスナップショットで開始するには、下記の手順を実施します:
VNC ウインドウ内の左下にある
ボタンを押します。開始の確認メッセージが表示されますので、
を押します。virsh
を利用したスナップショットの作成と管理 #Edit source特定の VM ゲスト (下記では admin_server) に対するスナップショットの全一覧を表示するには、 snapshot-list
コマンドを使用します:
>
virsh snapshot-list --domain admin_server
名前 作成時間 状態
--------------------------------------------------------------------
sleha_12_sp2_b2_two_node_cluster 2016-06-06 15:04:31 +0200 shutoff
sleha_12_sp2_b3_two_node_cluster 2016-07-04 14:01:41 +0200 shutoff
sleha_12_sp2_b4_two_node_cluster 2016-07-14 10:44:51 +0200 shutoff
sleha_12_sp2_rc3_two_node_cluster 2016-10-10 09:40:12 +0200 shutoff
sleha_12_sp2_gmc_two_node_cluster 2016-10-24 17:00:14 +0200 shutoff
sleha_12_sp3_gm_two_node_cluster 2017-08-02 12:19:37 +0200 shutoff
sleha_12_sp3_rc1_two_node_cluster 2017-06-13 13:34:19 +0200 shutoff
sleha_12_sp3_rc2_two_node_cluster 2017-06-30 11:51:24 +0200 shutoff
sleha_15_b6_two_node_cluster 2018-02-07 15:08:09 +0100 shutoff
sleha_15_rc1_one-node 2018-03-09 16:32:38 +0100 shutoff
現時点での最新のスナップショットを表示するには、 snapshot-current
コマンドを使用します:
>
virsh snapshot-current --domain admin_server
Basic installation incl. SMT for CLOUD4
特定のスナップショットに関する詳細を表示するには、 snapshot-info
コマンドを使用します:
>
virsh snapshot-info --domain admin_server \
-name "Basic installation incl. SMT for CLOUD4"
名前: Basic installation incl. SMT for CLOUD4
ドメイン: admin_server
カレント: はい (yes)
状態: shutoff
場所: 内部
親: Basic installation incl. SMT for CLOUD3-HA
子: 0
子孫: 0
メタデータ: はい (yes)
VM ゲスト に対して内部スナップショットを採取するには、それが動作中スナップショットであってもオフラインスナップショットであっても、 snapshot-create-as
コマンドを使用します:
>
virsh snapshot-create-as --domain admin_server1 --name "Snapshot 1"2 \
--description "First snapshot"3
virsh
を使用することで、ゲストのメモリ状態またはディスク状態、もしくはその両方を外部スナップショットとして採取することができます。
ゲストのディスク状態の外部スナップショットを採取するには、それが動作中であってもオフラインであっても、 --disk-only
オプションを指定します:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --disk-only
--diskspec
オプションを指定することで、外部スナップショットのファイル作成方法を制御することができます:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" \
--disk-only --diskspec vda,snapshot=external,file=/path/to/snapshot_file
ゲストのメモリ状態の外部スナップショットを採取するには、 --live
および --memspec
オプションを指定します:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --live \
--memspec snapshot=external,file=/path/to/snapshot_file
ゲストのディスクとメモリ状態の両方を外部スナップショットとして採取するには、 --live
, --diskspec
, --memspec
の各オプションを組み合わせて指定します:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --live \
--memspec snapshot=external,file=/path/to/snapshot_file
--diskspec vda,snapshot=external,file=/path/to/snapshot_file
詳しくは man 1 virsh
内の SNAPSHOT COMMANDS セクション (英語) をお読みください。
外部スナップショットは virsh
では削除できません。 VM ゲスト の内部スナップショットを削除し、占有していたディスク領域を解放するには、 snapshot-delete
コマンドを使用します:
>
virsh snapshot-delete --domain admin_server --snapshotname "Snapshot 2"
指定したスナップショットで開始するには、 snapshot-revert
コマンドを使用します:
>
virsh snapshot-revert --domain admin_server --snapshotname "Snapshot 1"
現在のスナップショット (VM ゲスト を最後にシャットダウンした状態) を開始する場合は、スナップショットの名前ではなく、 --current
オプションを指定すれば十分です:
>
virsh snapshot-revert --domain admin_server --current
既定では、 virsh
による VM ゲスト の削除では、 XML 形式の設定ファイルのみを削除します。接続されているストレージは既定では削除されませんので、他の VM ゲスト に接続しなおして使用することもできます。 仮想マシンマネージャ を使用する場合は、同時にストレージファイルも削除することができます。
仮想マシンマネージャ 内にある VM ゲスト の項目を選択して、マウスの右ボタンを押します。
表示されたコンテキストメニューから、
を選択します。確認メッセージが表示されますので、再度
ボタンを押します。これにより、 VM ゲスト を恒久的に削除することができます。また、削除は取り消すことができません。仮想ディスクについても同時に削除したい場合は、
を選択します。こちらについても削除を取り消すことはできません。virsh
を利用した VM ゲスト の削除 #Edit sourceVM ゲスト を削除するには、まずシャットダウンしておく必要があります。動作中の場合、ゲストを削除することができません。シャットダウンに関する情報については、 10.3項 「VM ゲスト の状態変更 (開始/停止/一時停止)」 をお読みください。
virsh
を使用して VM ゲスト を削除するには、 virsh
undefine
VM_名 のように入力して実行します。
>
virsh undefine sles12
接続されているストレージファイルを自動的に削除するオプションは用意されていません。 libvirt でストレージファイルを管理している場合は、 8.2.1.4項 「ストレージプールからのボリュームの削除」 の手順に従って削除を行ってください。
仮想マシンマネージャ を起動して VM ホストサーバ に接続すると、動作中のゲストの CPU 使用率が表示されます。
このツールでは、ディスクやネットワークの使用率に関する情報も表示することができます。ただし、あらかじめ
で機能を有効化しておかなければなりません:virt-manager
を起動します。
› を選択します。
から のタブに切り替えます。
悲痛に応じて、監視したい項目を選択します。それぞれ
, , です。また、必要であれば
の値も調整します。ダイアログを閉じます。
あとは
› 以下にある項目を選択して、グラフを表示させてください。すると、ディスクやネットワークの統計情報が、 仮想マシンマネージャ のメインウインドウ内に表示されるようになります。
より詳しいデータを閲覧したい場合は、 VNC ウインドウからご確認ください。 VNC ウインドウの表示方法は 10.2.1項 「グラフィカルコンソールの表示」 で説明しています。ツールバーから を押すか、もしくは › を選択してください。統計情報は左側のメニュー内にある を選択すると、表示されるようになります。
virt-top
を利用した監視 #Edit sourcevirt-top
は、よく知られたプロセス監視ツールである top
に似たコマンドラインツールです。 virt-top
は libvirt を利用して、さまざまなハイパーバイザで動作する VM ゲスト の統計情報を表示することができます。 xentop
のようなハイパーバイザ固有のツールではなく、 virt-top
のような汎用ツールの使用をお勧めします。
既定では、 virt-top
は実行中の全ての VM ゲスト に対する統計情報を表示します。ここにはメモリの使用率 ( %MEM
) のほか、 CPU の使用率 ( %CPU
) とゲストの動作時間 ( TIME
) が表示されます。データは定期的に自動更新されます (既定では 3 秒間隔で更新されます) 。下記の例では、 VM ホストサーバ 内に合計 7 つの VM ゲスト が存在し、それらのうちの 4 つが停止されている状況を示しています:
virt-top 13:40:19 - x86_64 8/8CPU 1283MHz 16067MB 7.6% 0.5% 7 domains, 3 active, 3 running, 0 sleeping, 0 paused, 4 inactive D:0 O:0 X:0 CPU: 6.1% Mem: 3072 MB (3072 MB by guests) ID S RDRQ WRRQ RXBY TXBY %CPU %MEM TIME NAME 7 R 123 1 18K 196 5.8 6.0 0:24.35 sled12_sp1 6 R 1 0 18K 0 0.2 6.0 0:42.51 sles12_sp1 5 R 0 0 18K 0 0.1 6.0 85:45.67 opensuse_leap - (Ubuntu_1410) - (debian_780) - (fedora_21) - (sles11sp3)
既定での並び順は ID 順です。下記のキー入力を行うことで、並び順を変更することができます:
Shift–P : CPU の使用率 |
Shift–M : ゲストに割り当てているメモリ量 |
Shift–T : 時間 |
Shift–I : ID |
その他の情報をもとに並べ替えを行いたい場合は、 Shift–F を押して、表示される一覧から項目を選択してください。並び順を逆にしたい場合は、 Shift–R を押します。
virt-top
では、 VM ゲスト のデータをさまざまな形で表示することができます。これらは下記のキー入力を行うことで、即時に変更することができます:
0 : 既定の表示 |
1 : 物理 CPU の表示 |
2 : ネットワークインターフェイスの表示 |
3 : 仮想ディスクの表示 |
virt-top
には表示を変更するためのさまざまなキー入力や、プログラムの動作を変更するためのさまざまなコマンドラインが用意されています。詳しくは man 1 virt-top
をお読みください。
kvm_stat
を利用した監視 #Edit sourcekvm_stat
は、 KVM の性能イベントを追跡する際に使用するツールです。 /sys/kernel/debug/kvm
を監視する仕組みであるため、まずは debugfs をマウントする必要があります。 openSUSE Leap では既定でマウントされるように設定されていますが、何らかの理由でマウントされていない場合は、下記のように実行してマウントしてください:
>
sudo
mount -t debugfs none /sys/kernel/debug
kvm_stat
は、下記に示す 3 種類の動作モードが用意されています:
kvm_stat # 1 秒間隔で更新 kvm_stat -1 # 1 秒間情報採取して出力 kvm_stat -l > kvmstats.log # ログ形式で 1 秒間隔で更新 # (表計算プログラムなどに取り込むことができます)
kvm_stat
の出力例 #kvm statistics efer_reload 0 0 exits 11378946 218130 fpu_reload 62144 152 halt_exits 414866 100 halt_wakeup 260358 50 host_state_reload 539650 249 hypercalls 0 0 insn_emulation 6227331 173067 insn_emulation_fail 0 0 invlpg 227281 47 io_exits 113148 18 irq_exits 168474 127 irq_injections 482804 123 irq_window 51270 18 largepages 0 0 mmio_exits 6925 0 mmu_cache_miss 71820 19 mmu_flooded 35420 9 mmu_pde_zapped 64763 20 mmu_pte_updated 0 0 mmu_pte_write 213782 29 mmu_recycled 0 0 mmu_shadow_zapped 128690 17 mmu_unsync 46 -1 nmi_injections 0 0 nmi_window 0 0 pf_fixed 1553821 857 pf_guest 1018832 562 remote_tlb_flush 174007 37 request_irq 0 0 signal_exits 0 0 tlb_flush 394182 148
これらの値の解釈方法について、詳しくは https://clalance.blogspot.com/2009/01/kvm-performance-tools.html (英語) をお読みください。