libvirt は virtio ストレージを使用して Windows-UEFI ゲストを起動できません

libvirt は virtio ストレージを使用して Windows-UEFI ゲストを起動できません

私は Hyper-V Gen2 Win-Guest を持っており、libvirt を使用して KVM に移行する必要があります。qemu-img を使用して 1 つのゲストを 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 コマンドレット「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を取得し、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 は 2 つのディスク (QEMUDISK と Red Hat VirtIO SCSI ディスク デバイス) を表示します。vm をシャットダウンし、parus03.qcow2 を削除し、dc02 の "sata" を "virtio" に置き換えて、vm を起動します。正常に起動し、get-disk は "Red Hat VirtIO SCSI ディスク デバイス" を表示します。これで、必要なことが実現しました。

関連情報