/dev/mapper下映射丢失90%非数据损坏,而是设备节点未生成或卷组未识别,应优先执行vgscan --mknodes;其前提为dm_mod模块加载、udev运行正常、PV已识别且VG元数据完整。

直接结论:/dev/mapper 下映射丢失,90% 不是数据损坏,而是设备节点没生成或卷组未识别,优先执行 vgscan --mknodes,不是 lvscan 或 vgchange -ay。
为什么 ls /dev/mapper/ 看不到 vgname-lvname 软链接
非正常关机、强制断电、udev 事件中断,都会让内核跳过设备映射器(device-mapper)节点的自动创建。此时 /dev/mapper/ 目录下空空如也,但 pvscan 和 vgdisplay 仍能读出 PV/VG 元数据——说明 LVM 结构完好,只是“门牌号”丢了。
常见错误现象:
-
mount /dev/mapper/vg00-root /mnt报错No such file or directory -
lvs显示 LV 状态为inactive,且Devices列为空 -
lsblk中逻辑卷显示为 “?” 或无设备路径
关键判断点:sudo pvscan 必须列出 PV 及所属 VG 名;sudo vgs 必须能显示 VG 名称和大小。否则问题不在节点,而在更底层(PV 未识别或元数据损坏)。
vgscan --mknodes 执行前必须验证的四件事
这个命令不会报错,但静默失败很常见。它只在满足全部前提时才真正创建软链接。
-
lsmod | grep dm_mod必须有输出 —— device-mapper 内核模块未加载会导致--mknodes完全不工作 -
sudo systemctl is-active systemd-udevd返回active—— udev 停止后,符号链接无法写入/dev/mapper/ -
sudo pvscan输出中不能含unknown或not found—— PV 必须被识别,否则 VG 无法关联 -
sudo vgdisplay your_vg_name能输出完整信息(包括 LV 列表),哪怕状态是inactive
漏掉任一条件,vgscan --mknodes 就像往干涸的河床倒水——看起来做了,实际没用。
执行后仍看不到软链接?先别碰 vgcfgrestore
如果 vgscan --mknodes -v 日志里出现 Creating symlink /dev/mapper/vg00-root,但 ls -l /dev/mapper/ 还是空的,说明 udev 规则没触发或权限卡住。
- 手动触发 udev:运行
sudo udevadm trigger --subsystem-match=block --action=add,再等 2 秒 - 检查 udev 日志:
sudo journalctl -u systemd-udevd -n 50 --no-pager | grep mapper,看是否有failed to create symlink - 确认
/dev/mapper/是 devtmpfs 类型:findmnt /dev/mapper应显示devtmpfs,不是普通 ext4 —— 否则节点无法持久化 - 临时绕过:若紧急需要挂载,可直接用底层设备(如
/dev/dm-0)测试,但仅限只读验证,不可长期使用
注意:vgcfgrestore 是针对 VG 元数据彻底丢失的高危操作,映射节点缺失时滥用它反而可能覆盖有效备份。
容易被忽略的两个真实陷阱
一是多路径设备(multipath)干扰:如果你用的是 /dev/mapper/mpatha 这类多路径盘,vgscan --mknodes 默认不处理它们,得先确认 LVM 是否在 multipath 设备上建的 VG(查 pvdisplay 的 PV Name 字段是否为 /dev/mapper/mpatha);二是 LVM cache 卷:带 cache 的 LV(如 lvconvert --type cache 创建的)在节点重建后需额外执行 lvconvert --uncache 才能正常激活。


















