关键词
- centos、系统分区fdisk、lvm
- vg、pv、pvcreate、vgchange
- WARNING: Device for PV Anzqgy-KfW7-wZaC-DYik-RWSI-o0sS-fEVOHj not found or rejected by a filter!
There are many things that can not be broken!
如果觉得本文对你有帮助,欢迎点赞、收藏、评论!
一、问题现象
某业务云主机,一次操作系统重启后,业务目录无法自动挂载,系统启动失败。系统后台处理取消自动挂载后,正常进入系统。系统中检查相关vg出现pv missing情况,无法找到相应pvid的pv,导致vg无法激活,相关lv状态inactive,无法挂载到应用目录上。
WARNING: Device for PV Anzqgy-KfW7-wZaC-DYik-RWSI-o0sS-fEVOHj not found or rejected by a filter
PV [unknown] VG testvg lvm2 [1020.00 MiB / 1020.00 MiB free]
inactive '/dev/testvg/testlv' [2.00 GiB] inherit
二、问题分析
云主机磁盘出现Pv missing和pvid异常的问题出现,通常要么是存储侧有相关异常,比如存储链路或者存储池故障等情况导致,或者系统上对pv做了什么异常操作导致pvid变更。这里存储侧排查没有相关异常,那系统层面某些异常操作导致lvm信息损坏的可能性比较大。
如果物理卷的卷组元数据区域意外覆盖或被破坏,表明元数据区域不正确,或者系统无法找到带有特定 UUID 的物理卷。此时可以通过在物理卷中编写新元数据区域来从物理卷中恢复数据,并指定与丢失的元数据相同的UUID。
生产环境不好复原,这里通过测试环境,模拟故障的发生和恢复过程。
三、测试验证
1、虚拟机分配2块盘,sdb、sdc,其中sdb创建分区sdb1后,创建pv和vg,分配测试lv及挂载上目录,操作过程如下:
---创建sdb1分区
Fdisk /dev/sdb
--创建pv
Pvcreate /dev/sdb1
Pvcreate /dev/sdc
--创建vg及lv
Vgcreate testvg /dev/sdb1 /dev/sdc
Lvcreate -L 2G -n testlv testvg
--格式化文件系统及挂载
Mkfs.xfs /dev/testvg/testlv
Vi /etc/fstab
Mount /test
--模拟目录下写入部分数据
cp -r /etc /test/
cp -r /var /test/
2、模拟破坏sdb1分区
Fdisk /dev/sdb
此时查看文件系统还能正常读写,正常应用不受影响,但pvs查看已出现相应pvid找不到报错
3、重启主机后,复现系统无法登录故障现象
4、救援模式下,注销自动挂载后,进行系统,查看vg信息,复现Pv missing和pvid异常,vg无法激活的问题
5、恢复思路,/etc/lvm下有相关vg配置备份文件(/etc/lvm/archive/*),通过该配置文件,使用pvcreate指定pvid来恢复pv。
Pvcreate --uuid "bfxH3K-JdNv-OPt8-UHfh-xx5R-uuuA-kHB260" --restorefile /etc/lvm/archive/testvg_00010-1151254545.vg /dev/sdb
此时会报错Device /dev/sdb excluded by a filter. 提示sdb设备已经包含相关信息,不给再创建pv。
6、Sdb创建pv报错的情况,两种处理方法,1是sdb上重新创建分区sdb1后,指定pvid创建sdb1的pv,2是sdb磁盘转化下格式为gpt,再通过上面命令进行恢复。
7、Pv恢复后,激活vg,并挂载目录,验证恢复,数据无丢失。
四、经验总结
1、日常操作系统巡检应关注vg、pv相关信息,及时发现可能存在的各种异常情况,针对异常情况,应考虑应急措施后再重启机器,比如提前备份好重要数据。
2、故障出现lvm相关及存储数据方面的问题时,需保持敬畏之心,在恢复时应注意操作方法及操作所带来的影响,不确定的命令或者报错应验证评估后执行,避免误操作带来数据的二次伤害,有条件的话建议先做好备份再做恢复操作,毕竟数据无价。
3、任何变更,系统重启前,应做好系统核心配置的备份,如果重启后出现异常情况,可对比重启前各类参数的情况,便于快速定位分析故障。