我已经复制(使用 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-guest 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