GNU/Linux >> Linux の 問題 >  >> Cent OS

RHV – Qemu ゲスト エージェントの理解

Libvirt は、VM 内で実行される Qemu ゲスト エージェントを使用します。この投稿では、Qemu エージェントが KVM ホストとゲストの間の通信チャネルとして機能する方法について詳しく説明します。

通信プロトコル

VM OS の情報を取得したり、ゲスト OS にコマンドを発行したりするために使用される通信プロトコルは、Qemu Machine Protocol (QMP) です。 QMP は JSON ベースのプロトコルです。

たとえば、libvirt はゲストエージェントを使用して、ゲストからファイルシステムの詳細をフェッチします。ゲスト エージェントが動作しているかどうかを確認するには:

# virsh qemu-agent-command >vm_name> '{"execute": "guest-info"}'

例:

# virsh qemu-agent-command TestVM '{"execute": "guest-get-host-name"}' --pretty
Please enter your authentication name: vdsm@ovirt
Please enter your password:
{
"return": {
"host-name": "<VM FQDN>"
}
# virsh qemu-agent-command TestVM '{"execute": "guest-get-osinfo"}' --pretty
Please enter your authentication name: vdsm@ovirt
Please enter your password:
{
"return": {
"name": "Oracle Linux Server",
"kernel-release": "4.14.35-1902.300.11.el7uek.x86_64",
"version": "7.8",
"variant": "Server",
"pretty-name": "Oracle Linux Server 7.8",
"version-id": "7.8",
"variant-id": "server",
"kernel-version": "#2 SMP Tue Mar 17 17:11:47 PDT 2020",
"machine": "x86_64",
"id": "ol"
}
}

通信方法

ゲスト エージェントとホスト間の通信は、virtio-serial および isa-serial チャネル org.qemu.guest_agen.0 を介して行われます。

– VM ゲストからの qemu.guest_agent プロセス:

# ps auxwww |grep guest
root 811 0.0 0.0 44232 4572 ? Ss Feb22 0:51 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio -ports/org.qemu.guest_agent.0 --blacklist=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek ,guest-file-flush,guest-exec,guest-exec-status -F/etc/qemu-ga/fsfreeze-hook

– ホストから、対応するソケット ファイルも /var/lib/libvirt/qemu/channels/.org.ovirt.hosted-engine-setup.0:

に作成されます。
# file /var/lib/libvirt/qemu/channels/56f42910-82d1-4e14-b4a4-646d220567c7.org.ovirt.hosted-engine-setup.0
/var/lib/libvirt/qemu/channels/56f42910-82d1-4e14-b4a4-646d220567c7.org.ovirt.hosted-engine-setup.0: socket
# virsh -r dumpxml TestVM |grep guest_agent
<source mode='bind' path='/var/lib/libvirt/qemu/channels/56f42910-82d1-4e14-b4a4-646d220567c7.org.qemu.guest_agent.0'/>
<target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>

通信に問題がなければ、UNIX ソケットには「ESTAB」接続があります:

# ss |grep guest_agent
u_str ESTAB 0 0 /var/lib/libvirt/qemu/channels/56f42910-82d1-4e14-b4a4-646d220567c7.org.qemu.guest_agent.0 82797274 * 82971852
u_str ESTAB 0 0 /var/lib/libvirt/qemu/channels/9c798303-1c30-4965-b447-e1c12588db14.org.qemu.guest_agent.0 82944156 * 82971680

通信間隔

デフォルトでは、VDSM は QEMU ゲスト エージェント (qemu-ga) を 5 分ごとにポーリングして情報を取得します。 QEMU ゲスト エージェントが実行されておらず、5 分以内に応答する場合、libvirtd は「ゲスト エージェントが応答していません:QEMU ゲスト エージェントが接続されていません」のようなエラーを報告します。

その他

hmp と呼ばれる QMP のサブネットも利用できます。 「qemu-monitor-command」は、-hmp オプションにより、「hmp」形式で情報を交換する機能を備えています。 ovirt-guest-agent に接続されている virtio-serial ポートのステータスを確認するには:

# virsh qemu-monitor-command --hmp <Virtual Machine Name Here> 'info qtree'

例:

# virsh qemu-monitor-command --hmp TestVM 'info qtree'
Please enter your authentication name: vdsm@ovirt
Please enter your password:

dev: virtserialport, id "channel1"
chardev = "charchannel1"
nr = 2 (0x2)
name = "org.qemu.guest_agent.0"
port 2, guest on, host on, throttle off


Cent OS
  1. Windows – Qemu WindowsゲストとLinuxホスト間の共有フォルダー?

  2. DNS ゾーン ファイルについて

  3. chroot Jail を理解する

  1. Linux SCSI 予約について

  2. RedHat Virtualization (RHV) での Live Merge について

  3. RedHat Virtualization (RHV) のボリューム チェーンについて

  1. RHV – AdminPortal から VM をシャットダウンする方法

  2. RHV – Qemu ゲストエージェント (qemu-guest-agent) 機能

  3. RHV クラスターの移行ポリシーについて