新聞中心
為什么要使用Snapper快照?
我們可以想像以下場景:
1. 場景一:系統(tǒng)發(fā)生意外宕機(jī),工程師無法快速定位問題,業(yè)務(wù)受到中斷,客戶十分不滿意。
2. 場景二:項(xiàng)目會(huì)議上,就是否升級某軟件到最新版本,A和B爭執(zhí)不斷,A認(rèn)為為了保持與其他軟件的兼容性不能輕易升級,B認(rèn)為升級能充分利用軟件包的最新功能以及享受到新版本性能的提升
3. 場景三:數(shù)據(jù)庫突然無法訪問了,導(dǎo)致業(yè)務(wù)中斷,工程師A和B因?yàn)樽肪控?zé)任爭得不可開交,A說是B修改了某項(xiàng)配置導(dǎo)致的,B反駁說我的配置都是正確的,不可能出錯(cuò)。

但是Snapper可以輕松幫你解決以上煩惱:
1. 使用Snapper定期做系統(tǒng)備份,系統(tǒng)發(fā)生意外宕機(jī)可以快速回溯到之前的正常狀態(tài)。
2. 可以使用Snapper來安裝/升級軟件,在安裝/升級前后做快照,如果安裝/升級失敗,就可以快速的恢復(fù)系統(tǒng)到正常狀態(tài)
3. 大型軟件項(xiàng)目的部署配置,Snapper可以幫助快速定位哪些配置文件做了改動(dòng),幫助定位錯(cuò)誤,并快速撤銷配置文件的修改。
關(guān)于Snapper,Linux User & Developer Magazine中如是說:”感謝Snapper,我們才可以肆無忌憚的折騰系統(tǒng)配置以及安裝/更新軟件,從舊的備份中恢復(fù)成為了過去式,也不用再為會(huì)丟失文件而提心吊膽,你只需要利用快照就可以從壞點(diǎn)恢復(fù)到好點(diǎn)。
快照工具Snapper
快照是對卷在某一點(diǎn)上進(jìn)行拷貝,提供了一種恢復(fù)文件系統(tǒng)到之前狀態(tài)的一種方法。Snapper是一個(gè)用來創(chuàng)建和維護(hù)快照的命令行工具,提供了基本的快照工具:創(chuàng)建、刪除快照;對比快照之間的變化,以及撤銷快照之間的操作。
目前Snapper可以為以下文件系統(tǒng)類型創(chuàng)建快照:
- btrfs
- 在thinly-provisioned LVM之上創(chuàng)建的ext3、ext4、xfs文件系統(tǒng)
SUSE快照方案為:
- YaST/Zypper + Snapper + btrfs或thin-provisioning LVM
通過提供了YaST/Zypper界面化操作和Snapper命令行;
CentOS快照方案為:
- Snapper + btrfs或thin-provisioning LVM
提供Snapper命令行操作,用戶可以體驗(yàn)一下如何使用開源的Snapper GUI作為上層界面,但功能尚不完善。
為Btrfs文件系統(tǒng)創(chuàng)建快照
創(chuàng)建Btrfs分區(qū)
首先,我們以btrfs文件系統(tǒng)為例,來利用Snapper創(chuàng)建快照;
如果想為普通的btrfs文件系統(tǒng)創(chuàng)建快照,需要先創(chuàng)建并掛載btrfs文件系統(tǒng):
-
創(chuàng)建btrfs文件系統(tǒng)
# mkfs.btrfs /dev/sdb -
掛載btrfs文件系統(tǒng)
# mount /dev/sdb /mnt
如果想利用快照保護(hù)根分區(qū),需要在安裝時(shí)選擇btrfs作為根分區(qū),因?yàn)镃entOS 7 根分區(qū)默認(rèn)是xfs文件系統(tǒng),所以在安裝過程選擇btrfs作為根分區(qū)默認(rèn)文件系統(tǒng)即可。
創(chuàng)建快照時(shí),快照與原始點(diǎn)都會(huì)指向文件系統(tǒng)中的同一個(gè)塊。因此一開始時(shí)快照并不占用額外的磁盤空間。但如果修改了原始文件系統(tǒng)中的數(shù)據(jù),則會(huì)復(fù)制已更改的數(shù)據(jù)塊,同時(shí)將舊的數(shù)據(jù)塊作為快照保留。因此,快照就將占用與已修改數(shù)據(jù)相同的空間。所以久而久之,分配給快照的空間便會(huì)不斷增長。因此,包含快照的分區(qū)需要比常規(guī)分區(qū)大才行。確切的空間大小主要取決于要保留的快照數(shù)量以及數(shù)據(jù)更改量。一般來說,應(yīng)考慮使用兩倍于常規(guī)使用磁盤空間的空間大小。
安裝snapper
執(zhí)行以下命令安裝snapper:
# yum install snapper
安裝完成以后檢查一下,確保安裝成功
# rpm -qa | grep snapper
創(chuàng)建配置文件 ###
接下來一步步創(chuàng)建快照,Snapper需要為每一個(gè)卷創(chuàng)建一個(gè)配置文件,配置文件定義了快照的創(chuàng)建和維護(hù)規(guī)則,執(zhí)行以下命令為我們的根文件系統(tǒng)創(chuàng)建一個(gè)名為btrfs_config的配置文件:
// snapper -c config_name create-config -f btrfs /mount-point
# snapper -c btrfs_config create-config -f btrfs /
創(chuàng)建的配置文件一般是從/etc/snapper/config-templates/default拷貝,并在/etc/snapper/configs/文件夾下生成,我們可以看到新生成的配置文件如下,目前配置文件先采用默認(rèn)設(shè)置,暫不修改其內(nèi)容:
# ls /etc/snapper/configs/
btrfs_config
創(chuàng)建快照
快照類型
盡管不同的快照本身并無區(qū)別,但根據(jù)生成快照的不同情形將它們分成以下三類:
- pre
修改前的文件系統(tǒng)快照。每一張前快照都有一個(gè)對應(yīng)的post快照。
-
post
修改后的文件系統(tǒng)快照。每一張后快照都有一個(gè)對應(yīng)的pre快照。 -
single
獨(dú)立的快照。目的之一就是為了自動(dòng)創(chuàng)建每小時(shí)快照。此為創(chuàng)建快照時(shí)的默認(rèn)類型。
創(chuàng)建pre或者post快照
可以單獨(dú)創(chuàng)建pre和post快照,比如我們先創(chuàng)建一個(gè)pre快照, -p的含義是創(chuàng)建快照的同時(shí),打印出快照編號(hào):
# snapper -c btrfs_config create -t pre -p
1
# snapper -c btrfs_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+---------------------------------+------+----------+-------------+---------
single | 0 | | | root | | current |
pre | 1 | | Wed 08 Jun 2016 11:28:09 AM EDT | root | | |
之后我們可能會(huì)執(zhí)行一些系統(tǒng)操作,比如我們安裝了一個(gè)軟件包,根分區(qū)文件系統(tǒng)內(nèi)容會(huì)有一些變化
yum install net-tools
我們可以在創(chuàng)建一個(gè)post快照:
# snapper -c btrfs_config create -t post --pre-num 1 -p
2
# snapper -c btrfs_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+---------------------------------+------+----------+-------------+---------
single | 0 | | | root | | current |
pre | 1 | | Wed 08 Jun 2016 11:28:09 AM EDT | root | | |
post | 2 | 1 | Wed 08 Jun 2016 12:26:19 PM EDT | root | | |
編號(hào)為1和2的快照就組成了一個(gè)快照對,記錄了在安裝net-tools前后的根分區(qū)變化,通過以下命令查看這些變化:
# snapper -c btrfs_config status 1..2
+..... /usr/bin/netstat
+..... /usr/lib/systemd/system/arp-ethers.service
+..... /usr/sbin/arp
+..... /usr/sbin/ether-wake
+..... /usr/sbin/ifconfig
+..... /usr/sbin/ipmaddr
+..... /usr/sbin/iptunnel
+..... /usr/sbin/mii-diag
+..... /usr/sbin/mii-tool
+..... /usr/sbin/nameif
+..... /usr/sbin/plipconfig
+..... /usr/sbin/route
+..... /usr/sbin/slattach
+..... /usr/share/doc/net-tools-2.0
+..... /usr/share/doc/net-tools-2.0/COPYING
(略...)
+..... /usr/share/man/pt/man8/route.8.gz
c..... /var/cache/yum/x86_64/7/timedhosts
c..... /var/lib/rpm/Basenames
c..... /var/lib/rpm/Dirnames
(略...)
+..... /var/lib/yum/yumdb/n/6a2a1ded37167c106d2be6dbec20003079f37cf6-net-tools-2.0-0.17.20131004git.el7-x86_64/var_infra
+..... /var/lib/yum/yumdb/n/6a2a1ded37167c106d2be6dbec20003079f37cf6-net-tools-2.0-0.17.20131004git.el7-x86_64/var_uuid
c..... /var/log/audit/audit.log
c..... /var/log/cron
c..... /var/log/messages
c..... /var/log/snapper.log
c..... /var/log/yum.log
“+”號(hào)代表新增文件,“-”代表刪除文件,“c”代表修改了文件,與diff語法相同。
為快照添加描述和用戶數(shù)據(jù)
創(chuàng)建pre類型的快照并打印快照編號(hào),該快照標(biāo)記為important,且為其添加描述以方便以后查詢:
# snapper create --type pre --print-number --description "Before install net-tools"--userdata "important=yes"
創(chuàng)建post類型的快照,其對應(yīng)的pre快照編號(hào)為1,該快照標(biāo)記為important,且為其添加描述以方便以后查詢:
# snapper create --type post --pre-number 1 --description "After install net-tools" --userdata "important=yes"
以上操作也可以合并成一個(gè)命令:
# snapper -c btrfs_config create --command "yum install net-tools"
查看快照 ###
由于默認(rèn)配置中,啟動(dòng)了自動(dòng)快照功能,自動(dòng)記錄整點(diǎn)的快照,也即類型為single的timeline快照,我們可以看到Snapper自動(dòng)生成了一個(gè)標(biāo)號(hào)為3的快照(注:如果每小時(shí)生成一個(gè)快照,過不了多久我們的系統(tǒng)就會(huì)被快照占滿,就會(huì)因存儲(chǔ)空間不足而崩潰,所以不可能無限制的生成快照,這就是配置文件中快照清理規(guī)則的作用了,僅會(huì)保留有限個(gè)數(shù)的當(dāng)年、當(dāng)月、當(dāng)日快照,后面會(huì)詳細(xì)講解,這里僅做預(yù)覽。)
# snapper -c btrfs_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+----+-------+---------------------------------+------+----------+-------------+---------
single | 0 | | | root | | current |
pre | 1 | | Wed 08 Jun 2016 01:15:16 PM EDT | root | | |
post | 2 | 1 | Wed 08 Jun 2016 01:15:21 PM EDT | root | | |
single | 3 | | Wed 08 Jun 2016 02:01:01 PM EDT | root | timeline | timeline |
快照元數(shù)據(jù)
通過以上快照列表可以看到,每一張快照均由快照本身以及一些元數(shù)據(jù)組成。創(chuàng)建快照時(shí),需要指定元數(shù)據(jù)。修改快照意味著只能更改其元數(shù)據(jù),快照內(nèi)容是無法更改的。每一張快照使用的元數(shù)據(jù)如下:
Type: 快照類型,有關(guān)詳細(xì)信息請參見快照類型,不能更改;
#: 快照的唯一編號(hào),不能更改;
Pre #: 指定相應(yīng)前快照的編號(hào),僅適用于post,不能更改;
Date: 創(chuàng)建快照的時(shí)間戳
User: 創(chuàng)建快照的用戶
Cleanup: 清理規(guī)則
Description: 快照的說明。
Userdata: 擴(kuò)展的說明??墒褂枚禾?hào)分隔的“鍵=值”列表格式指定自定義數(shù)據(jù)“reason=testing, project=foo”,此字段也可用于將快照標(biāo)記為重要 (important=yes) 以及列出創(chuàng)建快照的用戶 (user=tux)。
查看文件的改動(dòng)
顯示指定快照中發(fā)生更改的一系列文件,例如,運(yùn)行以下命令列出文件/var/log/yum.log的標(biāo)號(hào)為0的當(dāng)前版本與標(biāo)號(hào)為2的快照中文件版本的差異,如果不指定文件名,則會(huì)顯示所有文件的差異:
# snapper -c btrfs_config diff 1..0 /var/log/yum.log
--- /.snapshots/1/snapshot/var/log/yum.log 2016-06-08 13:01:51.977879395 -0400
+++ /var/log/yum.log 2016-06-08 13:47:50.520081926 -0400
@@ -3,3 +3,12 @@
Jun 08 08:15:18 Installed: snapper-libs-0.1.7-10.el7.x86_64
Jun 08 08:15:18 Installed: boost-serialization-1.53.0-25.el7.x86_64
Jun 08 08:15:19 Installed: snapper-0.1.7-10.el7.x86_64
+Jun 08 13:15:21 Installed: net-tools-2.0-0.17.20131004git.el7.x86_64
+Jun 08 13:47:47 Updated: 7:device-mapper-1.02.107-5.el7_2.2.x86_64
+Jun 08 13:47:47 Updated: 7:device-mapper-libs-1.02.107-5.el7_2.2.x86_64
+Jun 08 13:47:47 Installed: 7:device-mapper-event-libs-1.02.107-5.el7_2.2.x86_64
+Jun 08 13:47:48 Installed: 7:device-mapper-event-1.02.107-5.el7_2.2.x86_64
+Jun 08 13:47:48 Installed: 7:lvm2-libs-2.02.130-5.el7_2.2.x86_64
+Jun 08 13:47:48 Installed: libaio-0.3.109-13.el7.x86_64
+Jun 08 13:47:48 Installed: device-mapper-persistent-data-0.5.5-1.el7.x86_64
+Jun 08 13:47:50 Installed: 7:lvm2-2.02.130-5.el7_2.2.x86_64
如果是新增文件,則僅會(huì)顯示:
# snapper -c btrfs_config diff 1..0 /usr/bin/netstat
Binary files /.snapshots/1/snapshot/usr/bin/netstat and /usr/bin/netstat differ
運(yùn)行以下命令列出文件/var/log/yum.log在標(biāo)號(hào)為1和2的快照中文件版本的差異:
# snapper -c btrfs_config diff 1..2 /var/log/yum.log
(略...)
通過以上命令可以看到,Snapper 的快照存儲(chǔ)在當(dāng)前子卷根目錄的 .snapshots 隱藏文件夾中。比如當(dāng)前子卷是 /,那么就是 /.snapshots,如果是 /mnt/vol1,那就是 /mnt/vol1/.snapshots??煺帐冀K存放在創(chuàng)建快照的那個(gè)分區(qū)或子卷中,無法將快照存儲(chǔ)到其他分區(qū)或子卷。
恢復(fù)文件
要恢復(fù)一個(gè)或多個(gè)文件,請運(yùn)行
# snapper -c CONFIG -v undochange
SNAPSHOT_ID..0 FILENAME1 FILENAME2
如果沒有指定文件名,則會(huì)恢復(fù)所有已更改的文件,可以通過以下命令撤銷以上操作,恢復(fù)系統(tǒng)狀態(tài)到快照1:
# snapper -c btrfs_config undochange 1..2
刪除快照
可以通過以下命令刪除快照:
# snapper -c btrfs_config delete 1 2
# snapper -c btrfs_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+------+------+---------+-------------+---------
single | 0 | | | root | | current |
提示: 舊快照占用的磁盤空間更多?。?!
如果您要?jiǎng)h除快照以釋放硬盤上的空間,請務(wù)必先刪除舊快照??煺丈傻臅r(shí)間越長,其占用的空間就越大。通過配置文件設(shè)置自動(dòng)刪除快照。有關(guān)詳細(xì)信息,請參見清理算法。
在精簡LVM卷上創(chuàng)建快照
除了在 Btrfs 文件系統(tǒng)上生成快照之外,快照程序還支持在 XFS、Ext4 或 Ext3 格式的精簡LVM 卷(不支持在常規(guī) LVM 卷上生成快照)上生成快照。
創(chuàng)建精簡LVM
以系統(tǒng)上的/dev/sdb、/dev/sdc為例,首先分別創(chuàng)建分區(qū)/dev/sdb1、/dev/sdc1:
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x962bc2ec.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Partition 1 of type Linux and of size 5 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
查看創(chuàng)建好的分區(qū)如下:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 30G 0 disk
+-sda1 8:1 0 500M 0 part /boot
+-sda2 8:2 0 2G 0 part [SWAP]
+-sda3 8:3 0 27.5G 0 part /home
sdb 8:16 0 5G 0 disk
+-sdb1 8:17 0 5G 0 part
sdc 8:32 0 5G 0 disk
+-sdc1 8:33 0 5G 0 part
sr0 11:0 1 1024M 0 rom
創(chuàng)建PV:
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
創(chuàng)建VG:
# vgcreate vg_thin /dev/sdb1 /dev/sdc1
Volume group "vg_thin" successfully created
創(chuàng)建精簡池:
# lvcreate -L 5G --thinpool thin_pool vg_thin
Logical volume "thin_pool" created.
查看精簡LVM,可以看到Allocated pool data為0,說明thin_pool尚未實(shí)際占用磁盤空間:
# lvdisplay /dev/vg_thin/thin_pool
--- Logical volume ---
LV Name thin_pool
VG Name vg_thin
LV UUID 3811nd-ltYk-XWqO-mxog-Gq82-38do-BywBfY
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2016-06-08 14:05:58 -0400
LV Pool metadata thin_pool_tmeta
LV Pool data thin_pool_tdata
LV Status available
# open 0
LV Size 5.00 GiB
Allocated pool data 0.00%
Allocated metadata 0.68%
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
# lvcreate -V 2G --thin -n thin_vol1 vg_thin/thin_pool
Logical volume "thin_vol1" created.
# lvcreate -V 2G --thin -n thin_vol2 vg_thin/thin_pool
Logical volume "thin_vol2" created.
# lvcreate -V 2G --thin -n thin_vol3 vg_thin/thin_pool
6 GiB)!
For thin pool auto extension activation/thin_pool_autoextend_threshold should be below 100.
Logical volume "thin_vol3" created.
創(chuàng)建文件系統(tǒng):
# mkfs.ext4 /dev/vg_thin/thin_vol1
掛載文件系統(tǒng):
# mkdir /mnt/vol1
# mount /dev/vg_thin/thin_vol1 /mnt/vol1
創(chuàng)建快照配置文件
為了在精簡 LVM 卷上使用快照程序,首先為其創(chuàng)建快照配置文件。在 LVM 上要使用 –fstype=lvm(filesystem) 指定文件系統(tǒng)。文件系統(tǒng)的有效值為 ext3、etx4 或 xfs。如下:
# snapper -c lvm_config create-config -f "lvm(ext4)" /mnt/vol1/
# ls /etc/snapper/configs/
btrfs_config lvm_config
# snapper -c lvm_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+------+------+---------+-------------+---------
single | 0 | | | root | | current |
創(chuàng)建一組pre/post快照對
# snapper -c lvm_config create --command "echo Hello > /mnt/vol1/hello_file"
# snapper -c lvm_config list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+---------------------------------+------+---------+-------------+---------
single | 0 | | | root | | current |
pre | 1 | | Wed 08 Jun 2016 02:41:07 PM EDT | root | | |
post | 2 | 1 | Wed 08 Jun 2016 02:41:07 PM EDT | root | | |
查看快照1和2之間的變化
# snapper -c lvm_config diff 1..2
--- /mnt/vol1/.snapshots/1/snapshot/hello_file 1969-12-31 19:00:00.000000000 -0500
+++ /mnt/vol1/.snapshots/2/snapshot/hello_file 2016-06-08 14:41:07.860147086 -0400
@@ -0,0 +1 @@
+Hello
以普通用戶身份使用快照
默認(rèn)情況下,快照程序只能由 root 用戶使用。但在特定情況下,某些組或用戶也需要?jiǎng)?chuàng)建快照或通過還原至快照來撤銷更改:
為 ALLOW_USERS 和(或)ALLOW_GROUPS 設(shè)置值,分別為用戶和(或)組授予權(quán)限。多個(gè)條目需要使用空格 分隔。例如,要為用戶 thin_user 和 thin_group 授予權(quán)限,可運(yùn)行:
# snapper -c web_data set-config "ALLOW_USERS=thin_user" "ALLOW_GROUPS=thin_group"
也可以通過直接修改配置文件實(shí)現(xiàn),此時(shí),指定的用戶和(或)組便可以使用指定的快照程序配置。您可以使用 list 命令對其進(jìn)行測試,例如:
# thin_user:~ > snapper -c lvm_config list
基本操作的講解到此結(jié)束,下面講一下一些高級配置:
自定義設(shè)置
以上我們都是采用Snapper自帶的默認(rèn)設(shè)置/etc/snapper/config-templates/default創(chuàng)建配置文件,該默認(rèn)配置文件經(jīng)過了多方面的考慮,適合多數(shù)使用情況。用戶也可以根據(jù)自己的需要對如何創(chuàng)建自動(dòng)快照以及如何保留快照進(jìn)行自定義配置。
每個(gè)配置都包含一系列選項(xiàng),這些選項(xiàng)可以通過命令行進(jìn)行修改:
# snapper -c btrfs_config set-config "TIMELINE_CREATE=yes"
-
FSTYPE
分區(qū)的文件系統(tǒng)類型:btrfs、lvm(ext3)、lvm(ext4)、lvm(xfs),快照類型不可更改。 -
SUBVOLUME
分區(qū)或子卷生成快照的安裝點(diǎn)。不可更改。 -
BACKGROUND_COMPARISON
定義在創(chuàng)建前后快照后是否要在后臺(tái)對他們進(jìn)行比較。默認(rèn)值為 “yes”。
禁用/啟用timeline快照
時(shí)間線快照默認(rèn)會(huì)啟用,可以直接修改配置文件里的TIMELINE_CREATE為yes/no,也可以通過以下命令啟停:
- 啟用
# snapper -c btrfs_config set-config "TIMELINE_CREATE=yes"
-
禁用
# snapper -c btrfs_config set-config "TIMELINE_CREATE=no"
控制快照存檔間隔(清理規(guī)則)
快照會(huì)占用磁盤空間。為了防止磁盤空間不足進(jìn)而導(dǎo)致系統(tǒng)中斷,舊的快照會(huì)自動(dòng)刪除:
清理算法
Snapper提供有三種清理舊快照的算法。這些算法以每天計(jì)劃作業(yè)方式執(zhí)行。您可以定義要在 Snapper 配置中保留的不同類型的快照數(shù):
-
number
當(dāng)達(dá)到某一快照計(jì)數(shù)時(shí)將刪除舊快照。 -
timeline
將刪除超過一定時(shí)限的舊快照,但保留一定量的每小時(shí)、每天、每月和每年快照。 -
empty-pre-post
將刪除無差異的前后快照對。
Snapper通過以下配置選項(xiàng)控制快照的清理規(guī)則:
-
TIMELINE_CLEANUP
定義當(dāng)快照數(shù)量超出 TIMELINE_LIMIT_* 選項(xiàng)指定的數(shù)值同時(shí)快照超出 TIMELINE_MIN_AGE 中指定的時(shí)限時(shí)是否自動(dòng)刪除舊快照。有效值:yes、no,默認(rèn)值為 “yes”。 -
TIMELINE_CREATE
如果設(shè)置為 yes,便會(huì)每小時(shí)創(chuàng)建一個(gè)快照。這是目前唯一一種可以自動(dòng)創(chuàng)建快照的方式,因此強(qiáng)烈建議將其設(shè)置為 yes。有效值:yes、no,默認(rèn)值為 “yes”。 -
TIMELINE_MIN_AGE
定義快照在自動(dòng)刪除前必須保留的最小時(shí)限(以秒為單位)。
默認(rèn)值為 “1800”。 -
TIMELINE_LIMIT_DAILY、TIMELINE_LIMIT_HOURLY、TIMELINE_LIMIT_MONTHLY、 TIMELINE_LIMIT_YEARLY
按小時(shí)、天、月、年保留的快照數(shù)量。每一項(xiàng)的默認(rèn)值均為 “10”。TIMELINE_CLEANUP=”yes”
TIMELINE_CREATE=”yes”
TIMELINE_LIMIT_DAILY=”10”
TIMELINE_LIMIT_HOURLY=”10”
TIMELINE_LIMIT_MONTHLY=”10”
TIMELINE_LIMIT_YEARLY=”10”
TIMELINE_MIN_AGE=”1800”
每小時(shí):最近創(chuàng)建的十張快照。
每天:保留最近十天內(nèi)每天創(chuàng)建的首張快照。
每月:保留最近十個(gè)月內(nèi)每月的最后一天創(chuàng)建的首張快照。
每年:保留最后十年內(nèi)每年的最后一天創(chuàng)建的首張快照。
此示例配置能夠?qū)崿F(xiàn)按小時(shí)生成將自動(dòng)清理的快照。TIMELINE_MIN_AGE和 TIMELINE_LIMIT_* 始終會(huì)同時(shí)進(jìn)行評估。在本示例中,快照刪除前的最小保留時(shí)限設(shè)置為 30 分鐘(1800 秒)。因?yàn)槲覀儠?huì)每小時(shí)創(chuàng)建一次快照,所以確保了只會(huì)保留最近的快照。如果 TIMELINE_LIMIT_DAILY 設(shè)置為非零值,則表示還會(huì)保留當(dāng)天的首張快照。
-
NUMBER_CLEANUP
定義當(dāng)快照總數(shù)超出 NUMBER_LIMIT 中指定的數(shù)值,同時(shí)快照超出 NUMBER_MIN_AGE 中指定的時(shí)限時(shí),是否自動(dòng)刪除舊的快照。有效值:yes、no,默認(rèn)值為 “yes”。 -
NUMBER_LIMIT
在 NUMBER_CLEANUP 設(shè)置為 yes 時(shí),定義要保留的沒有標(biāo)記為重要的安裝快照對和管理快照對的數(shù)量。所保留的會(huì)是最新的那些快照。默認(rèn)值為 “50”。 -
NUMBER_LIMIT_IMPORTANT
在 NUMBER_CLEANUP 設(shè)置為 yes 時(shí),定義要保留的標(biāo)記為重要的快照對數(shù)。所保留的會(huì)是最新的那些快照。默認(rèn)值為 “10”。 -
NUMBER_MIN_AGE
定義快照對在自動(dòng)刪除前必須保留的最小時(shí)限(以秒為單位)。默認(rèn)值為 “1800”,即30分鐘。
注: 限制和時(shí)限
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT 和 NUMBER_MIN_AGE 始終都會(huì)評估。只有同時(shí)符合全部條件才會(huì)刪除快照。如果想不考慮時(shí)限而始終保留一定數(shù)量的快照,則可將 NUMBER_MIN_AGE 設(shè)置為 0。另外,如果快照超過一定時(shí)限之后不想再保留,可以將 NUMBER_LIMIT 和 NUMBER_LIMIT_IMPORTANT 設(shè)置為 0。
空快照的處理
EMPTY_PRE_POST_CLEANUP
如果設(shè)置為 yes,系統(tǒng)會(huì)刪除前后快照相同的快照對。默認(rèn)值為 “yes”。
EMPTY_PRE_POST_MIN_AGE
定義前后快照相同的快照對在自動(dòng)刪除之前必須保留的最短時(shí)限(以秒為單位)。默認(rèn)值為 “1800”。
管理現(xiàn)有配置
snapper 有多個(gè)子命令可用于管理現(xiàn)有的配置。您可以列出、顯示這些配置,也可以對它們進(jìn)行刪除和修改:
列出配置
使用以下命令顯示所有現(xiàn)有的配置:
# snapper list-configs
Config | Subvolume
-------------+----------
btrfs_config | /
lvm_config | /mnt/vol1
查看配置
使用 snapper -c CONFIG get-config 子命令可以顯示指定的配置。CONFIG 應(yīng)替換為執(zhí)行 snapper list-configs 命令后所顯示的某個(gè)配置名稱。請參見配置數(shù)據(jù)以了解有關(guān)配置選項(xiàng)的更多信息。
刪除配置
使用以下命令可以刪除配置。CONFIG 應(yīng)替換為執(zhí)行 snapper list-configs 命令后所顯示的某個(gè)配置名稱:
# snapper -c CONFIG delete-config
修改配置
使用以下命令可以修改指定配置中的選項(xiàng)。CONFIG 應(yīng)替換為執(zhí)行 snapper list-configs 命令后所顯示的某個(gè)配置名稱。OPTION 和 VALUE 的可能值可參見配置數(shù)據(jù):
# snapper -c CONFIG set-config OPTION=VALUE
關(guān)于數(shù)據(jù)一致性
在創(chuàng)建快照時(shí)并沒有能確保數(shù)據(jù)一致性的機(jī)制。如果在創(chuàng)建快照的同時(shí)寫入某個(gè)文件(例如數(shù)據(jù)庫),將導(dǎo)致文件損壞或?qū)懭氩煌暾??;謴?fù)此類文件會(huì)產(chǎn)生問題。而且,有些系統(tǒng)文件(例如/etc/mtab)甚至永遠(yuǎn)都無法恢復(fù)。因此==強(qiáng)烈建議==您要始終仔細(xì)查看已更改文件及其差異的列表。只恢復(fù)您要還原的操作真正包含的文件。
修改快照元數(shù)據(jù)
用戶可以使用快照程序修改說明、清理算法以及快照的用戶數(shù)據(jù),其他元數(shù)據(jù)均無法更改。
使用snapper list 查看所有快照及其編號(hào)
# snapper -c btrfs_config list
修改 btrfs_cconfig 配置的第 10 張快照的元數(shù)據(jù),將清理算法設(shè)置為 timeline:
# snapper -c btrfs_config modify --cleanup-algorithm "timeline" 10
修改名為 btrfs_cconfig 配置的第 12 張快照的元數(shù)據(jù),設(shè)置新的說明,并取消設(shè)置清理算法:
# snapper --config btrfs_config modify --description "daily backup" -cleanup-algorithm "timeline" 120
設(shè)置過濾規(guī)則
一些文件主要用來保存系統(tǒng)信息,例如/etc/mtab,這類文件不希望被快照操作影響到,Snapper允許通過/etc/snapper/filters/*.txt 指定過濾項(xiàng),并在快照操作中忽略指定文件或文件夾的變化。
例如我們的btrfs中我們不希望快照跟蹤/var、/tmp等,可以添加到filters,這樣在以后創(chuàng)建的快照中就看到不到關(guān)于/var、/tmp的快照跟蹤了。
其他
分享文章:CentOS7中利用Snapper快照進(jìn)行系統(tǒng)備份與恢復(fù)
本文網(wǎng)址:http://www.dlmjj.cn/article/cdjgejj.html


咨詢
建站咨詢
