第11章 QEMU ゲストエージェントおよび SPICE エージェントによる仮想化の強化

QEMU ゲストエージェントや SPICE エージェントなどの Red Hat Enterprise Linux のエージェントは、システム上で仮想化ツールをより最適に実行するのに役立ちます。本章では、これらのエージェントについて説明します。

注記

ホストとゲストのパフォーマンスを最適化とチューニングを強化するには、『Red Hat Enterprise Linux 7 仮想化のチューニングと最適化ガイド』を参照してください。

11.1. QEMU ゲストエージェント

QEMU ゲストエージェントは、ゲスト内で実行され、ホストマシンが libvirt を使用してゲストオペレーティングシステムに対してコマンドを実行できるようにします。これにより、ファイルシステムのフリーズおよびフリーズ解除などの機能を容易に実行できます。ゲストオペレーティングシステムはその後、これらのコマンドに非同期的に応答します。QEMU ゲストエージェントパッケージの qemu-guest-agent はデフォルトで Red Hat Enterprise Linux 7 にインストールされます。
このセクションでは、libvirt コマンドとゲストエージェントが利用できる各種オプションについて説明します。

重要

信頼されるゲストによって実行される場合にのみ、QEMU ゲストエージェントは安全であることに注意してください。信頼されていないゲストはゲストエージェントのプロトコルを悪意のある方法で無視したり、これを誤用したりする可能性があります。ホスト上のサービス拒否攻撃を回避するためのビルトイン保護プログラムは存在しますが、ホストは、操作が予想どおりに実行されるためにゲストの連携を必要とします。
QEMU ゲストエージェントは、ゲストの実行中に仮想 CPU (vCPU) を有効/無効にするために使用できるため、ホットプラグおよびホットアンプラグ機能を使用せずに vCPU の数を調整できます。詳細は、「仮想 CPU 数の設定」を参照してください。

11.1.1. QEMU ゲストエージェントとホスト間の通信設定

ホストマシンは、ホストとゲストマシン間の VirtIO シリアル接続で QEMU ゲストエージェントと通信します。VirtIO シリアルチャンネルは、キャラクターデバイスドライバー (通常 Unix ソケット) 経由でホストに接続し、ゲストはこのシリアルチャンネルでリッスンします。

注記

qemu-guest-agent は、ホストが VirtIO シリアルチャンネルをリッスンしているかどうかを検知しません。ただし、現時点でこのチャンネルはホストとゲスト間のイベントについてリッスンするために使用されているため、リスナーなしのチャンネルへの書き込みによってゲスト仮想マシンで問題が発生する可能性は極めて低くなります。さらに、qemu-guest-agent プロトコルには同期マーカーが含まれ、これによりホスト物理マシンは、コマンドの実行時にゲスト仮想マシンを同期に戻すよう強制できます。libvirt はこれらのマーカーをすでに使用しているため、ゲスト仮想マシンは保留状態の未達の応答を安全に破棄することができます。

11.1.1.1. Linux ゲスト上での QEMU ゲストエージェントの設定

QEMU ゲストエージェントは実行中またはシャットダウンした仮想マシンで設定できます。実行中のゲストに設定される場合、ゲストはゲストエージェントをすぐに使用し始めます。ゲストがシャットダウンしている場合は、QEMU ゲストエージェントが次回の起動時に有効にされます。
ゲストと QEMU ゲストエージェント間で通信を設定するには、virsh または virt-manager を使用できます。以下に、QEMU ゲストエージェントを Linux ゲストで設定する方法を説明します。

手順11.1 シャットダウンした Linux ゲストで virsh を使用したゲストエージェントとホスト間の通信設定

  1. 仮想マシンをシャットダウンします。

    仮想マシン (この例の名前は rhel7) が QEMU ゲストエージェントの設定前にシャットダウンしていることを確認します。
    # virsh shutdown rhel7 
  2. QEMU ゲストエージェントチャンネルをゲスト XML 設定に追加します。

    QEMU ゲストエージェントの詳細を追加できるようゲストの XML ファイルを編集します。
    # virsh edit rhel7
    以下をゲストの XML ファイルに追加し、変更を保存します。
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  3. 仮想マシンを起動します。

    # virsh start rhel7
  4. ゲストに QEMU ゲストエージェントをインストールします。

    QEMU ゲストエージェントがゲスト仮想マシンにまだインストールされていない場合は、これをインストールします。
    # yum install qemu-guest-agent
  5. ゲスト内の QEMU ゲストエージェントを起動します。

    ゲスト内の QEMU ゲストエージェントサービスを起動します。
    # systemctl start qemu-guest-agent
別の方法として、以下のステップに従って QEMU ゲストエージェントを実行中のゲストで設定することもできます。

手順11.2 実行中の Linux ゲストでのゲストエージェントとホスト間の通信設定

  1. QEMU ゲストエージェントの XML ファイルを作成します。

    # cat agent.xml
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  2. QEMU ゲストエージェントを仮想マシンに割り当てます。

    以下のコマンドを実行して、QEMU ゲストエージェントを実行中の仮想マシン (この例の名前は rhel7) に割り当てます。
    # virsh attach-device rhel7 agent.xml
  3. ゲストに QEMU ゲストエージェントをインストールします。

    QEMU ゲストエージェントがゲスト仮想マシンにまだインストールされていない場合は、これをインストールします。
    # yum install qemu-guest-agent
  4. ゲスト内の QEMU ゲストエージェントを起動します。

    ゲスト内の QEMU ゲストエージェントサービスを起動します。
    # systemctl start qemu-guest-agent

手順11.3 virt-manager を使用した QEMU ゲストエージェントとホスト間の通信設定

  1. 仮想マシンをシャットダウンします。

    QEMU ゲストエージェントの設定前に仮想マシンがシャットダウンしていることを確認します。
    仮想マシンをシャットダウンするには、仮想マシンマネージャー の仮想マシンの一覧からこれを選択し、メニューバーにある光スイッチのアイコンをクリックします。
  2. QEMU ゲストエージェントチャンネルをゲストに追加します。

    ゲストのウィンドウの先頭にある電球アイコンをクリックして仮想マシンのハードウェアの詳細画面を開きます。
    ハードウェアを追加 ボタンをクリックして 新しい仮想ハードウェアを追加 ウィンドウを開き、チャンネル を選択します。
    名前 ドロップダウンリストから QEMU ゲストエージェントを選択し、完了 をクリックします。
    QEMU ゲストエージェントチャンネルデバイスの選択

    図11.1 QEMU ゲストエージェントチャンネルデバイスの選択

  3. 仮想マシンを起動します。

    仮想マシンを起動するには、仮想マシンマネージャー の仮想マシンの一覧から目的のマシンを選択し、続いてメニューバーにある をクリックします。
  4. ゲストに QEMU ゲストエージェントをインストールします。

    QEMU ゲストエージェントがまだゲスト仮想マシンにインストールされていない場合は、virt-manager でゲストを開き、QEMU ゲストエージェントをインストールします。
    # yum install qemu-guest-agent
  5. ゲスト内の QEMU ゲストエージェントを起動します。

    ゲスト内の QEMU ゲストエージェントサービスを起動します。
    # systemctl start qemu-guest-agent
QEMU ゲストエージェントが rhel7 仮想マシンに設定されました。