在 Linux 上建立檔案系統快照以執行復原的功能是過去使用者常常要求的一項功能。現在,Snapper 與 Btrfs 檔案系統或簡易佈建的 LVM 磁碟區合用,填補了這個空白。
Btrfs 是一個適用於 Linux 的全新寫時複製檔案系統,它支援子磁碟區 (每個實體分割區中的一或多個可獨立掛接的檔案系統) 的檔案系統快照 (子磁碟區於特定時間點之狀態的副本)。快照在使用 XFS、Ext4 或 Ext3 格式化之簡易佈建的 LVM 磁碟區上同樣受支援。Snapper 可讓您建立和管理這些快照。它包含一個指令行和一個 YaST 介面。自 SUSE Linux Enterprise Server 12 開始,還可以從 Btrfs 快照進行開機。如需詳細資訊,請參閱第 4.3 節「透過從快照開機來執行系統復原」。
您可以使用 Snapper 執行以下任務︰
復原 zypper 和 YaST 所做的系統變更。如需詳細資料,請參閱第 4.2 節「使用 Snapper 復原變更」。
從之前的快照還原檔案。如需詳細資料,請參閱第 4.2.2 節「使用 Snapper 還原檔案」。
透過從快照開機來復原系統。如需詳細資料,請參閱第 4.3 節「透過從快照開機來執行系統復原」。
手動建立即時快照並管理現有的快照。如需詳細資料,請參閱第 4.5 節「手動建立和管理快照」。
SUSE Linux Enterprise Desktop 上的 Snapper 設定為充當系統變更的「恢復與復原工具」。依預設,SUSE Linux Enterprise Desktop 的根分割區 (/) 使用 Btrfs 格式。如果根分割區 (/) 足夠大 (大約超過 8GB),則會自動啟用快照建立功能。預設不會在 / 外的分割區上建立快照。
建立快照時,快照和原件都會指向檔案系統中的同一區塊。因此,快照最初並不佔用額外的磁碟空間。如果原始檔案系統中的資料經過修改,則會複製變更後的資料區塊,同時保留快照的舊資料區塊。因此,快照便會佔用與已修改資料相同的空間。這樣,經過一段時間之後,快照配置的空間不斷增大。因而,從包含快照的 Btrfs 檔案系統刪除檔案可能無法釋放磁碟空間!
快照始終位於建立快照所在的同一分割區或子磁碟區上。而無法儲存到其他分割區或子磁碟區上。
因此,包含快照的分割區必須比「一般」分割區更大。確切大小很大程度上取決於保留的快照數和資料修改量。一般來說,您應該考慮使用比平常大兩倍的大小。
雖然快照本身在技術上並無不同,但是我們會根據建立的場合將快照分成三類。
每小時建立一個快照。系統會自動刪除舊快照。依預設,系統會保留過去十天、十個月或十年的第一個快照。預設會啟用時間軸快照,根分割區除外。
每當使用 YaST 或 Zypper 安裝一個或多個套件時,均會建立一對快照︰安裝開始前建立一個 (「前」),安裝結束後建立另一個 (「後」)。如果重要系統元件 (如核心) 已經安裝,則快照對會標示為重要 (important=yes)。系統會自動刪除舊快照。依預設,系統會保留最近十個重要快照以及最近十個「一般」快照 (包括管理快照)。預設系統會啟用安裝快照。
每當您使用 YaST 管理系統時,均會建立一對快照︰啟動 YaST 模組時建立一個 (「前」),關閉模組時建立另一個 (「後」)。系統會自動刪除舊快照。依預設,系統會保留最近十個重要快照以及最近十個「一般」快照 (包括安裝快照)。預設系統會啟用管理快照。
出於不同原因,需要將一些目錄從快照中排除。下列清單顯示排除的所有目錄︰
/boot/grub2/x86_64-efi、
不支援對開機載入程式組態進行復原。
/home
如果 /home 不在獨立的分割區上,系統會將其排除以避免在復原時發生資料遺失。
/opt、/var/opt
協力廠商產品以及附加產品通常會安裝到 /opt。系統會將該目錄排除以避免在復原時解除安裝這些應用程式。
/srv
包含 Web 和 FTP 伺服器的資料。系統會將該目錄排除以避免在復原時發生資料遺失。
/tmp、/var/tmp、/var/crash
包含暫存檔案的所有目錄均會從快照中排除。
/var/lib/named
包含 DNS 伺服器的區域資料。從快照中排除該目錄是為了確保名稱伺服器在復原之後可以運作。
/var/lib/mailman、/var/spool
系統會排除包含郵件或郵件佇列的目錄以避免復原之後遺失郵件。
/var/lib/pgqsl
包含 PostgreSQL 資料。
/var/log
記錄檔案位置。從快照中排除該目錄是為了在復原損毀系統之後能夠對記錄檔案進行分析。
SUSE Linux Enterprise Desktop 隨附合理的預設設定,該設定適合大多數使用案例。不過,您可以根據自己的需求對建立自動快照以及快照保留的方方面面進行設定。
三種快照類型 (時間軸、安裝、管理) 均可獨立啟用或停用。
啟用.
snapper
-c root set-config "TIMELINE_CREATE=yes"
停用.
snapper
-c root set-config "TIMELINE_CREATE=no"
預設會啟用時間軸快照,根分割區除外。
啟用:
安裝套件 snapper-zypp-plugin
停用:
解除安裝套件 snapper-zypp-plugin
預設系統會啟用安裝快照。
啟用:
在 /etc/sysconfig/yast2 中將 USE_SNAPPER 設定為 yes。
停用:
在 /etc/sysconfig/yast2 中將 USE_SNAPPER 設定為 no。
預設系統會啟用管理快照。
使用 YaST 或 Zypper 安裝套件時所建立的快照對由 snapper-zypp-plugin 處理。何時建立快照由 XML 組態檔案 /etc/snapper/zypp-plugin.conf 定義。依預設,該檔案如下所示︰
1 <?xml version="1.0" encoding="utf-8"?> 2 <snapper-zypp-plugin-conf> 3 <solvables> 4 <solvable match="w"1 important="true"2>kernel-*3</solvable> 5 <solvable match="w" important="true">dracut</solvable> 6 <solvable match="w" important="true">glibc</solvable> 7 <solvable match="w" important="true">systemd*</solvable> 8 <solvable match="w" important="true">udev</solvable> 9 <solvable match="w">*</solvable>4 10 </solvables> 11 </snapper-zypp-plugin-conf>
match 屬性定義模式是 Unix 外圍程序樣式的萬用字元 ( | |
如果符合指定模式並且相應的套件標示為重要 (如核心套件),則該快照也會標示為重要。 | |
用於比對套件名稱的模式。根據 | |
此行無條件符合所有套件。 |
使用此組態時,只要安裝套件即會建立快照對 (第 9 行)。在安裝標示為重要的核心、dracut、glibc、systemd 或 udev 套件時,快照對也會標示為重要 (第 4 行至第 8 行)。系統會評估所有規則。
要停用規則,請使用 XML 備註將其刪除或停用。若想避免系統在每次安裝套件時都建立快照對,可將第 9 行設為備註︰
1 <?xml version="1.0" encoding="utf-8"?> 2 <snapper-zypp-plugin-conf> 3 <solvables> 4 <solvable match="w" important="true">kernel-*</solvable> 5 <solvable match="w" important="true">dracut</solvable> 6 <solvable match="w" important="true">glibc</solvable> 7 <solvable match="w" important="true">systemd*</solvable> 8 <solvable match="w" important="true">udev</solvable> 9 <!-- <solvable match="w">*</solvable> --> 10 </solvables> 11 </snapper-zypp-plugin-conf>
快照會佔用磁碟空間。為了防止磁碟用盡而導致系統中斷,會自動刪除舊快照。依預設,系統會保留以下快照︰
最近十天、十個月、十年的第一個快照
最近十個標示為重要的安裝快照對
最近十個安裝/管理快照
如需如何變更這些值的指示,請參閱第 4.4.1 節「管理現有的組態」。
除了針對 Btrfs 檔案系統建立快照之外,Snapper 還支援針對使用 XFS、Ext4 或 Ext3 格式化之簡易佈建的 LVM 磁碟區建立快照 (但不支援對一般 LVM 磁碟區建立快照)。如需 LVM 磁碟區的詳細資訊以及設定指示,請參閱Section “LVM Configuration”, Chapter 12, Advanced Disk Setup, Deployment Guide。
若要對簡易佈建的 LVM 磁碟區使用 Snapper,您需要為它建立一個 Snapper 組態。在 LVM 上,需要使用 --fstype=lvm(檔案系統) 指定檔案系統。檔案系統 的有效值有 ext3、etx4 或 xfs。範例:
snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm
您可以依第 4.4.1 節「管理現有的組態」 中所述根據需求調整此組態。
SUSE Linux Enterprise Desktop 上的 Snapper 已預先設定為充當復原 zypper 和 YaST 所做變更的工具。要充當復原工具,Snapper 設定為在每次執行 zypper 和 YaST 的前後建立一對快照。此外,Snapper 還可讓您還原遭意外刪除或修改的系統檔案。出於此目的需要啟用根分割區的時間軸快照 — 如需詳細資訊,請參閱第 4.1.1.1 節「停用/啟用快照」。
預設會為根分割區及其子磁碟區設定上述的自動快照。為了讓這些快照可供其他分割區 (例如 /home) 使用,您可以建立自定組態。
使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。
當如下文所述復原變更時,系統會比較兩個快照,並復原這兩個快照之間的變更。使用此方法還允許明確選取要還原的檔案。
當如第 4.3 節「透過從快照開機來執行系統復原」中所述執行復原時,系統會重設回建立快照當時的狀態。
復原變更時,還可以將快照與目前系統進行比較。根據此類比較還原全部檔案時,其效果等同於執行復原。但是,還是建議使用第 4.3 節「透過從快照開機來執行系統復原」中所述的方法復原,因為它的速度更快並且可讓您在執行復原之前複查系統。
在建立快照時,沒有任何一種機制可確保資料的一致性。如果在建立快照的同時寫入檔案 (如資料庫),則將導致檔案損毀或部分寫入。還原此類檔案將會導致問題。此外,有些系統檔案 (例如 /etc/mtab) 是絕對不能還原的。因此,強烈建議您始終仔細檢閱已變更檔案及其差異的清單。請只還原真正屬於您要執行回復的檔案。
如果您在安裝期間使用 Btrfs 設定根分割區,系統將會自動安裝 Snapper (已預先設定為用於復原 YaST 或 Zypper 所做的變更)。每當您啟動 YaST 模組或 Zypper 交易時,都會建立兩個快照:擷取啟動模組之前檔案系統狀態的「前快照」,以及完成模組之後的「後快照」。
您可以使用 YaST Snapper 模組或 snapper 指令行工具,透過從「前快照」還原檔案來復原 YaST/Zypper 所做的變更。比較兩個快照時,這些工具還可讓您查看哪些檔案已經過變更。此外,您還可以顯示某檔案的兩個版本之間的差異 (diff)。
從 YaST 的區段或透過輸入 yast2 snapper 啟動模組。
請確定設為。除非您手動新增了自己的 Snapper 組態,否則應始終如此設定。
從清單中選擇一對前快照和後快照。YaST 與 Zypper 快照對都屬於類型。在欄中,YaST 快照標示為 zypp(y2base),Zypper 快照標示為 zypp(zypper)。
按一下以開啟兩個快照之間不同的檔案清單。
檢閱檔案清單。若要顯示檔案的前版本與後版本之間的「差異」,請從清單中選取它。
要還原一個或多個檔案,請勾選相應的核取方塊來選取相關的檔案或目錄。按一下,然後按一下確認該動作。
要還原單個檔案,請按一下其名稱以啟動差異比對檢視。按一下,然後按一下確認您的選擇。
snapper 指令復原變更 #
執行 snapper list 取得 YaST 和 Zypper 快照的清單。在欄中,YaST 快照標示為 -t pre-postyast 模組名稱;Zypper 快照標示為 zypp(zypper)。
root # snapper list -t pre-post
Pre # | Post # | Pre Date | Post Date | Description
------+--------+-------------------------------+-------------------------------+--------------
311 | 312 | Tue 06 May 2014 14:05:46 CEST | Tue 06 May 2014 14:05:52 CEST | zypp(y2base)
340 | 341 | Wed 07 May 2014 16:15:10 CEST | Wed 07 May 2014 16:15:16 CEST | zypp(zypper)
342 | 343 | Wed 07 May 2014 16:20:38 CEST | Wed 07 May 2014 16:20:42 CEST | zypp(y2base)
344 | 345 | Wed 07 May 2014 16:21:23 CEST | Wed 07 May 2014 16:21:24 CEST | zypp(zypper)
346 | 347 | Wed 07 May 2014 16:41:06 CEST | Wed 07 May 2014 16:41:10 CEST | zypp(y2base)
348 | 349 | Wed 07 May 2014 16:44:50 CEST | Wed 07 May 2014 16:44:53 CEST | zypp(y2base)
350 | 351 | Wed 07 May 2014 16:46:27 CEST | Wed 07 May 2014 16:46:38 CEST | zypp(y2base)
使用下列指令取得快照對的已變更檔案清單:snapper status 前..後。含有內容變更的檔案以 標示,新增的檔案以 標示,刪除的檔案以 標示。
root # snapper status 350..351
+..... /usr/share/doc/packages/mikachan-fonts
+..... /usr/share/doc/packages/mikachan-fonts/COPYING
+..... /usr/share/doc/packages/mikachan-fonts/dl.html
c..... /usr/share/fonts/truetype/fonts.dir
c..... /usr/share/fonts/truetype/fonts.scale
+..... /usr/share/fonts/truetype/みかちゃん-p.ttf
+..... /usr/share/fonts/truetype/みかちゃん-pb.ttf
+..... /usr/share/fonts/truetype/みかちゃん-ps.ttf
+..... /usr/share/fonts/truetype/みかちゃん.ttf
c..... /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
c..... /var/lib/rpm/Basenames
c..... /var/lib/rpm/Dirnames
c..... /var/lib/rpm/Group
c..... /var/lib/rpm/Installtid
c..... /var/lib/rpm/Name
c..... /var/lib/rpm/Packages
c..... /var/lib/rpm/Providename
c..... /var/lib/rpm/Requirename
c..... /var/lib/rpm/Sha1header
c..... /var/lib/rpm/Sigmd5
若要顯示特定檔案的差異,請執行 snapper diff 前..後 檔案名稱。如果不指定檔案名稱,將會顯示所有檔案的差異。
root # snapper diff 350..351 /usr/share/fonts/truetype/fonts.scale
--- /.snapshots/350/snapshot/usr/share/fonts/truetype/fonts.scale 2014-04-23 15:58:57.000000000 +0200
+++ /.snapshots/351/snapshot/usr/share/fonts/truetype/fonts.scale 2014-05-07 16:46:31.000000000 +0200
@@ -1,4 +1,4 @@
-1174
+1486
ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso10646-1
ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso8859-1
[...]
若要還原一或多個檔案,請執行 snapper -v undochange 前..後 檔案名稱。如果不指定檔案名稱,將會還原所有已變更的檔案。
root # snapper -v undochange 350..351
create:0 modify:13 delete:7
undoing change...
deleting /usr/share/doc/packages/mikachan-fonts
deleting /usr/share/doc/packages/mikachan-fonts/COPYING
deleting /usr/share/doc/packages/mikachan-fonts/dl.html
deleting /usr/share/fonts/truetype/みかちゃん-p.ttf
deleting /usr/share/fonts/truetype/みかちゃん-pb.ttf
deleting /usr/share/fonts/truetype/みかちゃん-ps.ttf
deleting /usr/share/fonts/truetype/みかちゃん.ttf
modifying /usr/share/fonts/truetype/fonts.dir
modifying /usr/share/fonts/truetype/fonts.scale
modifying /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
modifying /var/lib/rpm/Basenames
modifying /var/lib/rpm/Dirnames
modifying /var/lib/rpm/Group
modifying /var/lib/rpm/Installtid
modifying /var/lib/rpm/Name
modifying /var/lib/rpm/Packages
modifying /var/lib/rpm/Providename
modifying /var/lib/rpm/Requirename
modifying /var/lib/rpm/Sha1header
modifying /var/lib/rpm/Sigmd5
undoing change done不建議透過使用 Snapper 回復變更的方式回復使用者新增。因為快照中排除了某些目錄,屬於這些使用者的檔案將保留在檔案系統中。如果使用已刪除使用者的使用者 ID 建立使用者,則此使用者將繼承這些檔案。因此,強烈建議您使用 YaST工具來移除使用者。
除了安裝與管理快照之外,Snapper 還會建立時間軸快照。您可以使用這些備份快照來還原不小心刪除的檔案或還原舊版檔案。利用 Snapper 的差異比對功能,您還可以瞭解在特定時間點執行了哪些修改。
還原檔案功能對於預設不會建立快照的子磁碟區或分割區上的資料尤其有用。例如,要從主目錄還原檔案,可以為自動建立時間軸快照的 /home 建立單獨的 Snapper 組態。如需指示,請參閱第 4.4 節「建立和修改 Snapper 組態」。
從根檔案系統 (由 Snapper 的根組態定義) 建立的快照可用於執行系統復原。建議您使用從快照開機然後執行復原的方式執行此復原。如需詳細資料,請參閱第 4.3 節「透過從快照開機來執行系統復原」。
也可使用從根檔案系統快照還原所有檔案的方式執行復原 (如下文所述)。但我們不建議採用這種方法。您可以還原單個檔案 (如 /etc 目錄中的組態檔案),但不能從快照還原整份檔案清單中的檔案。
此限制僅影響從根檔案系統建立的快照!
從 YaST 的區段或透過輸入 yast2 snapper 啟動模組。
選擇要從中選擇快照的。
選取要從中還原檔案的時間軸快照,並選擇。時間軸快照屬於類型,以描述。
按一下檔案名稱,從文字方塊中選取一個檔案。隨即顯示快照版本與目前系統之間的差異。勾選該核取方塊以選取要還原的檔案。對所有您要還原的檔案執行此操作。
按一下,然後按一下確認該動作。
snapper 指令還原檔案 #執行以下指令獲取特定組態之時間軸快照的清單︰
snapper -c CONFIG list -t single | grep timeline
CONFIG 需要以現有的 Snapper 組態取代。使用 snapper list-configs 顯示清單。
執行以下指令獲取指定快照之已變更檔案的清單︰
snapper -c CONFIG status SNAPSHOT_ID>..0
以您要從中還原檔案之快照的 ID 取代 SNAPSHOT_ID。
(選擇性)透過執行以下指令,列出目前檔案版本與快照中之檔案的差異
snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME
如果您未指定 <檔案名稱>,則會顯示所有檔案的差異。
要還原一或多個檔案,請執行
snapper -c CONFIG -v undochange
SNAPSHOT_ID..0 FILENAME1 FILENAME2如果未指定檔案名稱,將會還原所有已變更的檔案。
SUSE Linux Enterprise Desktop 上包含的 GRUB 2 版本能夠從 Btrfs 快照開機。除 Snapper 的復原功能外,它還可復原設定有誤的系統。Snapper 建立的所有快照都可用於開機,並且可從開機功能表中選取。
只有根檔案系統 (由 Snapper 的根組態定義) 中的快照屬於可開機快照。
將快照開機時,該快照中包含之檔案系統的部分會以唯讀模式掛接,而從快照中排除的所有其他檔案系統以及該檔案系統的排除部分會以讀寫模式掛接並且可修改。
使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。
如第 4.2 節「使用 Snapper 復原變更」中所述復原變更時,系統會比較兩個快照並回復這兩個快照之間的變更。使用此方法還可以將選取的檔案明確排除在還原之外。
如下文所述執行復原時,系統會重設回建立快照當時的狀態。
若要從可開機快照執行復原,必須符合以下要求。執行預設安裝時,系統會進行相應設定。
根檔案系統必須是 Btrfs。不支援從 LVM 磁碟區快照開機。
根檔案系統必須位於單一裝置、單一分割區以及單一子磁碟區上。如 /srv 之類從快照中排除的目錄 (如需完整的清單,請參閱從快照中排除的目錄) 可以位於單獨的分割區上。
系統必須能透過已安裝的開機載入程式開機。
要從可開機的快照執行復原,請按如下步驟執行︰
將系統開機。在開機功能表中,選擇並選取您要開機的快照。系統會按日期列出快照清單,最近的快照最先列出。
登入系統。仔細檢查是否一切都如預期般運作。請注意,您無法對快照中包含的任何目錄執行寫入。但無論您接下來執行什麼操作,您寫入到其他目錄的資料都不會遺失。
根據您是否要執行復原操作,選擇下一步動作︰
如果系統處於您不想執行復原的狀態,請重新開機以開機到目前系統狀態,然後選擇其他快照或啟動救援系統。
如果您要執行復原,請執行
sudo snapper rollback
並在之後重新開機。在開機螢幕上,選擇預設開機項目以重新開機到已恢復的系統。
無法進行完整系統復原,即將整個系統還原到與建立快照當時完全相同的狀態。
根檔案系統快照並不包含所有目錄。如需詳細資料和原因,請參閱從快照中排除的目錄。因此,這些目錄中的資料不會還原,也就形成以下限制。
如果從快照中排除的子磁碟區 (如 /opt) 中的應用程式還有其他部分資料安裝在該快照中包含的子磁碟區中,則應用程式及附加產品的安裝資料在復原後可能無法使用。重新安裝應用程式或附加產品可解決此問題。
如果應用程式在快照以及目前系統之間變更了檔案許可權和/或擁有權,則復原後該應用程式可能無法存取這些檔案。請在復原之後重設受影響檔案的許可權和/或擁有權。
如果服務或應用程式在快照和目前系統之間建立了新的資料格式,則復原之後該應用程式可能無法讀取受影響的資料檔案。
/srv 等子磁碟區可能同時包含代碼和資料。復原可能導致代碼不起作用。例如,降級 PHP 版本可能導致該 Web 伺服器之 PHP 程序檔損毀。
如果復原從系統移除了使用者,但這些使用者所擁有的資料存在於快照排除的目錄中,則這些資料不會予以移除。如果使用相同使用者 ID 建立使用者,則此使用者將繼承這些檔案。使用 find 等工具尋找並移除孤立的檔案。
無法復原開機載入程式,因為開機載入程式的所有「階段」必須組合在一起共同作用。而執行復原則無法保證這一要求。
每個分割區或 Btrfs 子磁碟區都有一個專用的組態檔案用於定義 Snapper 的行為方式。這些組態檔案位於 /etc/snapper/configs/ 下。隨 Snapper 一起安裝之 / 目錄的預設組態名為 root。它會建立並管理 YaST 和 Zypper 快照,以及 / 的每小時備份快照。
您可以為其他格式為 Btrfs 的分割區或 Btrfs 分割區上的現有子磁碟區建立您自己的組態。在下面的範例中,我們將設定 Snapper 組態以用於備份掛接於 /srv/www 且採用 Btrfs 格式之獨立分割區上的 Web 伺服器資料。
建立組態後,您可以使用 snapper 自身或 YaST 模組從這些快照中還原檔案。在 YaST 中,您需要選取,同時還需要使用全域參數 -c 指定 snapper 的組態 (例如 snapper )。
-c myconfig list
若要建立新的 Snapper 組態,請執行 snapper create-config:
snapper -c www-data1 create-config /srv/www2
此指令將會使用 /etc/snapper/config-templates/default 中的合理預設值建立一個新的組態檔案 /etc/snapper/configs/www-data。如需如何調整這些預設值的指示,請參閱第 4.4.1 節「管理現有的組態」。
新組態的預設值取自 /etc/snapper/config-templates/default。若要使用您自己的一組預設值,請在同一目錄中建立此檔案的副本,然後根據您的需求進行調整。若要使用該副本,請使用 create-config 指令指定 -t 選項:
snapper -c www-data create-config -t my_defaults /srv/www
snapper 提供多個用於管理現有組態的子指令。您可以列出、顯示、刪除及修改它們︰
使用指令 snapper list-configs 可獲取所有現有組態︰
root # snapper list-configs
Config | Subvolume
-------+----------
root | /
usr | /usr
local | /local
使用子指令 snapper 可刪除組態。Config 需要使用 -c CONFIG delete-configsnapper list-configs 所顯示的組態名稱取代。
使用子指令 snapper 可顯示指定的組態。Config 需要使用 -c CONFIG get-configsnapper list-configs 所顯示的組態名稱取代。如需有關組態選項的詳細資訊,請參閱第 4.4.1.1 節「組態資料」。
使用子指令 snapper 可修改指定組態中的選項。Config 需要使用 -c CONFIG set-config OPTION=VALUEsnapper list-configs 所顯示的組態名稱取代。OPTION 及 VALUE 的可能的值列於第 4.4.1.1 節「組態資料」中。
每個組態都包含可以從指令行修改的選項清單。下列清單提供每個選項的詳細資料︰
ALLOW_GROUPS、ALLOW_USERS
授予一般使用者快照的使用權限。如需相關資訊,請參閱第 4.4.1.2 節「以一般使用者身分使用 Snapper」。
預設值為 "".
BACKGROUND_COMPARISON
定義建立前後快照後是否應在背景中對它們進行比較。
預設值為 "yes"。
如果設定為 yes,將會刪除前後快照相同的快照對。
預設值為 "no"。
定義前後快照相同的快照對在自動刪除之前必須保留的最短期限 (以秒為單位)。
預設值為 "1800"。
FSTYPE
分割區的檔案系統類型。請勿進行變更。
預設值為 "btrfs"。
NUMBER_CLEANUP
定義當快照總數超出 NUMBER_LIMIT 指定的數目以及 NUMBER_MIN_AGE 指定的期限時,是否自動刪除舊的安裝和管理快照。有效值:yes 和 no
預設值為 "no"。
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT 和 NUMBER_MIN_AGE 始終會予以評估。只有在滿足全部條件時,才會刪除快照。如果您希望總是保留特定數目的快照而不考慮其期限,請將 NUMBER_MIN_AGE 設為 0。不過,如果您不想保留超過特定期限的快照,請將 NUMBER_LIMIT 和 NUMBER_LIMIT_IMPORTANT 設為 0。
NUMBER_LIMIT
在 NUMBER_CLEANUP 設定為 yes 時,定義要保留的未標示為重要的安裝和管理快照對的數量。只會保留最新的快照。
預設值為 "50"。
NUMBER_LIMIT_IMPORTANT
在 NUMBER_CLEANUP 設定為 yes 時,定義要保留的標示為重要的快照對數。只會保留最新的快照。
預設值為 "10"。
NUMBER_MIN_AGE
定義快照對在自動刪除之前必須保留的最短期限 (以秒為單位)。
預設值為 "1800"。
SUBVOLUME
要建立快照之分割區或子磁碟區的掛裝點。請勿進行變更。
SYNC_ACL
如果是一般使用者使用 Snapper (請參閱第 4.4.1.2 節「以一般使用者身分使用 Snapper」),則使用者必須能夠存取 .snapshot 目錄並能夠讀取其中的檔案。如果 SYNC_ACL 設定為 yes,Snapper 會使用 ACL 自動允許 ALLOW_USERS 或 ALLOW_GROUPS 項目中的使用者和群組存取該目錄及其中的檔案。
預設值為 "no"。
TIMELINE_CLEANUP
定義當快照計數超出使用時間軸限制 * 選項指定的數目以及使用 TIMELINE_MIN_AGE 指定的期限時,是否自動刪除舊快照。有效值:yes 和 no
預設值為 "no"。
TIMELINE_CREATE
如果設定為 yes,則會每小時建立一個快照。這是目前可自動建立快照的唯一方式,因此強烈建議將此選項設定為 yes。有效值:yes 和 no
預設值為 "no"。
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 設為非零值,這表示同時會保留當天的第一個快照。
每小時:已建立的最後十個快照。
每日:保留最近十天內建立的第一個每日快照。
每月:保留最近十個月內當月最後一天建立的第一個快照。
每年:保留最近十年內當年最後一天建立的第一個快照。
TIMELINE_MIN_AGE
定義快照在可供自動刪除之前的最短保留期限 (秒)。
預設值為 "1800"。
依預設,Snapper 只能由 root 使用者使用。但是,在下列情況中,某些群組或使用者需要能夠建立快照或透過回復至快照來復原變更:
想要建立 /srv/www 快照的網站管理員
想要建立其主目錄快照的使用者
為了以上這些目的,您可以建立用於授予使用者或/和群組權限的 Snapper 組態。相應的 .snapshots 目錄必須可由指定的使用者讀取和存取。實現這一目的最簡單的方法是將 SYNC_ACL 選項設定為 yes。
請注意,此程序中的所有步驟都必須由 root 使用者執行。
若不存在,請為使用者應該能夠在其上使用 Snapper 的分割區或子磁碟區建立 Snapper 組態。如需指示,請參閱第 4.4 節「建立和修改 Snapper 組態」。範例:
snapper --config web_data create /srv/www
組態檔案將在 /etc/snapper/configs/CONFIG 下建立,其中 CONFIG 是您在上一步中使用 -c/--config 指定的值 (如 /etc/snapper/configs/web_data)。根據您的需求調整該值;如需詳細資料,請參閱第 4.4.1 節「管理現有的組態」。
設定 ALLOW_USERS 和/或 ALLOW_GROUPS 的值,以分別向使用者和/或群組授予權限。多個項目需要用 Space 加以分隔。例如,若要向使用者 www_admin 授予權限,請執行:
snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
現在,指定的使用者和/或群組便可以使用給定的 Snapper 組態。您可以使用 list 指令進行測試,例如:
www_admin:~ > snapper -c web_data list
Snapper 並不限於依照組態自動建立和管理快照;您還可以使用指令行工具或 YaST 模組手動建立快照對 (「前與後」) 或單一快照。
所有 Snapper 操作都會對現有組態進行 (如需詳細資料,請參閱第 4.4 節「建立和修改 Snapper 組態」)。您只能為存在組態的分割區或磁碟區建立快照。預設會使用系統組態 (根)。如果您要為您自己的組態建立或管理快照,則必須明確選擇它。使用 YaST 中的下拉式方塊,或在指令行上指定 -c 選項 (snapper )。
-c MYCONFIG COMMAND
每個快照都包含快照本身和一些中繼資料。建立快照時,您還需要指定中繼資料。修改快照即表示變更其中繼資料 — 您無法修改其內容。下列中繼資料適用於每個快照:
類型:快照類型,請參閱第 4.5.1.1 節「快照類型」 以取得詳細資料。此資料無法變更。
編號:快照的唯一編號。此資料無法變更。
前快照編號:指定相應前快照的編號。僅適用於類型為後的快照。此資料無法變更。
描述:快照的描述。
使用者資料:延伸描述,您可在其中以逗號分隔之「鍵=值」清單的形式指定自定資料:reason=testing, project=foo。此欄位還用於將快照標示為重要 (important=yes) 並列出建立該快照的使用者 (user=tux)。
清理演算法:快照的清理演算法,請參閱第 4.5.1.2 節「清理演算法」 以取得詳細資料。
Snapper 知道三種不同類型的快照:前、後與單一。實際上,它們並無差異,但是 Snapper 會以不同的方式處理它們。
前
修改前檔案系統的快照。每個前快照都對應一個後快照。例如,用於自動建立 YaST/Zypper 快照。
後
修改後檔案系統的快照。每個後快照都對應一個前快照。例如,用於自動建立 YaST/Zypper 快照。
單一
獨立快照。例如,用於自動按小時建立快照。這是建立快照時的預設類型。
Snapper 提供了三種用於清理舊快照的演算法。每日 cron 工作中會執行這些演算法。清理頻率本身是在分割區或子磁碟區的 Snapper 組態中加以定義 (如需詳細資料,請參閱第 4.4.1 節「管理現有的組態」)。
當達到特定的快照計數時刪除舊快照。
刪除經過特定期限的舊快照,但會保留大量每小時、每日、每月和每年快照。
刪除無差異的前/後快照對。
可透過執行 snapper create 或在 YaST 模組 中按一下建立快照。下列範例說明如何從指令行建立快照。透過 YaST 介面可便於採用這兩種建立方法。
您應始終指定有意義的描述,以便日後能夠識別其用途。透過使用者資料選項可以指定更多資訊。
snappercreate --description "2014 年第 2 週的快照"
為預設 (根) 組態建立獨立快照 (類型為單一) 並提供描述。因為未指定清理演算法,所以一律不自動刪除快照。
snapper --config home create --description "在 ~tux 中清理"
為名為 home 的自定組態建立獨立快照 (類型為單一) 並提供描述。因為未指定清理演算法,所以一律不自動刪除快照。
snapper --config home create --description "每日資料備份" --cleanup-algorithm timeline
為名為 home 的自定組態建立獨立快照 (類型為單一) 並提供描述。當檔案符合特定於組態中時間軸清理演算法的準則時,將會自動刪除該檔案。
snapper create --type pre--print-number--description "在 Apache 組態清理之前"--userdata "important=yes"
建立類型為前的快照並列印快照編號。需要第一個指令才能建立用於儲存「前」和「後」狀態的快照對。快照會標示為重要。
snapper create --type post--pre-number 30--description "在 Apache 組態清理之前"--userdata "important=yes"
建立類型為後並與前快照編號 30 配對的快照。需要第二個指令才能建立用於儲存「前」和「後」狀態的快照對。快照會標示為重要。
snapper create --command COMMAND--description "在指令前後"
在執行指令前後自動建立快照對。僅當在指令行上使用 snapper 時,此選項才可用。
Snapper 可讓您修改快照的描述、清理演算法和使用者資料,所有其他中繼資料則無法變更。下列範例說明如何從指令行修改快照。透過 YaST 介面可便於採用這兩種建立方法。
若要透過指令行修改快照,您需要知道其編號。請使用 snapper 來顯示所有快照及其編號。
list
YaST 模組已列出所有快照。從清單中選擇一個快照,然後按一下。
snapper modify --cleanup-algorithm "時間軸" 10
修改預設 (根) 組態之快照 10 的中繼資料。清理演算法設為時間軸。
snapper --config home modify --description "每日備份" -cleanup-algorithm "時間軸"120
修改名為 home 的自定組態之快照 120 的中繼資料。將會設定新的描述並取消設定清理演算法。
若要使用 YaST 模組刪除快照,請從清單中選擇快照,然後按一下。
若要使用指令行工具刪除快照,您需要知道其編號。請透過執行 snapper list 來取得該編號。若要刪除快照,請執行 snapper delete 編號。
刪除前快照時,您應一律刪除其對應的後快照 (反之亦然)。
snapper delete 65
刪除預設 (根) 組態的快照 65。
snapper -c home delete 89 90
刪除名為 home 之自定組態的快照 89 和 90。
有時會存在 btrfs 快照,但不是來自 snapper 的含有中繼資料的 XML 檔案。因此,對於 snapper 而言,這些快照不存在。您需要先刪除 btrfs 子磁碟區,然後才能刪除 SNAPSHOT_NUMBER 目錄︰
btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot
rm -rf /.snapshots/SNAPSHOTNUMBER
如果您要刪除快照以釋放硬碟上的空間,請確定先刪除舊快照。快照越舊,它佔用的磁碟空間就越多。
快照也可由每日 cron 工作自動刪除。如需詳細資訊,請參閱第 4.5.1.2 節「清理演算法」。
/var/log、/tmp 及其他目錄中的變更?
對於我們確定要從快照中排除的某些目錄,請參閱從快照中排除的目錄獲取清單及排除原因。為了將某路徑從快照中排除,我們為該路徑建立了子磁碟區。
由於 df 無法正確顯示 Btrfs 檔案系統上的磁碟使用量,因此您需要使用指令 btrfs filesystem df 掛接點。目前,Btrfs 工具無法顯示快照配置的磁碟空間量。
為了釋放包含快照之 Btrfs 分割區上的空間,您需要刪除不需要的快照,而不是檔案。與新快照相比,較舊的快照佔用的空間更多。如需詳細資料,請參閱第 4.1.1.3 節「控制快照歸檔」。
從一個 Service Pack 升級到另一個 Service Pack 會導致快照佔用系統子磁碟區上的大量磁碟空間,這是因為有許多資料進行了變更 (套件更新)。對於不再需要的快照,建議您手動將其刪除。如需詳細資料,請參閱第 4.5.4 節「刪除快照」。
能,請參閱第 4.3 節「透過從快照開機來執行系統復原」獲取詳細資訊。
請造訪 Snapper 首頁,網址為 http://snapper.io/。