**
麒麟 V10(Kylin)迁移至 HyHive(KVM)引导修复总结
一、问题现象
从 VMware ESXi 迁移到 HyHive(KVM)后,虚拟机启动进入 emergency mode,报错:
plain
Warning: /dev/klas/root does not exist
Warning: /dev/klas/swap does not exist
Warning: /dev/mapper/klas-root does not exist
Entering emergency mode…
二、根本原因
麒麟 V10 的 initramfs(初始内存文件系统) 默认只包含 VMware 虚拟硬件驱动(如 LSI SCSI 控制器),缺少 KVM 环境下的 virtio、SATA/IDE 适配驱动。导致迁移后内核无法识别虚拟磁盘,LVM 卷组无法激活。
三、修复方案(推荐顺序)
方案 A:源端提前修复(最彻底,需在 ESXi 上操作)
在源虚拟机(ESXi 上)提前注入 virtio 驱动,再导出 VMDK:
bash
1. 加载 virtio 内核模块
modprobe virtio
modprobe virtio_blk
modprobe virtio_pci
modprobe virtio_net
2. 重建 initramfs,强制包含 virtio 驱动
dracut --force --add-drivers “virtio virtio_blk virtio_pci virtio_net ext4” --regenerate-all
3. 验证模块是否已打入
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
4. 关机后导出 VMDK
shutdown -h now
导出后,HyHive 直接以 virtio 总线挂载即可正常启动。
方案 B:目标端修复(HyHive 上过渡,实际采用)
如果 VMDK 已导入 HyHive 但无法启动,采用 “IDE 过渡 → 注入驱动 → 切换 virtio” 策略:
步骤 1:HyHive 上改用 IDE 总线启动
编辑虚拟机磁盘 → 云盘总线类型 → 选择 ide
启动系统(IDE 兼容性最好,可进入系统)
步骤 2:进入系统后注入驱动
bash
加载 virtio 模块(麒麟内核已内置,无需 yum 安装)
modprobe virtio
modprobe virtio_blk
modprobe virtio_pci
modprobe virtio_net
验证模块已加载
lsmod | grep virtio
重建 initramfs,永久写入 virtio 支持
dracut --force --add-drivers “virtio virtio_blk virtio_pci virtio_net ext4” --regenerate-all
验证 initramfs 已包含
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
关机
shutdown -h now
步骤 3:切换回 virtio 总线
HyHive 上编辑虚拟机磁盘 → 云盘总线类型 → 改回 virtio
重新开机,系统可正常识别磁盘并激活 LVM
四、关键注意事项
表格
项目 说明
不要安装 virtio-win 麒麟 V10 仓库无此包,且内核已内置 virtio 驱动,无需额外安装
不要修改 grub 参数 rd.lvm.lv=klas/root 等参数无法解决驱动缺失问题
必须先关机再切换总线 重建 initramfs 后必须关机,再在 HyHive 上修改磁盘总线,热切换无效
LVM 是麒麟默认分区方式 根分区通常在 /dev/mapper/klas-root,不是普通 /dev/sda1
IDE 只是过渡方案 长期运行建议使用 virtio,性能更好
五、快速检查清单
迁移后启动失败时,按此排查:
HyHive 磁盘总线是否为 virtio? → 先改成 IDE 尝试启动
能否进入系统? → 能则执行 dracut 重建 initramfs
initramfs 是否包含 virtio? → lsinitrd | grep virtio 验证
重建后是否关机再切 virtio? → 必须关机,不能热切换