لینوکس ۳۰۵؛ شب ۱۳: VirtIO، firmware و QEMU Guest Agent
فهرست نوشته
guest به device مجازی driver میخواهد. امشب boot firmware، driverهای VirtIO و کانال Guest Agent را جدا میکنیم تا نبود Agent با خرابی VM اشتباه نشود.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 351.3 آزمون 305-300.
محیط: guest لینوکسی شب ۱۲؛ نصب Guest Agent داخل guest و افزودن channel در اجرای QEMU خاموش انجام میشود.
VirtIO برای NIC، block، balloon و serial رابطهای متفاوت دارد. OVMF firmware UEFI برای QEMU است و state متغیرهای NVRAM باید برای هر guest مستقل باشد؛ یک VARS writable مشترک به چند VM نده. این دوره baseline cloud image BIOS-compatible دارد؛ تغییر firmware یک branch با boot disk سازگار است.
داخل guest:
lspci -nn
lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINTS
sudo apt install qemu-guest-agent
برای اجرای مستقیم QEMU، بعد از shutdown این گزینهها را به فرمان شب ۱۲ اضافه کن؛ AGENT_SOCK مسیر absolute در directory خصوصی host است:
-chardev socket,path="$AGENT_SOCK",server=on,wait=off,id=agent0 \
-device virtio-serial-pci \
-device virtserialport,chardev=agent0,name=org.qemu.guest_agent.0
این یک قطعهٔ آرگومان است، فرمان مستقل shell نیست. unit Agent ممکن است static/device-activated باشد؛ داخل guest با systemctl status qemu-guest-agent و وجود virtio port بررسی کن. لازم نیست enable کردن unit static را با force حل کنی.
دسترسی Agent#
Agent APIهایی مثل اطلاعات guest و freeze فایلسیستم دارد؛ socket آن به مدیر میزبان قدرت میدهد و نباید عمومی شود. qemu-ga با QMP monitor یک پروتکل و وظیفه نیست. در libvirt شب ۱۷ channel XML درست ایجاد میشود و virsh qemu-agent-command برای guest-ping قابل استفاده است.
آزمون: boot کامل، deviceهای VirtIO و وضعیت Agent را ثبت کن. نبود Agent نباید دلیل حذف disk یا خاموش کردن همهٔ policyهای میزبان شود.
بازگشت: guest را shutdown و گزینههای channel یا branch firmware را به نسخهٔ قبلی برگردان؛ NVRAM قبلی همراه disk درست لازم است.
منبع: QEMU Guest Agent ، VirtIO در QEMU ، firmware در libvirt .