必须先确认故障盘能被lvm识别且数据可读,再迁移pe,最后移除;否则会丢数据或lv不可用。需检查dmesg错误、smart值、pvs allocatable状态,确保新盘容量足够并加入vg,再用pvmove在线迁移,验证完成后执行vgreduce和pvremove,必要时wipefs清理。

必须先确认故障盘还能被 LVM 识别且数据可读,再把上面的物理扩展(PE)全部迁出,最后才能从卷组中移除。不能跳过迁移直接删,否则会丢数据或导致逻辑卷不可用。
确认坏盘状态是否支持在线迁移
运行 dmesg | grep -i "sdb\|error" 查看内核错误,重点找 “I/O error” 或 “sector not readable”。连续出现 3 次以上,说明读取已不稳定。
执行 smartctl -a /dev/sdb,检查 Reallocated_Sector_Ct 和 Current_Pending_Sector ——任一值大于 0,就必须立即迁移。
运行 pvs -v,确认输出中该盘显示为 allocatable;若显示 [unknown] 或 missing,说明 LVM 已断开连接,pvmove 将失败,不可继续。
准备新盘并加入卷组
新盘容量必须 ≥ 故障盘当前已分配的 PE 总量,可用 pvdisplay /dev/sdb | grep "Allocated PE" 获取数值。
- 若新盘未分区:直接执行 pvcreate /dev/sdd && vgextend vg00 /dev/sdd
- 若需保持分区结构(如旧盘是 /dev/sdb1):用 fdisk /dev/sdd 创建主分区 → 类型设为 8e → partprobe /dev/sdd 刷新 → pvcreate /dev/sdd1 && vgextend vg00 /dev/sdd1
执行在线数据迁移
用 pvmove -i 5 /dev/sdb /dev/sdd 启动迁移,-i 5 表示每 5 秒刷新一次进度,避免误判卡死。
另开终端运行 watch -n 1 'pvs -o +pv_used,pe_count',观察 /dev/sdb Used 是否持续下降、/dev/sdd Used 是否同步上升;若 /dev/sdb Used 停滞超 2 分钟,立即查 dmesg 是否新增 I/O 错误。
迁移完成后,检查:
pvdisplay /dev/sdb 中 Alloc PE 和 Used PE 都为 0;
lvscan 输出所有 LV 状态均为 active —— 若有 inactive,说明元数据损坏,需从备份恢复。
完成移除并清理元数据
确认迁移无误后,依次执行:
- vgreduce vg00 /dev/sdb:从卷组中摘除 PV 引用
- pvremove /dev/sdb:清除磁盘上的 LVM 标签和元数据
若该盘后续要转为非 LVM 用途(如直连格式化),建议再执行 wipefs -a /dev/sdb 或 dd if=/dev/zero of=/dev/sdb bs=1M count=10 覆写头部,防止残留签名引发误识别。











