我有 SUSE 11 SP4 VM,最初它在 Xen 上以 PV 模式運行。現在我將其轉移到KVM。我通常的方法是透過網路啟動目標虛擬機器中的任何 Linux,掛載目標作業系統的根目錄,chroot 並重建 initramfs,然後將虛擬機器重新啟動到目標作業系統。
SLES 11 SP4 似乎缺少一些東西,因為之後 initramfs 找不到任何 vbd 裝置來掛載 root。不過,我已經設法在 KVM 主機上透過直接 qemu 命令來運行它:
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 指令直接運行的 VM 上找到的設備樹:
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 VM(同一主機)上找到的設備樹:
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 Root 連接埠?
- 是否可以簡化虛擬機器配置以將儲存空間直接連接到主機橋?
- 我在目標環境中重建 initramfs,沒有為設定檔添加任何內容。重建 initramfs 時我是否缺少某些東西(鉤子或驅動程式)?
答案1
您使用 i440fx 機器類型建立了 VM。使用 q35 機器類型重試,這是您的其他虛擬機器使用的機器類型。