麒麟系统虚拟机ESXi迁PVE后识别不到磁盘(其它linux类似)

麒麟系统虚拟机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 修复坏块,修复前不要挂载。

上一篇 pve虚拟机磁盘缩小
下一篇 在Proxmox VE 7.1 中开启vGPU_unlock,实现显卡虚拟化 (自定义vgpu参数)