LVM快照功能--我们知道LVM能够通过增减PE的数量来弹性调整文件系统的大小,除此之外,LVM还有另外一个重要的功能,LV磁盘快照,就是通过快照的功能将此时的文件系统信息记录下来,以后对该文件系统操作的时候,当该文件系统的数据变化的时候,我们可以利用快照将文件系统恢复至当时的状态。



目录

  • LV的快照原理

  • 创建快照

  • 利用快照恢复系统



一、LV的快照(snapshot)原理 

Linux学习—LVM快照功能_第1张图片

    左边的图表示,LVM会在VG上预留一定的区域作为快照区,原本lv中存放着数据,同时快照区存放着lv中元数据,因此快照区大小不需要和原始lv一样的大小。在刚创建snapshot的时候,快照区中并不会真实地拷贝原始lv中的数据,只是记录了整个原始lv中的元数据,所以这个时间点快照区和原始lv共享文件系统的数据,即两边的数据一样。

    右边的图表示,当原始lv中的数据发生改变的时候,原始lv中的发生变化的PE的数据更新之前,会将数据真实地备份至快照区的一个PE中,如图中,A->new A之前,先将A备份至快照区的一个PE,然后lv中A才更新为new A,这样快照区会保存lv中PE发生变化之前的数据,这时候我们再访问快照区的内容仍然为创建snapshot那个时间点的时候lv中的数据,因此我们可以利用快照区进行备份和恢复。

    需要注意的是,由于快照区也有容量的限制,所以呢,当原始lv中发生变化的PE的数量超过快照区的PE的数量的时候,该快照就会立即失效。

    我们在创建快照区的时候,要考虑将来lv数据的变化量,以此来指定快照区的大小,一种解决办法是刚创建完快照之后,立即把快照区中的内容进行备份,这样就不用时刻考虑快照区会失效了,因为我们已经把他的数据备份走了。还有一种简单粗暴的方法就是创建一个和原始lv一样大小的快照区,这样就不用担心数据变化量的因素了。


二、创建快照

操作流程:

    原始lv为/dev/vg1/lv1,创建lv的快照为lv1snap,容量为100个PE

①查看vg1的信息中的可用PE的数量

Linux学习—LVM快照功能_第2张图片

②创建lv快照

[root@CentOS-6 ~]# lvcreate -s -l 100 -n lv1snap /dev/vg1/lv1 
Logical volume "lv1snap" created.

    -s    关键选项,创建快照snap的意思    

    -l    后面跟快照包含多少个PE的数量

    -n    后面跟创建的快照的名字

    -p r  由于快照大多为只读,改选项为为修改权限位只读(r)

    命令最后记得加创建的快照的原始lv名称

③ 查看新创建的快照区

Linux学习—LVM快照功能_第3张图片

③挂载原始lv和lv的快照 

[root@CentOS-6 ~]# mount /dev/vg1/lv1 /mnt/lvm/
[root@CentOS-6 ~]# mount /dev/vg1/lv1snap /mnt/snap/

Linux学习—LVM快照功能_第4张图片   
之前我在/mnt/lvm中导入了一些数据,我们发现原始lv和lv快照挂载之后容量信息一模一样


三、利用快照恢复系统

    当利用快照恢复系统的时候,不能使得要复原的数据量大于快照区所能承受的最大范围

①修改原始lvm中的内容

[root@CentOS-6 ~]# dd if=/dev/zero of=/mnt/lvm/test bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 5.31399 s, 98.7 MB/s

两个目录的使用率发生变化

 Linux学习—LVM快照功能_第5张图片

②对快照区的数据进行打包压缩并备份

[root@CentOS-6 snap]# tar -jcv -f /backups/lvm.tar.bz2 * #-j 支持bzip2解压文件 -c 创建新的备份文件 -f 指定备份文件
tmp
[root@CentOS-6 snap]# echo $?
0

卸载原始lv重新格式化,再挂载之后df查看

Linux学习—LVM快照功能_第6张图片

③对原始lv进行数据恢复

[root@CentOS-6 ~]# tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm/  #-C 解压至指定目录

原始lv恢复至原来的14%

blob.png

我在这是用的打包压缩的方式进行备份还原,当然用cp命令的方式也一样