必须先确认坏盘硬件故障、清空pv数据并迁移,再用vgreduce剔除,最后用pvremove擦除元数据;冗余重构需额外加盘并手动配置镜像。

不能直接用 vgreduce 移除坏盘,必须先确保该物理卷(PV)上无任何逻辑卷(LV)数据驻留,再迁移、清空、剔除、擦除元数据。冗余度重构需额外引入新盘并扩展卷组,不是 vgreduce 本身的功能。
确认坏盘状态并立即停写
坏盘若仍在被系统读写,可能加剧损坏甚至导致整个卷组异常。先验证是否真为硬件故障:
- 运行
dmesg | grep -i "ata\|error\|fail",查找如/dev/sdb相关的 I/O timeout、UNCorrected、media error 等内核报错 - 执行
smartctl -a /dev/sdb(需安装smartmontools),重点关注Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count及SMART overall-health self-assessment test result: FAILED - 用
lsblk或fdisk -l /dev/sdb看是否还能识别分区;若设备已消失或反复超时,说明已不可靠,应停止所有对该设备的挂载和访问
检查该PV是否被LV占用
只有完全空闲的 PV 才能被安全移除。LVM 不允许对有数据的 PV 执行 vgreduce:
- 运行
pvs -o +pv_used,lv_name,vg_name /dev/sdb,查看PV Used是否为 0,以及LV Name列是否为空 - 执行
lvs -o +devices,逐行检查Devices列,确认/dev/sdb是否出现在任何 LV 的底层设备路径中(例如myvg/mylv /dev/sdb:0-199) - 若发现占用,说明该 PV 上存在活动数据,必须迁移——跳过此步直接 vgreduce 会失败,并提示
PV still in use或Cannot remove last PV
迁移数据并清空PV
迁移是核心环节,目标是把坏盘上的所有 PE(Physical Extent)挪到其他健康 PV 上:
- 先用
vgs myvg查看卷组空闲空间(VFree),确保其余 PV 总空闲 PE ≥ 坏盘已用 PE(pvs /dev/sdb中的PUsed) - 执行
pvmove /dev/sdb启动自动迁移;过程可后台运行,用pvmove --abort中断,用pvmove --report查进度 - 迁移完成后再次运行
pvs /dev/sdb,确认PUsed显示为 0,且PFree等于PSize - 此时该 PV 已逻辑清空,但仍在卷组中,尚未脱离管理
剔除PV并重构冗余度
vgreduce 只负责“减法”,冗余度(如镜像、RAID1 LV)需手动重建,不属其职责范围:
- 执行
vgreduce myvg /dev/sdb,成功后pvs输出不再显示该设备,vgs myvg中 PV 数量减 1 - 运行
pvremove /dev/sdb彻底清除 LVM 元数据,使磁盘恢复为裸设备状态,便于报废或重利用 - 如需提升冗余:添加新盘(如
/dev/sdd),用pvcreate /dev/sdd创建 PV,再vgextend myvg /dev/sdd加入卷组 - 对关键 LV(如
myvg/data)启用镜像,可用lvconvert --mirror 2 myvg/data(需卷组中有足够空闲空间),实现跨 PV 的数据冗余











