一、 故障描述
在vg组中,存在多块LUN盘,其中一块LUN盘因某个原因,导致系统无法再识别到,需要利用剩余的LUN盘来恢复数据。这种情况下,因整个vg组不完整,导致vg或者lv无法挂载、识别、读写。
二、 测试方式
初始化环境,使用一块盘创建了一个 vg_cs 的vg组,和一个lv_cs 的lvm卷,并挂载到/cs 下,创建了一个testfile的临时文件,其中内容为1到10万的连续数字。
其中vg _cs 中含有sdb和sdc盘。
lv使用默认的顺序读写,故测试数据目前存在在sdb 上,使用:
s trings /dev/sdb | more
三、 故障模拟
此时我们模拟sdc这块磁盘丢失的情况,方法有两种,一是使用dd方式抹掉所有盘数据;二是从存储端拿掉sdc 盘的映射关系。
操作完后,重启主机,可以看到lv中出现unknown状态的卷:

uuid= UMpJuh-6cVh-3Hyc-MrTK-GDwo-TPeC-Wjb4NG 的卷,就是刚才的sdc卷,在/ etc /lvm/backup 中,也可以找到对应的关系。
特别提示:
关于pvs,lvs和vgs中Attr各个字节对应的含义,最准确快速查找的方法是:
四、 恢复过程
直接使用vgcfgrestore来恢复盘头的lvm信息,失败:

提示中,很明显,显示原来sdb设备的uuid找不到了,无法恢复,提示vg _cs的一个p被标记为丢失,恢复失败。
提示:
如何获取丢失盘的uuid?
1、 执行lvm相关操作后,会如上所示,直接提示出来;
2、 pvscan执行时
3、 lvm的备份信息中,即/ etc/lvm/backup/vg_cs 中也可以找到
这时候要用一个新的空盘来恢复,这里我们已经重新映射一个sdd到主机上,使用这个sdd来重建uuid= UMpJuh-6cVh-3Hyc-MrTK-GDwo-TPeC-Wjb4NG 的pv。

提示成功了,这时vg _cs是完整的了。
验证lvm相关的信息:

这时,lv _cs 处于非激活状态,激活

因为少了一部分数据,所以这时候一定要做文件系统修复:



从修复的过程看,丢失的信息其实还是不少的,sdc上的数据肯定都没有了。
最后挂载,验证:

五、 总结
如果要恢复一个lvm上剩余的数据,也需要给操作系统一个完整的lvm信息,这个才能作为一个完整的文件系统进行挂载,虽然此时数据已经不完整。




