在 LVM 中,只有镜像创建、RAID 重建、快照合并等少数操作才会触发后台同步。这种情况下,可以使用 lvs -a -o +sync_percent,lv_role 查看同步进度百分比,也可以通过 dmsetup status 检查底层 device-mapper 状态。

在 Linux 系统中,其实并不存在一个通用意义上的“逻辑卷同步进度”概念。像 LVM 的 lvcreate、lvextend、lvconvert 这类常见操作,大多数情况下只是修改元数据,或者立即更新映射关系,并不会在后台执行数据迁移。真正会出现可监控“同步进度”的场景,通常只限于少数几类操作,例如镜像同步、RAID 同步、快照合并,以及 thin pool 相关的数据迁移。另外,这类进度信息默认不会自动显示出来,必须借助对应命令手动查询。
哪些 LVM 操作会真正触发后台同步任务
只有以下几种操作会触发内核级异步同步过程,这时才谈得上“同步进度”:
lvconvert --mirror创建镜像逻辑卷时,会进入初始同步阶段,原理类似 RAID1 同步lvconvert --repair修复损坏的镜像卷或 RAID 逻辑卷时,会触发重建过程lvconvert --type raid1或--type raid5等 RAID 类型在创建或扩容后,会进行数据同步lvconvert --merge合并快照(snapshot merge)时,会执行数据回写lvconvert --thinpool转换为 thin pool 后,可能进行元数据初始化(这种情况较少见,通常很快完成)
需要注意的是:lvextend 扩展逻辑卷容量、lvresize 调整逻辑卷或文件系统大小,这些操作本身并不会触发 LVM 同步。即使搭配 --resizefs 使用,底层如果是 ext4 或 xfs,也只是文件系统在线扩容,并不是逻辑卷层面的同步过程。
使用 lvs + --all 查看逻辑卷同步状态和百分比
最常用的核心命令是 lvs -a -o +sync_percent,lv_role,move_pv。LVM 会将正在同步的逻辑卷标记为 mirrored 或 raid 角色,同时在 sync_percent 列中显示当前同步完成百分比(仅适用于支持同步的 LV 类型)。
实用建议如下:
- 执行
sudo lvs -a -o +sync_percent,lv_role,重点查看Sync%列是否显示具体数值,例如23.76,而不是-或空值 - 如果在
LV Role列看到mirrored或raid1,通常说明该逻辑卷正在执行同步;而snapshot角色一般不适用这个字段 - 同步过程中,
lvdisplay输出中也可能出现类似Sync percent: 42.12的字段,不过相比之下,lvs更适合一行查看一个卷的状态,直观性更强 - 如果
Sync%长时间没有变化,可能意味着 I/O 被阻塞、底层 PV 存在故障,或者同步过程被手动中断,例如执行了lvchange -an
通过 dmsetup status 直接查看 device-mapper 底层状态
当 lvs 没有显示进度,或者你想进一步确认系统是否真的在执行同步(例如怀疑 LVM 元数据没有及时刷新)时,可以跳过 LVM 工具,直接查询 device-mapper:
执行 sudo dmsetup status /dev/mapper/vg_name-lv_name(请将 vg_name-lv_name 替换为实际的 LV 映射名称)。
常见输出说明如下:
0 20971520 mirror 2 253:2 253:3 128 128 2→ 表示该设备为 mirror 类型,最后的数字通常代表已同步的 PE 数量,需要结合总 PE 数量计算进度(可通过lvdisplay -m查看 total PE)0 20971520 raid1 2 253:2 253:3 128 128 2→ 表示 RAID1 类型,分析方法与上面相同- 如果输出中包含
failed或suspended,通常说明同步异常中断,此时需要执行lvconvert --repair或进一步检查 PV 状态
⚠️ 提醒:dmsetup status 返回的是原始设备扇区或底层映射信息,并不是字节数或 GiB,不能直接拿来除以 1024³ 计算进度百分比。实际查看 Linux 磁盘逻辑卷同步进度时,优先建议使用 lvs -o +sync_percent。
同步速度慢?先确认是不是真的在同步
很多用户在执行 lvconvert --mirror 后,会以为系统应该马上出现“进度条”,但等了几分钟看到的依然是 -。这种情况背后的常见原因包括:
- 目标 PV 空间不足,或者底层设备不可写(可通过
pvdisplay查看Allocatable是否为yes) - 逻辑卷当前处于 inactive 状态(可用
lvscan查看是否标记为inactive,必要时执行lvchange -ay激活) - 使用了
--core参数(例如lvconvert --mirror --core),此时会强制使用内存同步,不落盘,也通常不会报告同步进度 - 底层是 thin pool,而 mirror 或 RAID 在 thin 环境下可能不支持同步进度显示(属于 LVM 的限制)
更稳妥的做法是:同步一开始,就直接执行 watch -n1 'cat /proc/mdstat 2>/dev/null || echo "no mdstat"; sudo lvs -o +sync_percent 2>/dev/null | grep -E "(Sync%|mirrored|raid)"',按每秒一次的频率持续刷新,观察 Sync% 是否持续变化。简单来说,只有当这个数值不断增长时,才能说明逻辑卷同步确实在正常推进;这也是判断 Linux LVM 同步进度最可靠、最值得参考的方式。
