
我已經複製(使用 dd 命令)在 Xen 伺服器上運行的 Debian7 VM 的整個磁碟。我能夠將原始圖像轉換為 kvm 格式 (qemu-img)。我已經建立了新的虛擬機器並附加了磁碟映像(使用 KVM)。在嘗試啟動失敗(只是黑屏)後,我決定下載 iso(Debian7) 並啟動到救援模式。使用救援模式,我重新安裝了核心 (3.2.0-4-amd64) 並更新了 initramfs。我還在 /etc/modules 中添加了一些行:
alias eth0 pcnet32
alias scsi_hostadapter mptbase
alias scsi_hostadapter2 mptspi
alias scsi_hostadapter3 ata_piix
alias scsi_hostadapter4 virtio_blk
然而,當我嘗試啟動時,我得到的只是:
Loading Linux 3.2.0-4-amd64
Loading initial ramdisk
我擁有執行 VM 的 root 存取權限,但無法存取 xen 虛擬機器管理程序
我可以做些什麼來在我的 KVM/virtualbox/ESXi 上啟動此虛擬機器嗎?
問題標示 VMware 標籤,因為最後我要把它放在 VMware 上。我正在使用 kvm 來了解從 Xen 導入的規則(para 與虛擬化)。
編輯2020年4月1日
您好,Eblock,謝謝您的建議。我按照您的文章檢查了來源VM上可用的virtio模組列表,如下所示:
# find /lib/modules/ -name *virt*
/lib/modules/3.2.0-4-amd64/kernel/net/9p/9pnet_virtio.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/net/virtio_net.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/scsi/virtio_scsi.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/block/virtio_blk.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/virtio
/lib/modules/3.2.0-4-amd64/kernel/drivers/virtio/virtio_pci.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/virtio/virtio_ring.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/virtio/virtio.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/virtio/virtio_balloon.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/char/virtio_console.ko
/lib/modules/3.2.0-4-amd64/kernel/drivers/char/hw_random/virtio-rng.ko
/lib/modules/3.2.0-4-amd64/kernel/sound/pci/oxygen/snd-virtuoso.ko
然後我將這些 virtio 模組新增到 /etc/modules 和 /etc/initramfs-tools/modules 中,並使用 initramfs-update 指令更新了 initramfs(在救援模式下)。現在,我的 KVM 來賓 Debian VM(目前從 CD 以救援模式運行)顯示已加載的模組(下圖,遺憾的是無法從 KVM 螢幕複製貼上文字):
然而,啟動虛擬機器仍然沒有運氣:(我得到的是:
Decompressing Linux... Parsing ELF Done
Booting the kernel...
還有什麼我該嘗試的嗎?使用內建 virtio 模組編譯核心?
答案1
一切都很好,VM 啟動並正確啟動所有服務(相當多)。事實證明,eblock 是對的:向核心和 initrd 添加模組就足夠了。一個缺少的部分是 ttyS0 而不是 grub 中配置的 tty0(“xen 方式”,因為 xen 透過“S”連接埠連接),這是缺少通常的引導步驟清單的原因。還有一個問題是 Mingetty 重生太快(導致無休止的“5 分鐘延遲”),所以我在 /etc/inittab 中切換到 tty:
1:2345:respawn:/sbin/getty tty1
2:2345:respawn:/sbin/getty tty2
....
一切都很好,謝謝 eblock