2021-05-12 14:32:11
CentOS 7中利用Snapper快照進行系統備份與恢復
為什麼要使用Snapper快照?
我們可以想像以下場景:
1. 場景一:系統發生意外宕機,工程師無法快速定位問題,業務受到中斷,客戶十分不滿意。
2. 場景二:專案會議上,就是否升級某軟體到最新版本,A和B爭執不斷,A認為為了保持與其他軟體的相容性不能輕易升級,B認為升級能充分利用軟體包的最新功能以及享受到新版本效能的提升
3. 場景三:資料庫突然無法存取了,導致業務中斷,工程師A和B因為追究責任爭得不可開交,A說是B修改了某項設定導致的,B反駁說我的設定都是正確的,不可能出錯。
但是Snapper可以輕鬆幫你解決以上煩惱:
1. 使用Snapper定期做系統備份,系統發生意外宕機可以快速回溯到之前的正常狀態。
2. 可以使用Snapper來安裝/升級軟體,在安裝/升級前後做快照,如果安裝/升級失敗,就可以快速的恢復系統到正常狀態
3. 大型軟體專案的部署設定,Snapper可以幫助快速定位哪些組態檔做了改動,幫助定位錯誤,並快速復原組態檔的修改。
關於Snapper,Linux User & Developer Magazine中如是說:”感謝Snapper,我們才可以肆無忌憚的折騰系統設定以及安裝/更新軟體,從舊的備份中恢復成為了過去式,也不用再為會丟失檔案而提心吊膽,你只需要利用快照就可以從壞點恢復到好點。
快照工具Snapper
快照是對捲在某一點上進行拷貝,提供了一種恢復檔案系統到之前狀態的一種方法。Snapper是一個用來建立和維護快照的命令列工具,提供了基本的快照工具:建立、刪除快照;對比快照之間的變化,以及復原快照之間的操作。
目前Snapper可以為以下檔案系統型別建立快照:
- btrfs
- 在thinly-provisioned LVM之上建立的ext3、ext4、xfs檔案系統
Snapper是一個開源的專案,它基於GPLv2.0發布。Snapper是由SUSE發起並維護。
- Snapper官方部落格為: http://snapper.io/
- Snapper原始碼發布在github: https://github.com/openSUSE/snapper
- Snapper GUI(目前僅支援btrfs、ext4、精簡LVM):https://github.com/ricardomv/snapper-gui
Snapper-gui尚在開發階段,功能不甚完善,有關介紹請參考另一篇博文:技術預覽:利用Snapper GUI管理系統快照
SUSE快照方案為:
- YaST/Zypper + Snapper + btrfs或thin-provisioning LVM
通過提供了YaST/Zypper介面化操作和Snapper命令列;
CentOS快照方案為:
- Snapper + btrfs或thin-provisioning LVM
提供Snapper命令列操作,使用者可以體驗一下如何使用開源的Snapper GUI作為上層介面,但功能尚不完善。
為Btrfs檔案系統建立快照
建立Btrfs分割區
首先,我們以btrfs檔案系統為例,來利用Snapper建立快照;
如果想為普通的btrfs檔案系統建立快照,需要先建立並掛載btrfs檔案系統:
-
建立btrfs檔案系統
# mkfs.btrfs /dev/sdb
-
掛載btrfs檔案系統
# mount /dev/sdb /mnt
如果想利用快照保護根分割區,需要在安裝時選擇btrfs作為根分割區,因為CentOS 7 根分割區預設是xfs檔案系統,所以在安裝過程選擇btrfs作為根分割區預設檔案系統即可。
建立快照時,快照與原始點都會指向檔案系統中的同一個塊。因此一開始時快照並不佔用額外的磁碟空間。但如果修改了原始檔案系統中的資料,則會複製已更改的資料塊,同時將舊的資料塊作為快照保留。因此,快照就將佔用與已修改資料相同的空間。所以久而久之,分配給快照的空間便會不斷增長。因此,包含快照的分割區需要比常規分割區大才行。確切的空間大小主要取決於要保留的快照數量以及資料更改量。一般來說,應考慮使用兩倍於常規使用磁碟空間的空間大小。
-
選擇“I will configure partitioning”,點選“Done”進入下一步:
-
點選“Click here to creat them automatically”自動新增,或者點選“+”手動新增:
-
修改根分割區的檔案系統型別為Btrfs:
-
完成以上,安裝後生成的根分割區檔案系統如下:
安裝snapper
執行以下命令安裝snapper:
# yum install snapper
安裝完成以後檢查一下,確保安裝成功
# rpm -qa | grep snapper
建立組態檔 ###
接下來一步步建立快照,Snapper需要為每一個捲建立一個組態檔,組態檔定義了快照的建立和維護規則,執行以下命令為我們的根檔案系統建立一個名為btrfs_config的組態檔:
// snapper -c config_name create-config -f btrfs /mount-point
# snapper -c btrfs_config create-config -f btrfs /
建立的組態檔一般是從/etc/snapper/config-templates/default拷貝,並在/etc/snapper/configs/資料夾下生成,我們可以看到新生成的組態檔如下,目前組態檔先採用預設設定,暫不修改其內容:
# ls /etc/snapper/configs/
btrfs_config
建立快照
快照型別
儘管不同的快照本身並無區別,但根據生成快照的不同情形將它們分成以下三類:
- pre
修改前的檔案系統快照。每一張前快照都有一個對應的post快照。
-
post
修改後的檔案系統快照。每一張後快照都有一個對應的pre快照。 -
single
獨立的快照。目的之一就是為了自動建立每小時快照。此為建立快照時的預設型別。
建立pre或者post快照
可以單獨建立pre和post快照,比如我們先建立一個pre快照, -p的含義是建立快照的同時,列印出快照編號:
# 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 | | |
之後我們可能會執行一些系統操作,比如我們安裝了一個軟體包,根分割區檔案系統內容會有一些變化
yum install net-tools
我們可以在建立一個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 | | |
編號為1和2的快照就組成了一個快照對,記錄了在安裝net-tools前後的根分割區變化,通過以下命令檢視這些變化:
# 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
“+”號代表新增檔案,“-”代表刪除檔案,“c”代表修改了檔案,與diff語法相同。
為快照新增描述和使用者資料
建立pre型別的快照並列印快照編號,該快照標記為important,且為其新增描述以方便以後查詢:
# snapper create --type pre --print-number --description "Before install net-tools"--userdata "important=yes"
建立post型別的快照,其對應的pre快照編號為1,該快照標記為important,且為其新增描述以方便以後查詢:
# snapper create --type post --pre-number 1 --description "After install net-tools" --userdata "important=yes"
以上操作也可以合併成一個命令:
# snapper -c btrfs_config create --command "yum install net-tools"
檢視快照 ###
由於預設設定中,啟動了自動快照功能,自動記錄整點的快照,也即型別為single的timeline快照,我們可以看到Snapper自動生成了一個標號為3的快照(註:如果每小時生成一個快照,過不了多久我們的系統就會被快照佔滿,就會因儲存空間不足而崩潰,所以不可能無限制的生成快照,這就是組態檔中快照清理規則的作用了,僅會保留有限個數的當年、當月、當日快照,後面會詳細講解,這裡僅做預覽。)
# 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 |
快照後設資料
通過以上快照列表可以看到,每一張快照均由快照本身以及一些後設資料組成。建立快照時,需要指定後設資料。修改快照意味著只能更改其後設資料,快照內容是無法更改的。每一張快照使用的後設資料如下:
Type: 快照型別,有關詳細資訊請參見快照型別,不能更改;
#: 快照的唯一編號,不能更改;
Pre #: 指定相應前快照的編號,僅適用於post,不能更改;
Date: 建立快照的時間戳
User: 建立快照的使用者
Cleanup: 清理規則
Description: 快照的說明。
Userdata: 擴充套件的說明。可使用逗號分隔的“鍵=值”列表格式指定自定義資料“reason=testing, project=foo”,此欄位也可用於將快照標記為重要 (important=yes) 以及列出建立快照的使用者 (user=tux)。
檢視檔案的改動
顯示指定快照中發生更改的一系列檔案,例如,執行以下命令列出檔案/var/log/yum.log的標號為0的當前版本與標號為2的快照中檔案版本的差異,如果不指定檔名,則會顯示所有檔案的差異:
# 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
如果是新增檔案,則僅會顯示:
# snapper -c btrfs_config diff 1..0 /usr/bin/netstat
Binary files /.snapshots/1/snapshot/usr/bin/netstat and /usr/bin/netstat differ
執行以下命令列出檔案/var/log/yum.log在標號為1和2的快照中檔案版本的差異:
# snapper -c btrfs_config diff 1..2 /var/log/yum.log
(略...)
通過以上命令可以看到,Snapper 的快照儲存在當前子捲根目錄的 .snapshots 隱藏資料夾中。比如當前子捲是 /,那麼就是 /.snapshots,如果是 /mnt/vol1,那就是 /mnt/vol1/.snapshots。快照始終存放在建立快照的那個分割區或子捲中,無法將快照儲存到其他分割區或子捲。
恢復檔案
要恢復一個或多個檔案,請執行
# snapper -c CONFIG -v undochange
SNAPSHOT_ID..0 FILENAME1 FILENAME2
如果沒有指定檔名,則會恢復所有已更改的檔案,可以通過以下命令復原以上操作,恢復系統狀態到快照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 |
提示: 舊快照占用的磁碟空間更多!!!
如果您要刪除快照以釋放硬碟上的空間,請務必先刪除舊快照。快照生成的時間越長,其佔用的空間就越大。通過組態檔設定自動刪除快照。有關詳細資訊,請參見清理演算法。
在精簡LVM卷上建立快照
除了在 Btrfs 檔案系統上生成快照之外,快照程式還支援在 XFS、Ext4 或 Ext3 格式的精簡LVM 捲(不支援在常規 LVM 捲上生成快照)上生成快照。
建立精簡LVM
以系統上的/dev/sdb、/dev/sdc為例,首先分別建立分割區/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.
檢視建立好的分割區如下:
# 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
建立PV:
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
建立VG:
# vgcreate vg_thin /dev/sdb1 /dev/sdc1
Volume group "vg_thin" successfully created
建立精簡池:
# lvcreate -L 5G --thinpool thin_pool vg_thin
Logical volume "thin_pool" created.
檢視精簡LVM,可以看到Allocated pool data為0,說明thin_pool尚未實際占用磁碟空間:
# 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
建立精簡捲thin_vol1、thin_vol2、thin_vol3,忽略警告,可以看到三個2G的精簡捲相加已經大於5G的精簡池thin_pool大小,但是建立仍然成功了,至於為什麼可以超額分配,請參考自動精簡設定(Thin provisioning )介紹
# 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.
建立檔案系統:
# mkfs.ext4 /dev/vg_thin/thin_vol1
掛載檔案系統:
# mkdir /mnt/vol1
# mount /dev/vg_thin/thin_vol1 /mnt/vol1
建立快照組態檔
為了在精簡 LVM 捲上使用快照程式,首先為其建立快照組態檔。在 LVM 上要使用 –fstype=lvm(filesystem) 指定檔案系統。檔案系統的有效值為 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 |
建立一組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
以普通使用者身份使用快照
預設情況下,快照程式只能由 root 使用者使用。但在特定情況下,某些組或使用者也需要建立快照或通過還原至快照來復原更改:
為 ALLOW_USERS 和(或)ALLOW_GROUPS 設定值,分別為使用者和(或)組授予許可權。多個條目需要使用空格 分隔。例如,要為使用者 thin_user 和 thin_group 授予許可權,可執行:
# snapper -c web_data set-config "ALLOW_USERS=thin_user" "ALLOW_GROUPS=thin_group"
也可以通過直接修改組態檔實現,此時,指定的使用者和(或)組便可以使用指定的快照程式設定。您可以使用 list 命令對其進行測試,例如:
# thin_user:~ > snapper -c lvm_config list
基本操作的講解到此結束,下面講一下一些高階設定:
自定義設定
以上我們都是採用Snapper自帶的預設設定/etc/snapper/config-templates/default建立組態檔,該預設組態檔經過了多方面的考慮,適合多數使用情況。使用者也可以根據自己的需要對如何建立自動快照以及如何保留快照進行自定義設定。
每個設定都包含一系列選項,這些選項可以通過命令列進行修改:
# snapper -c btrfs_config set-config "TIMELINE_CREATE=yes"
-
FSTYPE
分割區的檔案系統型別:btrfs、lvm(ext3)、lvm(ext4)、lvm(xfs),快照型別不可更改。 -
SUBVOLUME
分割區或子捲生成快照的安裝點。不可更改。 -
BACKGROUND_COMPARISON
定義在建立前後快照後是否要在後台對他們進行比較。預設值為 “yes”。
禁用/啟用timeline快照
時間線快照預設會啟用,可以直接修改組態檔裡的TIMELINE_CREATE為yes/no,也可以通過以下命令啟停:
- 啟用
# snapper -c btrfs_config set-config "TIMELINE_CREATE=yes"
-
禁用
# snapper -c btrfs_config set-config "TIMELINE_CREATE=no"
控制快照存檔間隔(清理規則)
快照會佔用磁碟空間。為了防止磁碟空間不足進而導致系統中斷,舊的快照會自動刪除:
清理演算法
Snapper提供有三種清理舊快照的演算法。這些演算法以每天計劃作業方式執行。您可以定義要在 Snapper 設定中保留的不同型別的快照數:
-
number
當達到某一快照計數時將刪除舊快照。 -
timeline
將刪除超過一定時限的舊快照,但保留一定量的每小時、每天、每月和每年快照。 -
empty-pre-post
將刪除無差異的前後快照對。
Snapper通過以下設定選項控制快照的清理規則:
-
TIMELINE_CLEANUP
定義當快照數量超出 TIMELINE_LIMIT_* 選項指定的數值同時快照超出 TIMELINE_MIN_AGE 中指定的時限時是否自動刪除舊快照。有效值:yes、no,預設值為 “yes”。 -
TIMELINE_CREATE
如果設定為 yes,便會每小時建立一個快照。這是目前唯一一種可以自動建立快照的方式,因此強烈建議將其設定為 yes。有效值:yes、no,預設值為 “yes”。 -
TIMELINE_MIN_AGE
定義快照在自動刪除前必須保留的最小時限(以秒為單位)。
預設值為 “1800”。 -
TIMELINE_LIMIT_DAILY、TIMELINE_LIMIT_HOURLY、TIMELINE_LIMIT_MONTHLY、 TIMELINE_LIMIT_YEARLY
按小時、天、月、年保留的快照數量。每一項的預設值均為 “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”
每小時:最近建立的十張快照。
每天:保留最近十天內每天建立的首張快照。
每月:保留最近十個月內每月的最後一天建立的首張快照。
每年:保留最後十年內每年的最後一天建立的首張快照。
此範例設定能夠實現按小時生成將自動清理的快照。TIMELINE_MIN_AGE和 TIMELINE_LIMIT_* 始終會同時進行評估。在本範例中,快照刪除前的最小保留時限設定為 30 分鐘(1800 秒)。因為我們會每小時建立一次快照,所以確保了只會保留最近的快照。如果 TIMELINE_LIMIT_DAILY 設定為非零值,則表示還會保留當天的首張快照。
-
NUMBER_CLEANUP
定義當快照總數超出 NUMBER_LIMIT 中指定的數值,同時快照超出 NUMBER_MIN_AGE 中指定的時限時,是否自動刪除舊的快照。有效值:yes、no,預設值為 “yes”。 -
NUMBER_LIMIT
在 NUMBER_CLEANUP 設定為 yes 時,定義要保留的沒有標記為重要的安裝快照對和管理快照對的數量。所保留的會是最新的那些快照。預設值為 “50”。 -
NUMBER_LIMIT_IMPORTANT
在 NUMBER_CLEANUP 設定為 yes 時,定義要保留的標記為重要的快照對數。所保留的會是最新的那些快照。預設值為 “10”。 -
NUMBER_MIN_AGE
定義快照對在自動刪除前必須保留的最小時限(以秒為單位)。預設值為 “1800”,即30分鐘。
註: 限制和時限
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT 和 NUMBER_MIN_AGE 始終都會評估。只有同時符合全部條件才會刪除快照。如果想不考慮時限而始終保留一定數量的快照,則可將 NUMBER_MIN_AGE 設定為 0。另外,如果快照超過一定時限之後不想再保留,可以將 NUMBER_LIMIT 和 NUMBER_LIMIT_IMPORTANT 設定為 0。
空快照的處理
EMPTY_PRE_POST_CLEANUP
如果設定為 yes,系統會刪除前後快照相同的快照對。預設值為 “yes”。
EMPTY_PRE_POST_MIN_AGE
定義前後快照相同的快照對在自動刪除之前必須保留的最短時限(以秒為單位)。預設值為 “1800”。
管理現有設定
snapper 有多個子命令可用於管理現有的設定。您可以列出、顯示這些設定,也可以對它們進行刪除和修改:
列出設定
使用以下命令顯示所有現有的設定:
# snapper list-configs
Config | Subvolume
-------------+----------
btrfs_config | /
lvm_config | /mnt/vol1
檢視設定
使用 snapper -c CONFIG get-config 子命令可以顯示指定的設定。CONFIG 應替換為執行 snapper list-configs 命令後所顯示的某個設定名稱。請參見設定資料以了解有關設定選項的更多資訊。
刪除設定
使用以下命令可以刪除設定。CONFIG 應替換為執行 snapper list-configs 命令後所顯示的某個設定名稱:
# snapper -c CONFIG delete-config
修改設定
使用以下命令可以修改指定設定中的選項。CONFIG 應替換為執行 snapper list-configs 命令後所顯示的某個設定名稱。OPTION 和 VALUE 的可能值可參見設定資料:
# snapper -c CONFIG set-config OPTION=VALUE
關於資料一致性
在建立快照時並沒有能確保資料一致性的機制。如果在建立快照的同時寫入某個檔案(例如資料庫),將導致檔案損壞或寫入不完整。恢復此類檔案會產生問題。而且,有些系統檔案(例如/etc/mtab)甚至永遠都無法恢復。因此==強烈建議==您要始終仔細檢視已更改檔案及其差異的列表。只恢復您要還原的操作真正包含的檔案。
修改快照後設資料
使用者可以使用快照程式修改說明、清理演算法以及快照的使用者資料,其他後設資料均無法更改。
使用snapper list 檢視所有快照及其編號
# snapper -c btrfs_config list
修改 btrfs_cconfig 設定的第 10 張快照的後設資料,將清理演算法設定為 timeline:
# snapper -c btrfs_config modify --cleanup-algorithm "timeline" 10
修改名為 btrfs_cconfig 設定的第 12 張快照的後設資料,設定新的說明,並取消設定清理演算法:
# snapper --config btrfs_config modify --description "daily backup" -cleanup-algorithm "timeline" 120
設定過濾規則
一些檔案主要用來儲存系統資訊,例如/etc/mtab,這類檔案不希望被快照操作影響到,Snapper允許通過/etc/snapper/filters/*.txt 指定過濾項,並在快照操作中忽略指定檔案或資料夾的變化。
例如我們的btrfs中我們不希望快照跟蹤/var、/tmp等,可以新增到filters,這樣在以後建立的快照中就看到不到關於/var、/tmp的快照跟蹤了。
其他
SUSE還支援從快照啟動作業系統,而CentOS還沒有引入該功能,我試用了一下沒有成功,不知道啥原因,以後有精力再研究吧。。。曬幾張截圖:
1
2
3
4
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-06/132381.htm
相關文章