私は SUSE 11 SP4 VM を持っていますが、最初は PV モードで Xen 上で動作していました。現在は KVM に移行しています。私の通常のアプローチは、ターゲット VM で任意の Linux をネットブートし、ターゲット OS のルートをマウントし、chroot して initramfs を再構築し、VM をターゲット OS で再起動することです。
SLES 11 SP4 には何かが欠けているようです。initramfs はその後、ルートをマウントするための vbd デバイスを見つけることができません。ただし、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>
そして私の virt-manager ではここで大きな変更を加えることができません。
間違っているかもしれませんが、主な違いは 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 ルート ポートをサポートするには古すぎる可能性はありますか?
- VM 構成を簡素化して、ストレージをホスト ブリッジに直接接続することは可能ですか?
- ターゲット環境で initramfs を再構築しましたが、構成ファイルには何も追加しませんでした。initramfs を再構築するときに何か (フックまたはドライバー) が不足しているのでしょうか?
答え1
i440fx マシン タイプで VM を作成しました。他の VM が使用している q35 マシン タイプでもう一度試してください。