为什么要使用Snapper快照?
我们可以想像以下场景:
1. 场景一:系统发生意外宕机,工程师无法快速定位问题,业务受到中断,客户十分不满意。
2. 场景二:项目会议上,就是否升级某软件到最新版本,A和B争执不断,A认为为了保持与其他软件的兼容性不能轻易升级,B认为升级能充分利用软件包的最新功能以及享受到新版本性能的提升
3. 场景三:服务器突然无法访问了,导致业务中断,工程师A和B因为追究责任争得不可开交,A说是B修改了某项配置导致的,B反驳说我的配置都是正确的,不可能出错。
但是Snapper可以轻松帮你解决以上烦恼:
1. 使用Snapper定期做系统备份,系统发生意外宕机可以快速回溯到之前的正常状态。
2. 可以使用Snapper来安装/升级软件,在安装/升级前后做快照,如果安装/升级失败,就可以快速的恢复系统到正常状态
3. 大型软件项目的部署配置,Snapper可以帮助快速定位哪些配置文件做了改动,帮助定位错误,并快速撤销配置文件的修改。
关于Snapper,Linux User & Developer Magazine中如是说:”感谢Snapper,我们才可以肆无忌惮的折腾系统配置以及安装/更新软件,从旧的备份中恢复成为了过去式,也不用再为会丢失文件而提心吊胆,你只需要利用快照就可以从坏点恢复到好点。
快照工具Snapper
快照是对卷在某一点上进行拷贝,提供了一种恢复文件系统到之前状态的一种方法。Snapper是一个用来创建和维护快照的命令行工具,提供了基本的快照工具:创建、删除快照;对比快照之间的变化,以及撤销快照之间的操作。
目前Snapper可以为以下文件系统类型创建快照:
- btrfs
- 在thinly-provisioned LVM之上创建的ext3、ext4、xfs文件系统
Snapper是一个开源的项目,它基于GPLv2.0发布。Snapper是由SUSE发起并维护。
- Snapper官方博客为: http://snapper.io/
- Snapper源码发布在github: https://github.com/openSUSE/snapper
- Snapper GUI(目前仅支持btrfs、ext4、精简LVM):https://github.com/ricardomv/snapper-gui
Snapper-gui尚在开发阶段,功能不甚完善,有关介绍请参考另一篇博文:技术预览:利用Snapper GUI管理系统快照
SUSE快照方案为:
- YaST/Zypper + Snapper + btrfs或thin-provisioning LVM
通过提供了YaST/Zypper界面化操作和Snapper命令行;
CentOS快照方案为:
- Snapper + btrfs或thin-provisioning LVM
提供Snapper命令行操作,用户可以体验一下如何使用开源的Snapper GUI作为上层界面,但功能尚不完善。
为Btrfs文件系统创建快照
创建Btrfs分区
首先,我们以btrfs文件系统为例,来利用Snapper创建快照;
如果想为普通的btrfs文件系统创建快照,需要先创建并挂载btrfs文件系统:
创建btrfs文件系统
# mkfs.btrfs /dev/sdb
挂载btrfs文件系统
# mount /dev/sdb /mnt
如果想利用快照保护根分区,需要在安装时选择btrfs作为根分区,因为CentOS 7 根分区默认是xfs文件系统,所以在安装过程选择btrfs作为根分区默认文件系统即可。
创建快照时,快照与原始点都会指向文件系统中的同一个块。因此一开始时快照并不占用额外的磁盘空间。但如果修改了原始文件系统中的数据,则会复制已更改的数据块,同时将旧的数据块作为快照保留。因此,快照就将占用与已修改数据相同的空间。所以久而久之,分配给快照的空间便会不断增长。因此,包含快照的分区需要比常规分区大才行。确切的空间大小主要取决于要保留的快照数量以及数据更改量。一般来说,应考虑使用两倍于常规使用磁盘空间的空间大小。
选择“I will configure partitioning”,点击“Done”进入下一步:
点击“Click here to creat them automatically”自动添加,或者点击“+”手动添加:
修改根分区的文件系统类型为Btrfs:
完成以上,安装后生成的根分区文件系统如下:
安装snapper
执行以下命令安装snapper:
# yum install snapper
安装完成以后检查一下,确保安装成功
# rpm -qa | grep snapper
创建配置文件 ###
接下来一步步创建快照,Snapper需要为每一个卷创建一个配置文件,配置文件定义了快照的创建和维护规则,执行以下命令为我们的根文件系统创建一个名为btrfs_config的配置文件:
// snapper -c config_name create-config -f btrfs /mount-point
# snapper -c btrfs_config create-config -f btrfs /
创建的配置文件一般是从/etc/snapper/config-templates/default拷贝,并在/etc/snapper/configs/文件夹下生成,我们可以看到新生成的配置文件如下,目前配置文件先采用默认设置,暂不修改其内容:
# ls /etc/snapper/configs/
btrfs_config
创建快照
快照类型
尽管不同的快照本身并无区别,但根据生成快照的不同情形将它们分成以下三类:
- pre
修改前的文件系统快照。每一张前快照都有一个对应的post快照。
post
修改后的文件系统快照。每一张后快照都有一个对应的pre快照。single
独立的快照。目的之一就是为了自动创建每小时快照。此为创建快照时的默认类型。
创建pre或者post快照
可以单独创建pre和post快照,比如我们先创建一个pre快照, -p的含义是创建快照的同时,打印出快照编号:
# snapper -c btrfs_config create -t pre -p
1
# snapper