###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 那么與其關聯的另一個快照也將被刪除。