###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. 转载:bootstrap, boosting, bagging 几种方法的联系

    转:http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, ja ...

  2. java web的开发 知识要点

    近期闲下来时写的一个有关 java web的开发 的 常用架构 的总结,用于初 学 者或团队新人培训. Java开发初步.ppt SSH  为 struts+spring+hibernate 的一个集 ...

  3. 在CentOS上安装和部署Shiny Server

    1.安装R: sudo yum install R 2.安装Shiny的R包: sudo su - \ -c "R -e \"install.packages('shiny', r ...

  4. 51nod 1180 方格射击游戏

    M*N的方格矩阵,一个人在左下角格子的中心,除他所站位置外,其他格子的中心都有一个敌人,他一次可发射一枚子弹干掉一条直线上的所有敌人,问至少要发射多少子弹才能干掉所有敌人. Input 输入2个数m, ...

  5. aar引用 no executable code found问题

    主工程中 repositories { flatDir { dirs project(':trade_module').file('libs') }} dependencies { compile f ...

  6. udacity google deep learning 学习笔记

    1.为什么要在卷积网络中加入pooling(池化) 如果只利用卷积操作来减少feature map的大小,会失去很多信息.所以想到一种方法,减小卷积时的stride,留下大部分信息,通过池化来减小fe ...

  7. selenium查找动态的iframe的name

    WebElement frame1 = driver.findElement(By.xpath("/html/body/div[9]/div[2]/div/iframe"));dr ...

  8. 使用Javah 生成C/C++头文件

    注意:编写java的接口文件. 注意native代码端一定不要有大括号,且要有“:”结尾. public native int add(int x ,int y); 1. 需要让eclipse自动编译 ...

  9. CentOS开机无法进入系统,如何查错

    开机时按e/F5按钮,进入选择系统界面 会出现 CentOS(2.6.32-...类似的选择列表,选择默认的系统然后按e: 这时会出现 root kernel ... initd... 三个选项,选择 ...

  10. Business Unit Lookup in Form

    Just add the below code in lookup() of StringEdit control in Form to get the Business Unit Lookup: p ...