我有 hyper-v gen2 win-guest,需要使用 libvirt 在 kvm 上迁移。我使用 qemu-img 将一个客户机从 vhdx 转换为 qcow2,使用 qemu-system 和 hda-drive 启动它,安装 virtio 驱动程序。之后,我使用以下命令行使用 virtio 存储启动它:
qemu-system-x86_64 -machine type=pc-q35-2.8 \
-accel kvm -cpu host \
--bios /usr/share/OVMF/OVMF_CODE.fd \
-m 2048 -smp 2 \
-drive file=/var/lib/libvirt/image
/dc02.qcow2,index=0,media=disk,if=virtio \
-spice addr=192.168.69.108,port=5910,disable-ticketing
客户机成功启动,powershell cmdlet“get-disk”显示“Red Hat VirtIO SCSI 磁盘设备”,一切看起来都很好。
下一个命令是:
virt-install --name dc02 --memory 1024,maxmemory=2048 \
--vcpus 1 --cpu host --boot uefi,hd,network \
--disk /var/lib/libvirt/images/dc02.qcow2,bus=virtio \
--network bridge=br.27,model=virtio --video=qxl \
--memballoon virtio --hvm --controller usb3 \
--machine=q35 --graphics spice,listen=192.168.69.108
客户机启动后进入引导循环,出现 BSOD“无法访问的启动设备”,即使在安全启动下也无法启动 将 virtio 更改为 sata 有助于启动客户机,但我需要 virtio日志用于启动循环。我哪里出错了?
我找到了解决方案,非常简单。我决定从另一个 win-guest 中获取 virtio-drive,并将其附加到有问题的 guest 上,就像我在第一步中使用 qemy-system 所做的那样
virt-install --name dc02 --memory 1024,maxmemory=2048 --vcpus 1 \
--cpu host-passthrough --boot uefi,hd,network \
--disk /var/lib/libvirt/images/dc02.qcow2,bus=sata \
--disk /var/lib/libvirt/images/parus03.qcow2,bus=virtio \
--network bridge=br.27,model=virtio --video=qxl \
--memballoon virtio --hvm --controller usb3 \
--machine=q35 --graphics spice,listen=192.168.69.108
虚拟机成功启动,get-disk 显示两个磁盘:QEMUDISK 和 Red Hat VirtIO SCSI 磁盘设备。我关闭虚拟机,删除 parus03.qcow2,将 dc02 的“sata”替换为“virtio”,然后启动虚拟机。虚拟机成功启动,get-disk 显示“Red Hat VirtIO SCSI 磁盘设备”。所以我得到了我想要的。