什么是 LV 磁盘快照?快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
左图为最初创建 LV 磁盘快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块)作为数据存放处。 此时快照区内并没有任何数据,而快照区与系统区共享所有的 PE 数据,因此你会看到快照区的内容与文件系统是一模一样的。 等到系统运行一阵子后,假设 A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与文件系统共享!
照这样的情况来看,LVM 的磁盘快照是非常棒的“备份工具”,因为他只有备份有被更动到的数据, 文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此“快照”当时的文件系统就得以“备份”下来,且快照所占用的容量又非常小。
下面我们针对传统 LV 磁盘进行快照的创建,大致流程为:
预计被拿来备份的原始 LV 为 /dev/vbirdvg/vbirdlv
使用传统方式快照创建,原始碟为 /dev/vbirdvg/vbirdlv,快照名称为 vbirdsnap1,容量为 vbirdvg 的所有剩余容量
传统快照区的创建
因为 XFS 不允许相同的 UUID 文件系统的挂载,因此我们得要加上那个 nouuid 的参数,让文件系统忽略相同的 UUID 所造成的问题。
利用快照区复原系统
我们的 /srv/lvm 已经有 /srv/lvm/etc, /srv/lvm/log 等目录了,接下来我们将这个文件系统的内容作个变更, 然后再以快照区数据还原看看:
为什么要备份呢?为什么不可以直接格式化 /dev/vbirdvg/vbirdlv 然后将/dev/vbirdvg/vbirdsnap1 直接复制给 vbirdlv 呢? 要知道 vbirdsnap1 其实是 vbirdlv 的快照,因此如果你格式化整个 vbirdlv 时,原本的文件系统所有数据都会被搬移到 vbirdsnap1。 那如果 vbirdsnap1 的容量不够大 (通常也真的不够大),那么部分数据将无法复制到 vbirdsnap1内,数据当然无法全部还原。
而快照还有另外一个功能,就是你可以比对 /srv/lvm 与 /srv/snapshot1 的内容,就能够发现到最近你到底改了啥。
利用快照区进行各项练习与测试的任务,再以原系统还原快照。
换个角度来想想,我们将原本的 vbirdlv 当作备份数据,然后将 vbirdsnap1 当作实际在运行中的数据, 任何测试的动作都在 vbirdsnap1 这个快照区当中测试,那么当测试完毕要将测试的数据删除时,只要将快照区删去即可! 而要复制一个 vbirdlv 的系统,再作另外一个快照区即可。