Eu tenho o SUSE 11 SP4 VM, inicialmente estava trabalhando no Xen no modo PV. Agora estou movendo para KVM. Minha abordagem usual é inicializar qualquer Linux na VM de destino, montar a raiz do sistema operacional de destino, chroot e reconstruir o initramfs e, em seguida, reinicializar a VM no sistema operacional de destino.
O SLES 11 SP4 parece faltar algo porque depois disso o initramfs não consegue encontrar nenhum dispositivo vbd para montar o root. No entanto, consegui executá-lo via comando qemu direto no host KVM:
qemu-kvm -m 32768 -smp 8 -device virtio-net-pci,mac=42:5f:96:48:39:fa,netdev=vmnic -netdev tap,id=vmnic,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown -nographic -serial mon:stdio -drive file=/dev/lvm/vm,if=none,id=drive0,format=raw -device virtio-blk-pci,drive=drive0,scsi=off
e funciona bem.
A configuração KVM (relacionada ao disco) se parece com isso:
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" io="native"/>
<source dev="/dev/lvm/vm"/>
<target dev="vda" bus="virtio"/>
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
</disk>
<controller type="pci" index="3" model="pcie-root-port">
<model name="pcie-root-port"/>
<target chassis="3" port="0xa"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
</controller>
e meu virt-manager não me permitem fazer mudanças significativas aqui.
Posso estar errado aqui, mas acho que a principal diferença é a estrutura dos dispositivos PCI, de modo que o initramfs funciona de uma maneira, mas não de outra. Eu comparei dispositivos PCI:
Árvore de dispositivos encontrada na VM que foi executada diretamente via comando qemu:
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Device 1234:1111 (rev 02)
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device
Árvore de dispositivos encontrada em qualquer outra VM KVM (mesmo host):
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller
00:01.0 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.1 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.2 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.3 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.4 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.5 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.6 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:01.7 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
01:00.0 Ethernet controller: Red Hat, Inc. Virtio network device (rev 01)
02:00.0 USB controller: Red Hat, Inc. QEMU XHCI Host Controller (rev 01)
03:00.0 SCSI storage controller: Red Hat, Inc. Virtio block device (rev 01)
04:00.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon (rev 01)
05:00.0 Unclassified device [00ff]: Red Hat, Inc. Virtio RNG (rev 01)
08:00.0 SCSI storage controller: Red Hat, Inc. Virtio block device (rev 01)
Aqui eu vejo a diferença: qemu permite anexar armazenamento à ponte do host PCI raiz, mas no KVM ele está sempre conectado à porta raiz QEMU PCIe.
Minhas perguntas são:
- É possível que o SLES 11 seja muito antigo para suportar a porta QEMU PCIe Root?
- É possível facilitar a configuração da VM para anexar o armazenamento diretamente à ponte do host?
- Eu reconstruo o initramfs no ambiente de destino, não adicionando nada aos arquivos de configuração. Estou faltando algo (ganchos ou drivers) ao reconstruir o initramfs?