У меня есть виртуальная машина SUSE 11 SP4, изначально она работала на Xen в режиме PV. Теперь я перевожу ее на KVM. Мой обычный подход — это сетевая загрузка любого Linux в целевой виртуальной машине, монтирование корня целевой ОС, chroot и пересборка initramfs, затем перезагрузка виртуальной машины в целевую ОС.
SLES 11 SP4, похоже, чего-то не хватает, потому что после этого initramfs не может найти ни одного vbd-устройства для монтирования root. Однако мне удалось запустить его с помощью прямой команды qemu на хосте 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
и это работает отлично.
Конфигурация KVM (связанная с диском) выглядит так:
<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>
и мой вирт-менеджер не позволяет мне вносить здесь существенные изменения.
Я могу ошибаться, но я думаю, что основное отличие в структуре устройств PCI, поэтому initramfs работает одним способом, а не другим. Я сравнил устройства PCI:
Дерево устройств, найденное на виртуальной машине, которая была запущена напрямую с помощью команды 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
Дерево устройств, найденное на любой другой виртуальной машине KVM (тот же хост):
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)
Здесь я вижу разницу: qemu позволяет подключать хранилище к корневому мосту PCI хоста, но в KVM оно всегда подключено к корневому порту QEMU PCIe.
У меня есть вопросы:
- Возможно ли, что SLES 11 слишком устарел для поддержки корневого порта QEMU PCIe?
- Можно ли упростить настройку виртуальной машины, напрямую подключив хранилище к мосту хоста?
- Я перестраиваю initramfs в целевой среде, ничего не добавляя в файлы конфигурации. Я что-то упускаю (хуки или драйверы) при перестройке initramfs?
решение1
Вы создали ВМ с типом машины i440fx. Попробуйте еще раз с типом машины q35, который использует ваша другая ВМ.