虛擬機配置里添加virtio serial端口
#virsh edit instance-name
devices里添加下面這段配置,
1 <channel type='unix'> 2 <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0.instance-name.sock'/> 3 <target type='virtio' name='org.qemu.guest_agent.0'/> 4 <address type='virtio-serial' controller='0' bus='0' port='1'/> 5 </channel>
安裝Qemu Guest Agent服務
#wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
#yum install virtio-win
安裝virtio-win包,virtio-win里包含windows virtio設備驅動,及qemu-ga的安裝包。
將msi安裝文件和virtio-win.iso拷貝到windows下。
virtio-win.iso包含各個windows版本下的virtio serial驅動,安裝對應版本的驅動。
安裝對應版本qemu-ga.msi,至此,qga安裝完畢。
qga功能擴展
搭建編譯環境:
-
rpm -ivh epel-release
-
下載 Microsoft VSS SDK: http://www.microsoft.com/en-us/download/details.aspx?id=23490
-
提取Microsoft VSS SDK的源文件(qemu/scripts下提供了extract-vsssdk-headers,也可以在windows下解壓后拷貝到linux上)
-
wget http://wiki.qemu-project.org/download/qemu-2.6.0-rc1.tar.bz2
-
yum install -y mingw64-pixman
-
yum install -y mingw64-glib2
-
yum install -y mingw64-gmp
-
yum install -y mingw64-SDL
-
yum install -y mingw64-pkg-config
-
./configure --enable-guest-agent --with-vss-sdk=/vss_path --cross-prefix=x86_64-w64-mingw32-
-
make qemu-ga.exe
添加功能示例(添加內存使用率檢測)
編輯qapi-schema.json,添加自定義結構體及命令聲明。
1 ## 結構體聲明 2 # @GuestMemInfo 3 # 4 # Information about Memory usage. 5 # 6 # @total: total size of Memory 7 # 8 # @usage: Memory usage 9 # 10 # Since 2.6 11 ## 12 { 'struct': 'GuestMemInfo', 13 'data': { 'total': 'int', 'usage': 'int' } } 14 15 ## 命令聲明 16 # @guest-get-mem-usage: 17 # 18 # Get the memory utilization rate. 19 # 20 # Returns: @GuestMemInfo on success. 21 # 22 # Since 2.6 23 ## 24 { 'command': 'guest-get-mem-usage', 25 'returns': 'GuestMemInfo' }
在commands-win32.c中添加命令實現:
1 GuestMemInfo *qmp_guest_get_mem_usage(Error **errp) 2 { 3 MEMORYSTATUS ms; 4 GuestMemInfo *meminfo = g_new0(GuestMemInfo, 1); 5 GlobalMemoryStatus(&ms); 6 meminfo->usage = (int64_t)ms.dwMemoryLoad; 7 meminfo->total = (int64_t)ms.dwTotalPhys; 8 return meminfo; 9 }
在commands-posix.c中添加命令實現(直接返回QERR_UNSUPPORTED錯誤):
1 GuestMemInfo *qmp_guest_get_mem_usage(Error **errp) 2 { 3 error_setg(errp, QERR_UNSUPPORTED); 4 }
重新編譯qemu-ga.exe,替換C:\Program Files\qemu-ga下的qemu-ga.exe,重啟服務即可。
(dll依賴,在/usr/x86_64-w64-mingw32/sys-root/mingw/bin/下可找到。)
參考文獻:
http://wiki.qemu.org/Features/QAPI/GuestAgent
http://wiki.libvirt.org/page/Qemu_guest_agent
http://fedoraproject.org/wiki/Windows_Virtio_Drivers
http://lists.gnu.org/archive/html/qemu-discuss/2014-11/msg00027.html