麒麟系统虚拟机ESXi迁PVE后报/dev/mapper/klas-root不存在修复方案
核心病根(迁移专属)
ESXi磁盘控制器默认是SATA/VMware Paravirtual,PVE默认是VirtIO块设备;磁盘识别名称、内核驱动、磁盘UUID底层匹配逻辑全部变了,系统内置initramfs里没有virtio磁盘驱动,识别不到硬盘,直接找不到LVM卷组进紧急模式。
分两种方案:光盘镜像救援修复(推荐)、临时GRUB启动应急。
方案一:麒麟ISO救援模式完整修复(你当前适用)
1. PVE端前置设置
1. 虚拟机关机,硬件面板确认磁盘控制器改为 VirtIO Block ;
2. 光驱挂载同版本银河麒麟服务器/桌面ISO,启动顺序改成光驱优先;
3. 开机进入麒麟安装界面,选择【救援模式】。
2. 救援内激活LVM
bash
# 扫描所有逻辑卷组
vgscan
# 激活klas卷组
vgchange -ay klas
# 确认klas-root、klas-swap正常出现
lvdisplay
3. 手动挂载原系统并chroot
bash
# 挂载根LVM分区
mount /dev/mapper/klas-root /mnt
# 若单独分了/boot分区(大部分麒麟服务器会独立boot)
mount /dev/vda1 /mnt/boot
# 绑定系统虚拟目录,保证内核工具正常运行
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
# 切换进原麒麟系统环境
chroot /mnt
4. 关键修复1:安装virtio磁盘驱动到启动镜像(迁移必做)
麒麟基于RHEL源码,使用dracut重建initramfs,把virtio块驱动打包进开机内存盘:
bash
# 重建启动镜像,强制包含virtio_blk virtio_scsi驱动
dracut --add-drivers "virtio_blk virtio_scsi" -f /boot/initramfs-$(uname -r).img $(uname -r)
# 更新GRUB引导配置,适配PVE磁盘设备名
grub2-mkconfig -o /boot/grub2/grub.cfg
5. 关键修复2:修正/etc/fstab挂载配置
bash
blkid # 复制当前磁盘真实UUID
vi /etc/fstab
修改两点:
1. 把 /dev/klas/root 替换成标准LVM写法 /dev/mapper/klas-root ;
2. 核对每一行UUID和blkid输出完全匹配,ESXi旧UUID会失效,错的直接替换;
3. swap分区行同步更新UUID,无效条目注释#屏蔽。
6. 卸载退出重启
bash
exit # 退出chroot
umount -R /mnt # 递归卸载所有挂载目录
虚拟机关机,移除ISO镜像,硬盘优先启动即可正常开机。
方案二:不进救援,GRUB临时应急启动(临时测试用)
1. 开机GRUB菜单按 e 进入内核编辑;
2. 找到linux16内核那一行,在末尾追加驱动参数:
rd.driver.pre=virtio_blk rd.lvm.vg=klas
3. 按Ctrl+X临时启动,能进系统后再执行方案一里dracut永久修复。
ESXi迁移PVE额外避坑点
1. 磁盘控制器不要混用:迁移后不要一会SATA一会VirtIO,全程统一VirtIO Block;
2. 千万不要改磁盘总线后不重建initramfs:麒麟默认镜像不带virtio驱动,这是迁移后找不到磁盘的头号原因;
3. 若vgscan完全看不到klas卷组:关机检查PVE硬盘是否成功挂载,确认磁盘没有分离、磁盘数量和ESXi原机一致;
4. 文件系统损坏:若挂载时报文件系统报错,执行 fsck -f /dev/mapper/klas-root 修复坏块,修复前不要挂载。