前段时间写了关于VMware下LVM是否还具有优势的帖子,后边写了一个磁盘直接扩展partation的帖子,今天就写写最后剩下的一种情况。
其实前面帖子里边提到过现在好多人做pv的时候不给磁盘划分partation ,直接用整个磁盘创建PV。然后最近工作上就遇到一个需求,一个lv挂载到单独的目录下,现在需要给这个目录扩容,恰巧这个lv所在的vg是由一个单独磁盘做的PV组成的,然后工程师没看明白就直接fdisk了这个磁盘尝试创建partation,然后整个的pv vg lv信息都看不到了。
下面还是通过测试环境演示一下。
首先演示一下正常的扩容操作流程:
测试环境中sdb最开始是11G,直接做成了PV,pv创建了vg,vg上创建了lv,lv上创建了文件系统挂载到了/mnt目录,目前整个流程下来都是11G大小。
现在需要把/mnt目录扩容到15G
首先直接把sdb的磁盘从11G扩容到15G
然执行partprobe命令扫描一下磁盘,可以看到磁盘已经扩容到15G了,但是里边的lv还是11G
执行pvresize -t测试一下扩容是否可以,测试成功后直接执行pvresize,可以看到pv,vg都已经扩容到15G了,但是LV还是11G
剩下的操作就是比较常规的了,扩容lv,扩容文件系统。
下面演示一下出现我最开始说的那种操作失误以后怎么处理:(我就直接在我测试环境上做了,现在需求是把/mnt目录扩容到20G)
这是磁盘扩容后的环境,磁盘扩容到20G了,lv还是15G。
上面这段操作就是我在sdb上创建了一个LVM格式的partation,成功的把原来的PV,vg和LV信息搞没了,现在就需要来研究一下怎么恢复回来。
首先,需要抽根烟冷静一下
要确认上面的操作其实只是修改了磁盘上的磁盘头文件,真正的数据目前看还是都可以正常访问的,所以最重要的首先是要进行数据备份。
备份完成以后,先把刚才创建的partation删掉
可以看到刚创建的partation删除掉了,但是原来的pv信息还是不在。继续尝试修复lvm。
在/etc/lvm/archive和/etc/lvm/backup目录下其实是有每次pv、vg、lv的操作记录,通过这些记录尝试修复vg。
使用 vgcfgrestore --list testvg查看每个操作文件中记录的步骤。
可以看到最后一次lv操作记录的日志是在/etc/lvm/backup/testvg文件
首先查看备份文件中pv的UUID,重建PV(这步骤如果不做,操作系统每次重启一下LV都是非激活状态)
执行第一次恢复VG的命令(这次命令主要是把sdb的配置找回来)
执行重建pv命令
第一次执行重建pv的时候报错了,因为当时的vg在执行恢复以后是active状态,需要先给他设置成not active,然后就可以执行成功。
第二次执行VG修复命令
可以看到原来的vg信息已经恢复成功。LV激活后,后面扩容就按照上个章节的步骤扩就可以了