###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 那么与其关联的另一个快照也将被删除。

btrfs-snapper 实现Linux 文件系统快照回滚的更多相关文章

  1. linux svn代码回滚命令

    取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R ...

  2. Linux下svn回滚

    方法1: 用svn merge 1) 先 svn up,保证更新到最新的版本,如20: 2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 .如果想要更详细的了解情况,可以使用sv ...

  3. KVM虚拟机快照链创建,合并,删除及回滚研究

    1 QEMU,KVM,libvirt关系 QEMU QEMU提供了一个开源的服务器全虚拟化解决方案,它可以使你在特定平台的物理机上模拟出其它平台的处理器,比如在X86 CPU上虚拟出Power的CPU ...

  4. 存储那些事儿(二): 下一代Linux文件系统BTRFS简介

    BTRFS,通常念成 Butter FS,Better FS 或B-tree FS.下一代的Linux文件系统. 它基于写时拷贝(copy-on-write),支持高效的snapshot和clone. ...

  5. 新一代 Linux 文件系统 btrfs 简介

    https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3 ...

  6. Linux svn 回滚版本库

    Linux代码   svn up Index/ 然后找出要撤销的确切版本: Linux代码   svn log --limit 10 Index/tpl/css/global.css 根据log怀疑是 ...

  7. 基于ceph快照快速回滚openstack上的虚拟机

    查看虚拟机ID 1 2 [root@node1 ~]# nova list --all | grep wyl | dc828fed-1c4f-4e5d-ae84-795a0e71eecc | wyl ...

  8. 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本

    小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...

  9. linux运维、架构之路-K8s滚动更新及回滚

    一.滚动更新        应用程序一次只更新一小部分副本,更新成功后,再更新更多的副本,最终完成所有副本的更新. 滚动更新的优点:零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 1. ...

随机推荐

  1. xmind8

    win10企业版安装 xmind.zip,打开应用程序报下面的错 解决办法是 先备份xmind8下的XMind.ini文件 Open up Xmind.ini and replace "Ap ...

  2. MySql中常用的hint

    对于经常使用Oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在MySQL里,也有类似的hint功能.下面介绍一些常用的. 强制索引 FORCE ...

  3. [zhuan] linux 下 wxWidgets 安装,编译

      http://blog.csdn.net/yuzhenxiong0823/article/details/7727133 wxWidgets在Linux下有wxGTK和wxX11供使用,各需要GT ...

  4. vector与list区别

    vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高.在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动.如果vector中存储的对象很大,或者 ...

  5. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...

  6. 一种扩大View点击范围的方法

    Rect rect = new Rect();mBt0.getHitRect(rect); rect.bottom += 400; TouchDelegate touchDelegate = new ...

  7. tcpdump抓SQL[转]

    转自:http://www.cnblogs.com/LMySQL/p/5060604.html 前言:假设如果有个服务器几十个链接突然达到上千个链接,show processlist,general_ ...

  8. Java与C++程序在编译和运行上的区别

    Java.C++都属于高级语言,而计算机能认识执行的只是机器码(即二进制),所以高级语言都必须经过直接或间接的转换成汇编以后,才能运行: 对于C/C++这类高级计算机语言,它们的编译器(例如Unix下 ...

  9. InvocationException: GraphViz's executables not found

    当我在visualize决策树,运行以下代码时,报错: InvocationException: GraphViz's executables not found import pydotplus f ...

  10. Spring+Quartz(定时任务)

    此处用到的Quartz版本是quartz-2.2.3 官方网站:http://www.opensymphony.com/quartz 首先先介绍用到的几个关键类:scheduler任务调度.Job任务 ...