我們可以想像以下場景:
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是一個開源的項目,它基於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文件系統為例,來利用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:
# 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快照, -p的含義是創建快照的同時,打印出快照編號:
# snapper -c btrfs_config create -t pre -p1# snapper -c btrfs_config listType | # | 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 -p2# snapper -c btrfs_config listType | # | 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.gzc..... /var/cache/yum/x86_64/7/timedhostsc..... /var/lib/rpm/Basenamesc..... /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_uuidc..... /var/log/audit/audit.logc..... /var/log/cronc..... /var/log/messagesc..... /var/log/snapper.logc..... /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 listType | # | 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/netstatBinary 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 listType | # | Pre # | Date | User | Cleanup | Description | Userdata-------+---+-------+------+------+---------+-------------+---------single | 0 | | | root | | current |
提示: 舊快照占用的磁盤空間更多!!!
如果您要刪除快照以釋放硬盤上的空間,請務必先刪除舊快照。快照生成的時間越長,其占用的空間就越大。通過配置文件設置自動刪除快照。有關詳細信息,請參見清理算法。
除了在 Btrfs 文件系統上生成快照之外,快照程序還支持在 XFS、Ext4 或 Ext3 格式的精簡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 tableBuilding a new DOS disklabel with disk identifier 0x962bc2ec.Command (m for help): nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): Using default response pPartition number (1-4, default 1): First sector (2048-10485759, default 2048): Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): Using default value 10485759Partition 1 of type Linux and of size 5 GiB is setCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.
查看創建好的分區如下:
# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 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 /homesdb 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_pool6 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 listType | # | Pre # | Date | User | Cleanup | Description | Userdata-------+---+-------+------+------+---------+-------------+---------single | 0 | | | root | | current |
# snapper -c lvm_config create --command "echo Hello > /mnt/vol1/hello_file"# snapper -c lvm_config listType | # | 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 | | |
# 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_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-configsConfig | 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的快照跟蹤了。
http://xxxxxx/Linuxjc/1137409.html TechArticle