3.4.5 LVM监控、维护与故障排查

3.4.5 LVM监控、维护与故障排查#

本节聚焦LVM运行状态的观测、维护与故障修复,提供可执行命令、排错步骤与练习。

一、原理草图:LVM监控与事件流

文章图片

二、环境与安装检查
- 适用软件:lvm2、device-mapper

# 检查安装
rpm -q lvm2 device-mapper
# 未安装则安装(以RHEL/CentOS为例)
yum -y install lvm2 device-mapper
# 启动并确认服务
systemctl enable --now lvm2-lvmetad
systemctl status lvm2-lvmetad

三、监控与状态查看(带命令解释)

# 资产与结构:显示PV/VG/LV的基础信息
pvs
vgs
lvs

# 自定义字段:查看设备、段类型、LV属性
lvs -a -o lv_name,vg_name,lv_size,lv_attr,segtype,devices

# 详细信息:显示元数据、UUID、PE分布
pvdisplay /dev/sdb1
vgdisplay vg_data
lvdisplay /dev/vg_data/lv_app

# 设备映射与树形结构
dmsetup ls --tree
lsblk -f

# 启用事件监控:空间不足或设备异常触发
lvchange --monitor y /dev/vg_data/lv_app

四、日常维护操作(完整流程示例)

# 1) 扫描并刷新所有LVM对象
pvscan
vgscan
lvscan

# 2) 临时将LV设置为只读(用于维护或排错)
lvchange -pr /dev/vg_data/lv_app

# 3) 恢复为可读写并激活
lvchange -ay -prw /dev/vg_data/lv_app

# 4) 迁移数据:将PE从sdb迁移到sdc(不停机)
pvmove /dev/sdb1 /dev/sdc1

# 5) 元数据备份查看
ls -l /etc/lvm/backup/
ls -l /etc/lvm/archive/

五、常见故障排查与修复(带步骤与命令)

1)PV缺失/标记为missing
- 现象:vgsAttr包含p,LV不可用

# 查看缺失PV
vgs -o vg_name,vg_attr,vg_size,vg_free,pv_count,lv_count
pvs -o pv_name,vg_name,pv_attr,pv_size,pv_free

# 临时激活部分卷组
vgchange -ay --partial vg_data

# 更换磁盘后修复(示例)
pvcreate /dev/sdc1
vgextend vg_data /dev/sdc1
vgreduce --removemissing --force vg_data

2)VG无法激活(元数据损坏/设备路径变化)

# 尝试激活
vgchange -ay vg_data

# 从archive恢复元数据(选择最新备份)
ls /etc/lvm/archive/vg_data_*.vg
vgcfgrestore -f /etc/lvm/archive/vg_data_00012.vg vg_data
vgchange -ay vg_data

# 若设备名变化,检查lvm.conf过滤
grep -n "filter" /etc/lvm/lvm.conf

3)LV只读或挂载失败

# 检查LV状态
lvs -o lv_name,lv_attr,lv_size,vg_name

# 文件系统检查(需卸载或使用救援模式)
umount /dev/vg_data/lv_app
fsck -f /dev/vg_data/lv_app

# 重新挂载
mount /dev/vg_data/lv_app /data/app

4)快照写满导致IO异常

# 查看快照使用率
lvs -o lv_name,lv_size,origin,data_percent,vg_name

# 扩容快照(示例增加5G)
lvextend -L +5G /dev/vg_data/lv_app_snap

# 或删除快照
lvremove -y /dev/vg_data/lv_app_snap

5)扩容后文件系统未生效

# 确认LV已扩容
lvs /dev/vg_data/lv_app

# ext4在线扩容
resize2fs /dev/vg_data/lv_app

# xfs在线扩容(挂载点必须已挂载)
xfs_growfs /data/app

六、日志与诊断路径

# 常用日志
journalctl -u lvm2-lvmetad
journalctl -u lvm2-monitor

# 系统日志(适用于RHEL/CentOS)
grep -i lvm /var/log/messages

七、排障流程(步骤清单)
1. 设备层确认:lsblk -fblkid
2. LVM层状态:pvs/vgs/lvs -a -o +devices
3. 日志与事件:journalctl -u lvm2-lvmetad
4. 激活尝试:vgchange -aylvchange -ay
5. 元数据恢复:vgcfgrestore
6. 文件系统检查:fsckxfs_repair(注意挂载状态)

八、练习与验证

# 练习1:模拟PV缺失(仅在测试机)
# 停用一块PV(示例)
pvchange -an /dev/sdb1
vgs
# 恢复
pvchange -ay /dev/sdb1
vgchange -ay vg_data

# 练习2:监控快照告警
lvcreate -s -L 1G -n lv_app_snap /dev/vg_data/lv_app
lvs -o lv_name,data_percent
# 生成写入以增加快照使用率
dd if=/dev/zero of=/data/app/testfile bs=1M count=800
lvs -o lv_name,data_percent
lvremove -y /dev/vg_data/lv_app_snap

# 练习3:元数据恢复
# 在测试环境备份并模拟修改
vgcfgbackup vg_data
# 恢复到备份文件
vgcfgrestore -f /etc/lvm/backup/vg_data vg_data

九、运维规范与风险控制
- 生产变更前必须做快照或全量备份;写清回滚步骤。
- 禁止在PV底层直接格式化或更改分区表。
- lvm.conf设置合理filter,避免误识别外部存储。
- 定期清理无用快照,控制data_percent阈值告警。
- 对关键LV启用lvchange --monitor y并纳入监控系统。