標籤:
為什麼要使用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快照。
建立pre或者post快照
可以單獨建立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 |
提示: 舊快照佔用的磁碟空間更多!!!
如果您要刪除快照以釋放硬碟上的空間,請務必先刪除舊快照。快照產生的時間越長,其佔用的空間就越大。通過設定檔設定自動刪除快照。有關詳細資料,請參見清理演算法。
在精簡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 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 |
建立一組pre/post快照對
# 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 | | |
查看快照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提供有三種清理舊快照的演算法。這些演算法以每天計劃作業方式執行。您可以定義要在 Snapper 配置中保留的不同類型的快照數:
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的快照跟蹤了。
其他
SUSE還支援從快照啟動作業系統,而CentOS還沒有引入該功能,我試用了一下沒有成功,不知道啥原因,以後有精力再研究吧。。。曬幾張:
1
2
3
4
CentOS 7中利用Snapper快照進行系統備份與恢複