簡介
之前介紹過qemu傳輸文件,使用的掛載 / samba方式 :Qemu和宿主機不使用外網進行文件傳輸。
這是一種方式,這里還有另一種方式:使用Qemu-Guest-Agent,后面簡稱qga。
官網介紹:https://www.qemu.org/docs/master/interop/qemu-ga.html
安裝
這里有一篇參考文章,會比我下面介紹的相對復雜一點,但也可以完成操作。
參考文章:https://www.easystack.cn/doc/ComputingService/6.1.1/zh-cn/FAQs/DeployQGA.html
一、Linux的Qemu機器
直接install命令即可,查看上面的參考鏈接即可。
二、Windows的Qemu機器
Windows的Qemu機器:需要安裝好virtio-serial driver,下面詳細介紹一下:
首先下載該文件(1積分),這個文件我已經測試了Windows7-10、Centos7-8、Ubuntu16-24可用:Qemu-Guest-Agnet整理包
這是一個Windows整理后的qga包,包含amd64.zip和qemu-ga.zip兩個文件,請都解壓出來。
1、amd64:首先安裝證書,管理員運行cmd,命令:pnputil -I -a vioser.inf
2、qemu-ga:將qemu-ga目錄放到C:\Program Files下,管理員運行cmd,命令:qemu-ga -s install
3、然后檢查【服務】,是否包含以下兩個服務,如果存在,則說明安裝成功,將兩個內容全部設置為自動啟動
QEMU Guest Agent
QEMU Guest Agent VSS Provider
4、驗證
轉為qcow2上傳到linux服務器,運行以下指令(假設該qcow2文件名字為Windows10.qcow2)
運行以下內容
qemu-system-x86_64 -name test -hda Windows10.qcow2 -m 4096M -smp cpus=2,sockets=1 -enable-kvm -netdev user,id=net0 -device e1000,netdev=net0 -chardev socket,path=/tmp/test.sock,server=on,wait=off,id=qga0 -device virtio-serial -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 -machine usb=on -device usb-tablet
成功開機后,有可能QEMU Guest Agent服務并沒有成功運行,那么此時到【服務】中手動開啟,如果能手動開啟成功,則沒問題(下次就能自動開啟了)。
此時,使用命令socat - unix-connect:/tmp/test.sock
,連接上以后,輸入一些命令測試一下,如:{"execute":"guest-info"}
。
使用
前面安裝沒問題以后,就可以用代碼去連接socket文件并執行內容了。這里寫幾個demo
1、獲取系統信息
import asyncio
import jsonclass QEMUGuestAgent(object):endpoint: strdef __init__(self, endpoint):self.endpoint = endpointasync def execute(self, command, timeout=2.0):try:reader, writer = await asyncio.open_unix_connection(self.endpoint)writer.write(json.dumps(command).encode())response = await asyncio.wait_for(reader.readline(), timeout)writer.close()return json.loads(response)except ConnectionAbortedError:print(