Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

QEMU ゲストエージェント、SPICE エージェントなどの Red Hat Enterprise Linux のエージェントをデプロイすると、仮想化ツールをシステムでより最適に実行できます。この章では、これらのエージェントについて説明します。
注記
ホストおよびゲストのパフォーマンスをさらに最適化および調整する方法は、Red Hat Enterprise Linux 7 Virtualization Tuning and Optimization Guide を参照してください。

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 プロトコルには、コマンド実行時にホスト物理マシンがゲスト仮想マシンを強制的に再同期させる同期マーカー (synchronization marker) が含まれ、libvirt がこのマーカーをすでに使用しているため、ゲスト仮想マシンは、保留中の未配信の応答を安全に破棄することができます。

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

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

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

  1. 仮想マシンのシャットダウン

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

    ゲストの XML ファイルを編集して、QEMU ゲストエージェントの詳細を追加します。
    # 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 ゲストエージェントを設定する前に、仮想マシンがシャットダウンしていることを確認します。
    仮想マシンをシャットダウンするには、Virtual Machine Manager の仮想マシン一覧から仮想マシンを選択し、メニューバーのライトスイッチアイコンをクリックします。
  2. QEMU ゲストエージェントチャネルをゲストに追加します。

    ゲストウィンドウ上部の電球アイコンをクリックして、仮想マシンのハードウェアの詳細を開きます。
    Add Hardware ボタンをクリックして Add New Virtual Hardware ウィンドウを開き、Channel を選択します。
    Name ドロップダウンリストから QEMU ゲストエージェントを選択し、Finish をクリックします。

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

    QEMU ゲストエージェントチャネルデバイスの選択
  3. 仮想マシンの起動

    仮想マシンを起動するには、Virtual Machine Manager の仮想マシンリストから仮想マシンを選択し、メニューバーの をクリックします。
  4. ゲストに QEMU ゲストエージェントをインストールします。

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

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