如何导入 Linux 虚拟机(RHEL、CentOS、SUSE、Debian、Ubuntu)
将其他虚拟化平台中的 Linux 虚拟机导入 VergeOS,并通过重建 initramfs 配置 virtio 驱动,以便在 RHEL、CentOS、SUSE、Debian 和 Ubuntu 上正常启动。
概述
本指南说明如何将其他虚拟机管理程序中的 Linux 虚拟机导入到 VergeOS 中。它解决了迁移后 VM 无法启动或缺少网络连接等潜在问题,并提供了用于重新生成 initramfs 的特定发行版说明。
前提条件
可访问 VergeOS 和 VergeOS UI。
熟悉虚拟机管理程序环境和 VM 配置。
导入的 VM 文件必须位于 VergeOS 环境中。
步骤
1. 更新 VM 硬件配置
将所有硬盘更改为
virtio-scsi:在 VergeOS UI 中,进入该 VM 的设置。
对于每个硬盘,将接口更改为
virtio-scsi以获得最佳性能和兼容性。
将所有 NIC 更改为
virtio:确保所有网络接口卡(NIC)都设置为
virtio以增强网络支持。
调整启动顺序:
确保操作系统磁盘列为 ID 0 在启动顺序中。
2. 启动进入救援模式
启动 VM:
打开 VM 电源,并在启动过程中按住 左 Shift 键以进入 GRUB 启动菜单。
选择救援模式:
在 GRUB 菜单中,选择救援模式以启动到最小恢复环境。
SUSE/openSUSE 替代方案
如果您无法从 GRUB 启动到救援模式(SLES15 和 openSUSE Leap 15 上常见),请将安装 ISO 挂载到 VM 并从其启动。该 ISO 会提供“Rescue System”选项。
3. 挂载根文件系统并进入 chroot
RHEL 9 及以上版本
默认情况下,RHEL 9 系列的 VM(例如 RHEL、AlmaLinux 9、Rocky Linux 9、CentOS Stream 9)使用一个 LVM 配置文件,根据硬件 ID 显式将设备列入白名单。如果导入 VM 时未保留磁盘硬件 ID/序列号,请运行 pvscan --cache 以及 vgchange -ay 以强制 LVM 重新扫描所有块设备。请参阅知识库文章: RHEL 9 系列虚拟机在克隆或快照还原后无法启动 以获取更多信息。
进入救援模式后,以 root 身份登录并挂载根文件系统。
查找根分区:
如果您不知道哪个分区包含根文件系统,请列出所有可用分区:
对于使用 LVM 的系统,列出所有逻辑卷:
挂载根分区:
将根分区或逻辑卷挂载到
/mnt:将
<device_name>并将 <device_name> 替换为您的根分区(例如,sda2,mapper/vg0-root).验证挂载:
通过列出其内容,检查您是否挂载了正确的文件系统:
您应该会看到如下目录:
/root,/boot,/home,/etc,并/var.绑定虚拟文件系统:
使用以下 for 循环来绑定所需的虚拟文件系统:
或者,分别挂载它们:
对于 EFI/UEFI 系统,还要挂载 EFI 分区:
请将 /dev/sdX1 替换为你的实际 EFI 分区(使用 lsblk 或 fdisk -l 检查)。
chroot 进入已挂载的文件系统:
挂载其余文件系统:
进入 chroot 后,挂载 fstab 中定义的任何其他分区:
4. 重建 initramfs
进入系统的 chroot 环境后,使用所需的 virtio 驱动程序重新生成 initramfs。
RHEL / CentOS / Fedora / SUSE(使用 dracut)
运行以下命令以重新生成 initramfs:
这会添加以下驱动程序: virtio_blk (块设备), virtio_net (网络设备)和 virtio_pci (PCI 总线)到 initramfs。
Debian / Ubuntu(使用 update-initramfs)
如果 dracut 不可用(Debian 10 和 Ubuntu 上常见),请使用 update-initramfs 代替:
将 virtio 模块添加到 initramfs 配置中:
重新生成 initramfs:
5. 重启并验证
退出 chroot 环境:
重启 VM:
验证启动和网络连接:
确认 VM 能成功启动,并且通过以下设备网络连接正常:
virtioNIC。
故障排除
常见问题
VM 无法启动:
解决方案:请再次检查 VM 设置中的启动顺序。操作系统磁盘必须设置为 ID 0.
没有网络连接:
解决方案:确保 NIC 设置为
virtio并且 initramfs 已使用相应的网络驱动程序重新构建。
其他资源
反馈
最后更新于
这有帮助吗?