btrfs-snapper 实现Linux 文件系统快照回滚

###btrfs-snapper 应用


----------
####环境介绍
> btrfs文件系统是从ext4过渡而来的被誉为“下一代的文件系统”。该文件系统具有高扩展性(B-tree)、数据一致性(COW)、多设备管理(Snapshot、clone)及其他特性(延迟分配、小文件优化、索引)。
> 因此该文件系统对Linux系统版本要求较高,目前CentOS 7、Ubuntu14.10、SUSE13.2以及Fedora17 以上版本(内核3.*)支持该文件系统。
> 可以通过mkfs.btrfs 命令判断是否支持。
######
> Snapper 是基于btrfs与ext4文件系统(主要是btrfs)的快照管理工具,使用snapper 可以方便地进行快照创建、查看、修改删除、对比、回滚恢复、甚至针对某条指令创建前后快照。
######
> 本测试系统为CentOS 7 内核版本3.10.0。btrfs 版本为3.16.2

####安装
**btrfs**

- 创建新系统
> 创建新的CentOS 7系统,在创建磁盘时修改格式,由于/boot目录只能是xfs格式的不能修改,所以只需将根目录/ 创建为btrfs格式即可,安装完系统后进入,直接是btrfs文件系统

- 原有系统转换格式
> btrfs可以由ext2、3、4直接转换,使用btrfs-convert命令,将对应磁盘转换,需要注意的是,这种情况无法对根目录进行转换(因为一直在被使用)。
- 局部添加btrfs分区
> 使用dd工具
> 如:创建大小为100M的空文件
> # dd if=/dev/vda2 of=/tmp/file bs=1024 count=100000
> 使用btrfs 进行格式化
> # mkfs.btrfs /tmp/file
> 挂载成分区
> # mkdir newdisk
> # mount -o loop /tmp/file /mnt/newdisk
> 这时可以通过df -h 查看新添加的分区。
> 如果想开机自动挂载,可以加入到/etc/fstab中
> # vi /etc/fstab
> 添加 /tmp/file /newdisk btrfs defaults 1 2


测试使用的是第一个方法。

**snapper安装**
> 直接使用yum 安装
> # yum -y install snapper
> 可以看到其依赖于snapper-libs、boost-system、boost-thread


----------



####使用
这里只给出snapper的使用,以下命令均经过测试可用
**snapper 的相关文件**
>/etc/sysconfig/snapper
> 全局配置文件。
包含配置文件的目录。
/etc/snapper/config-templates
包含配置文件模板的目录。
/etc/snapper/filters
包含筛选规则文件的目录。
/var/log/snapper.log
日志文件。错误报告包含在此文件中。

**配置**
>snapper list-configs
>列出所有配置(即备份方案)
配置文件在 /etc/snapper/configs/allfs
snapper delete-config allfs
删除对应快照配置
snapper -c allfs get-config
列出allfs配置的参数
snapper -c allfs set-config 'TIMELINE_CREATE=no'
将allfs 配置中的TIMELINE_CREATE 参数值设为no

**配置参数以及意义**
> SUBVOLUME="/" 对应备份目录
FSTYPE="btrfs" 文件类型
ALLOW_USERS="" 允许使用该配置的用户
ALLOW_GROUPS="" 允许使用该配置的组
BACKGROUND_COMPARISON="yes" 创建前后快照结束进行后台比较
NUMBER_CLEANUP="yes" 运行每天的编号清理
NUMBER_MIN_AGE="1800" 清理前的快照最小生存期(s)
NUMBER_LIMIT="50" 最大快照数
TIMELINE_CREATE="no" 是否每小时创建快照
TIMELINE_CLEANUP="yes" 一定时间后是否进行每小时清理
TIMELINE_MIN_AGE="1800" 定时清理的参数:最小生存时间(s)
TIMELINE_LIMIT_HOURLY="10" 每小时快照数上限
TIMELINE_LIMIT_DAILY="10" 每天快照数上限
TIMELINE_LIMIT_MONTHLY="10" 每月快照数上限
TIMELINE_LIMIT_YEARLY="10" 没年快照数上限
EMPTY_PRE_POST_CLEANUP="yes" 清理无差别前后快照EMPTY_PRE_POST_MIN_AGE="1800" 无差别前后快照的最小生存时间

**查看**
> 快照的类别有四类 ,后两种都属于single
> pre/post/timeline(single)/user_defined(single)
#snapper -c allfs list
列出allfs 中的已有备份快照 -c 表示备份配置 --configs
列表中的编号0表示当前状态。
#snapper -c allfs list -t single(pre-post)
列出allfs 汇总已有的single(前后置)快照 -t --type

**创建**
> #snapper -c allfs create -t single
创建single类型快照
#snapper -c allfs create --command "yum install redis"
执行命令"yum install redis" 并为其创建前后快照

**比较**
> #snapper -c allfs status 31..32
比较31 和32号快照,列出变动文件列表,
一般小的在前,+表示32比31多的内容,c表示修改,-表示删除的内容
#snapper -c allfs diff 31..32
比较31 和32号快照,列出变动文件以及 内容 列表,
一般小的在前,+表示32比31多的内容,c表示修改,-表示删除的内容
后一个比较命令回显结果较多

回滚恢复
> #snapper -c allfs undochange 32..0
将allfs 的 32号编号替换成当前状态

**修改**
> #snapper -c allfs modify -d 'yum install redis' 32
将32号快照的描述修改为(添加)"yum install redis"

**删除**
> #snapper -c allfs delete 3
删除allfs 的3号快照,如果3号快照是pre-post 那么与其关联的另一个快照也将被删除。

原文地址:https://www.cnblogs.com/xpxstar/p/4987558.html