套用至 SUSE Linux Enterprise Desktop 12

4 使用 Snapper 進行系統復原和快照管理

在 Linux 上建立檔案系統快照以執行復原的功能是過去使用者常常要求的一項功能。現在,Snapper 與 Btrfs 檔案系統或簡易佈建的 LVM 磁碟區合用,填補了這個空白。

Btrfs 是一個適用於 Linux 的全新寫時複製檔案系統,它支援子磁碟區 (每個實體分割區中的一或多個可獨立掛接的檔案系統) 的檔案系統快照 (子磁碟區於特定時間點之狀態的副本)。快照在使用 XFS、Ext4 或 Ext3 格式化之簡易佈建的 LVM 磁碟區上同樣受支援。Snapper 可讓您建立和管理這些快照。它包含一個指令行和一個 YaST 介面。自 SUSE Linux Enterprise Server 12 開始,還可以從 Btrfs 快照進行開機。如需詳細資訊,請參閱第 4.3 節「透過從快照開機來執行系統復原」

您可以使用 Snapper 執行以下任務︰

4.1 預設設定

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

記錄檔案位置。從快照中排除該目錄是為了在復原損毀系統之後能夠對記錄檔案進行分析。

4.1.1 自定設定

SUSE Linux Enterprise Desktop 隨附合理的預設設定,該設定適合大多數使用案例。不過,您可以根據自己的需求對建立自動快照以及快照保留的方方面面進行設定。

4.1.1.1 停用/啟用快照

三種快照類型 (時間軸、安裝、管理) 均可獨立啟用或停用。

停用/啟用時間軸快照

啟用.  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

預設系統會啟用管理快照。

4.1.1.2 控制安裝快照

使用 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>

1

match 屬性定義模式是 Unix 外圍程序樣式的萬用字元 (w) 還是 Python正規表示式 (re)。

2

如果符合指定模式並且相應的套件標示為重要 (如核心套件),則該快照也會標示為重要。

3

用於比對套件名稱的模式。根據 match 屬性的設定,特殊字元也可能會被解譯為外圍程序萬用字元或正規表示式。此模式符合所有以 kernel- 開頭的套件名稱。

4

此行無條件符合所有套件。

使用此組態時,只要安裝套件即會建立快照對 (第 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.1.1.3 控制快照歸檔

快照會佔用磁碟空間。為了防止磁碟用盡而導致系統中斷,會自動刪除舊快照。依預設,系統會保留以下快照︰

  • 最近十天、十個月、十年的第一個快照

  • 最近十個標示為重要的安裝快照對

  • 最近十個安裝/管理快照

如需如何變更這些值的指示,請參閱第 4.4.1 節「管理現有的組態」

4.1.1.4 對簡易佈建的 LVM 磁碟區使用 Snapper

除了針對 Btrfs 檔案系統建立快照之外,Snapper 還支援針對使用 XFS、Ext4 或 Ext3 格式化之簡易佈建的 LVM 磁碟區建立快照 (但支援對一般 LVM 磁碟區建立快照)。如需 LVM 磁碟區的詳細資訊以及設定指示,請參閱Section “LVM Configuration”, Chapter 12, Advanced Disk Setup, Deployment Guide

若要對簡易佈建的 LVM 磁碟區使用 Snapper,您需要為它建立一個 Snapper 組態。在 LVM 上,需要使用 --fstype=lvm(檔案系統) 指定檔案系統。檔案系統 的有效值有 ext3etx4xfs。範例:

snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm

您可以依第 4.4.1 節「管理現有的組態」 中所述根據需求調整此組態。

4.2 使用 Snapper 復原變更

SUSE Linux Enterprise Desktop 上的 Snapper 已預先設定為充當復原 zypper 和 YaST 所做變更的工具。要充當復原工具,Snapper 設定為在每次執行 zypper 和 YaST 的前後建立一對快照。此外,Snapper 還可讓您還原遭意外刪除或修改的系統檔案。出於此目的需要啟用根分割區的時間軸快照 — 如需詳細資訊,請參閱第 4.1.1.1 節「停用/啟用快照」

預設會為根分割區及其子磁碟區設定上述的自動快照。為了讓這些快照可供其他分割區 (例如 /home) 使用,您可以建立自定組態。

重要
重要:復原變更與復原

使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。

復原變更

當如下文所述復原變更時,系統會比較兩個快照,並復原這兩個快照之間的變更。使用此方法還允許明確選取要還原的檔案。

復原

當如第 4.3 節「透過從快照開機來執行系統復原」中所述執行復原時,系統會重設回建立快照當時的狀態。

復原變更時,還可以將快照與目前系統進行比較。根據此類比較還原全部檔案時,其效果等同於執行復原。但是,還是建議使用第 4.3 節「透過從快照開機來執行系統復原」中所述的方法復原,因為它的速度更快並且可讓您在執行復原之前複查系統。

警告
警告:資料一致性

在建立快照時,沒有任何一種機制可確保資料的一致性。如果在建立快照的同時寫入檔案 (如資料庫),則將導致檔案損毀或部分寫入。還原此類檔案將會導致問題。此外,有些系統檔案 (例如 /etc/mtab) 是絕對不能還原的。因此,強烈建議您始終仔細檢閱已變更檔案及其差異的清單。請只還原真正屬於您要執行回復的檔案。

4.2.1 復原 YaST 和 Zypper 變更

如果您在安裝期間使用 Btrfs 設定根分割區,系統將會自動安裝 Snapper (已預先設定為用於復原 YaST 或 Zypper 所做的變更)。每當您啟動 YaST 模組或 Zypper 交易時,都會建立兩個快照:擷取啟動模組之前檔案系統狀態的前快照,以及完成模組之後的後快照

您可以使用 YaST Snapper 模組或 snapper 指令行工具,透過從前快照還原檔案來復原 YaST/Zypper 所做的變更。比較兩個快照時,這些工具還可讓您查看哪些檔案已經過變更。此外,您還可以顯示某檔案的兩個版本之間的差異 (diff)。

過程 4.1 使用 YaST Snapper 模組復原變更
  1. 從 YaST 的其他區段或透過輸入 yast2 snapper 啟動Snapper模組。

  2. 請確定目前組態設為。除非您手動新增了自己的 Snapper 組態,否則應始終如此設定。

  3. 從清單中選擇一對前快照和後快照。YaST 與 Zypper 快照對都屬於前與後類型。在描述欄中,YaST 快照標示為 zypp(y2base),Zypper 快照標示為 zypp(zypper)

  4. 按一下顯示變更以開啟兩個快照之間不同的檔案清單。

  5. 檢閱檔案清單。若要顯示檔案的前版本與後版本之間的差異,請從清單中選取它。

  6. 要還原一個或多個檔案,請勾選相應的核取方塊來選取相關的檔案或目錄。按一下還原選定項目,然後按一下確認該動作。

    要還原單個檔案,請按一下其名稱以啟動差異比對檢視。按一下從第一個還原,然後按一下確認您的選擇。

過程 4.2 使用 snapper 指令復原變更
  1. 執行 snapper list -t pre-post 取得 YaST 和 Zypper 快照的清單。在描述欄中,YaST 快照標示為 yast 模組名稱;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) 
  2. 使用下列指令取得快照對的已變更檔案清單:snapper status ..。含有內容變更的檔案以 c 標示,新增的檔案以 + 標示,刪除的檔案以 - 標示。

    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
  3. 若要顯示特定檔案的差異,請執行 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
    [...]
  4. 若要還原一或多個檔案,請執行 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使用者和群組管理工具來移除使用者。

4.2.2 使用 Snapper 還原檔案

除了安裝與管理快照之外,Snapper 還會建立時間軸快照。您可以使用這些備份快照來還原不小心刪除的檔案或還原舊版檔案。利用 Snapper 的差異比對功能,您還可以瞭解在特定時間點執行了哪些修改。

還原檔案功能對於預設不會建立快照的子磁碟區或分割區上的資料尤其有用。例如,要從主目錄還原檔案,可以為自動建立時間軸快照的 /home 建立單獨的 Snapper 組態。如需指示,請參閱第 4.4 節「建立和修改 Snapper 組態」

警告
警告:還原檔案與復原

從根檔案系統 (由 Snapper 的根組態定義) 建立的快照可用於執行系統復原。建議您使用從快照開機然後執行復原的方式執行此復原。如需詳細資料,請參閱第 4.3 節「透過從快照開機來執行系統復原」

也可使用從根檔案系統快照還原所有檔案的方式執行復原 (如下文所述)。但我們不建議採用這種方法。您可以還原單個檔案 (如 /etc 目錄中的組態檔案),但不能從快照還原整份檔案清單中的檔案。

此限制僅影響從根檔案系統建立的快照!

過程 4.3 使用 YaST Snapper 模組還原檔案
  1. 從 YaST 的其他區段或透過輸入 yast2 snapper 啟動Snapper模組。

  2. 選擇要從中選擇快照的目前組態

  3. 選取要從中還原檔案的時間軸快照,並選擇顯示變更。時間軸快照屬於單一類型,以時間軸描述。

  4. 按一下檔案名稱,從文字方塊中選取一個檔案。隨即顯示快照版本與目前系統之間的差異。勾選該核取方塊以選取要還原的檔案。對所有您要還原的檔案執行此操作。

  5. 按一下還原選定項目,然後按一下確認該動作。

過程 4.4 使用 snapper 指令還原檔案
  1. 執行以下指令獲取特定組態之時間軸快照的清單︰

    snapper -c CONFIG list -t single | grep timeline

    CONFIG 需要以現有的 Snapper 組態取代。使用 snapper list-configs 顯示清單。

  2. 執行以下指令獲取指定快照之已變更檔案的清單︰

    snapper -c CONFIG status SNAPSHOT_ID>..0

    以您要從中還原檔案之快照的 ID 取代 SNAPSHOT_ID

  3. (選擇性)透過執行以下指令,列出目前檔案版本與快照中之檔案的差異

    snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME

    如果您未指定 <檔案名稱>,則會顯示所有檔案的差異。

  4. 要還原一或多個檔案,請執行

    snapper -c CONFIG -v undochange
          SNAPSHOT_ID..0 FILENAME1 FILENAME2

    如果未指定檔案名稱,將會還原所有已變更的檔案。

4.3 透過從快照開機來執行系統復原

SUSE Linux Enterprise Desktop 上包含的 GRUB 2 版本能夠從 Btrfs 快照開機。除 Snapper 的復原功能外,它還可復原設定有誤的系統。Snapper 建立的所有快照都可用於開機,並且可從開機功能表中選取。

重要
重要:可開機的快照

只有根檔案系統 (由 Snapper 的根組態定義) 中的快照屬於可開機快照。

將快照開機時,該快照中包含之檔案系統的部分會以唯讀模式掛接,而從快照中排除的所有其他檔案系統以及該檔案系統的排除部分會以讀寫模式掛接並且可修改。

重要
重要:復原變更與復原

使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。

復原變更

第 4.2 節「使用 Snapper 復原變更」中所述復原變更時,系統會比較兩個快照並回復這兩個快照之間的變更。使用此方法還可以將選取的檔案明確排除在還原之外。

復原

如下文所述執行復原時,系統會重設回建立快照當時的狀態。

若要從可開機快照執行復原,必須符合以下要求。執行預設安裝時,系統會進行相應設定。

從可開機快照執行復原的要求
  • 根檔案系統必須是 Btrfs。不支援從 LVM 磁碟區快照開機。

  • 根檔案系統必須位於單一裝置、單一分割區以及單一子磁碟區上。如 /srv 之類從快照中排除的目錄 (如需完整的清單,請參閱從快照中排除的目錄) 可以位於單獨的分割區上。

  • 系統必須能透過已安裝的開機載入程式開機。

要從可開機的快照執行復原,請按如下步驟執行︰

  1. 將系統開機。在開機功能表中,選擇可開機快照並選取您要開機的快照。系統會按日期列出快照清單,最近的快照最先列出。

  2. 登入系統。仔細檢查是否一切都如預期般運作。請注意,您無法對快照中包含的任何目錄執行寫入。但無論您接下來執行什麼操作,您寫入到其他目錄的資料都會遺失。

  3. 根據您是否要執行復原操作,選擇下一步動作︰

    1. 如果系統處於您不想執行復原的狀態,請重新開機以開機到目前系統狀態,然後選擇其他快照或啟動救援系統。

    2. 如果您要執行復原,請執行

      sudo snapper rollback

      並在之後重新開機。在開機螢幕上,選擇預設開機項目以重新開機到已恢復的系統。

4.3.1 限制

無法進行完整系統復原,即將整個系統還原到與建立快照當時完全相同的狀態。

4.3.1.1 從快照中排除的目錄

根檔案系統快照並不包含所有目錄。如需詳細資料和原因,請參閱從快照中排除的目錄。因此,這些目錄中的資料不會還原,也就形成以下限制。

執行復原之後,附加產品和協力廠商軟體可能回無法使用。

如果從快照中排除的子磁碟區 (如 /opt) 中的應用程式還有其他部分資料安裝在該快照中包含的子磁碟區中,則應用程式及附加產品的安裝資料在復原後可能無法使用。重新安裝應用程式或附加產品可解決此問題。

檔案存取問題

如果應用程式在快照以及目前系統之間變更了檔案許可權和/或擁有權,則復原後該應用程式可能無法存取這些檔案。請在復原之後重設受影響檔案的許可權和/或擁有權。

不相容的資料格式

如果服務或應用程式在快照和目前系統之間建立了新的資料格式,則復原之後該應用程式可能無法讀取受影響的資料檔案。

混合代碼和資料的子磁碟區

/srv 等子磁碟區可能同時包含代碼和資料。復原可能導致代碼不起作用。例如,降級 PHP 版本可能導致該 Web 伺服器之 PHP 程序檔損毀。

使用者資料

如果復原從系統移除了使用者,但這些使用者所擁有的資料存在於快照排除的目錄中,則這些資料不會予以移除。如果使用相同使用者 ID 建立使用者,則此使用者將繼承這些檔案。使用 find 等工具尋找並移除孤立的檔案。

4.3.1.2 不復原開機載入程式資料

無法復原開機載入程式,因為開機載入程式的所有階段必須組合在一起共同作用。而執行復原則無法保證這一要求。

4.4 建立和修改 Snapper 組態

每個分割區或 Btrfs 子磁碟區都有一個專用的組態檔案用於定義 Snapper 的行為方式。這些組態檔案位於 /etc/snapper/configs/ 下。隨 Snapper 一起安裝之 / 目錄的預設組態名為 root。它會建立並管理 YaST 和 Zypper 快照,以及 / 的每小時備份快照。

您可以為其他格式為 Btrfs 的分割區或 Btrfs 分割區上的現有子磁碟區建立您自己的組態。在下面的範例中,我們將設定 Snapper 組態以用於備份掛接於 /srv/www 且採用 Btrfs 格式之獨立分割區上的 Web 伺服器資料。

建立組態後,您可以使用 snapper 自身或 YaST Snapper 模組從這些快照中還原檔案。在 YaST 中,您需要選取目前組態,同時還需要使用全域參數 -c 指定 snapper 的組態 (例如 snapper -c myconfig list)。

若要建立新的 Snapper 組態,請執行 snapper create-config

snapper -c www-data1 create-config /srv/www2

1

組態檔案的名稱。

2

要建立快照之分割區或 Btrfs 子磁碟區的掛接點。

此指令將會使用 /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

4.4.1 管理現有的組態

snapper 提供多個用於管理現有組態的子指令。您可以列出、顯示、刪除及修改它們︰

列出組態

使用指令 snapper list-configs 可獲取所有現有組態︰

root # snapper list-configs
Config | Subvolume
-------+----------
root   | /        
usr    | /usr     
local  | /local
刪除組態

使用子指令 snapper -c CONFIG delete-config 可刪除組態。Config 需要使用 snapper list-configs 所顯示的組態名稱取代。

顯示組態

使用子指令 snapper -c CONFIG get-config 可顯示指定的組態。Config 需要使用 snapper list-configs 所顯示的組態名稱取代。如需有關組態選項的詳細資訊,請參閱第 4.4.1.1 節「組態資料」

使用子指令 snapper -c CONFIG set-config OPTION=VALUE 可修改指定組態中的選項。Config 需要使用 snapper list-configs 所顯示的組態名稱取代。OPTIONVALUE 的可能的值列於第 4.4.1.1 節「組態資料」中。

4.4.1.1 組態資料

每個組態都包含可以從指令行修改的選項清單。下列清單提供每個選項的詳細資料︰

ALLOW_GROUPSALLOW_USERS

授予一般使用者快照的使用權限。如需相關資訊,請參閱第 4.4.1.2 節「以一般使用者身分使用 Snapper」

預設值為 "".

BACKGROUND_COMPARISON

定義建立前後快照後是否應在背景中對它們進行比較。

預設值為 "yes"

EMPTY_PRE_POST_CLEANUP

如果設定為 yes,將會刪除前後快照相同的快照對。

預設值為 "no"

EMPTY_PRE_POST_MIN_AGE

定義前後快照相同的快照對在自動刪除之前必須保留的最短期限 (以秒為單位)。

預設值為 "1800"

FSTYPE

分割區的檔案系統類型。請勿進行變更。

預設值為 "btrfs"

NUMBER_CLEANUP

定義當快照總數超出 NUMBER_LIMIT 指定的數目以及 NUMBER_MIN_AGE 指定的期限時,是否自動刪除舊的安裝和管理快照。有效值:yesno

預設值為 "no"

注意
注意:限制和期限

NUMBER_LIMITNUMBER_LIMIT_IMPORTANTNUMBER_MIN_AGE 始終會予以評估。只有在滿足全部條件時,才會刪除快照。如果您希望總是保留特定數目的快照而不考慮其期限,請將 NUMBER_MIN_AGE 設為 0。不過,如果您不想保留超過特定期限的快照,請將 NUMBER_LIMITNUMBER_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 指定的期限時,是否自動刪除舊快照。有效值:yesno

預設值為 "no"

TIMELINE_CREATE

如果設定為 yes,則會每小時建立一個快照。這是目前可自動建立快照的唯一方式,因此強烈建議將此選項設定為 yes。有效值:yesno

預設值為 "no"

TIMELINE_LIMIT_DAILYTIMELINE_LIMIT_HOURLYTIMELINE_LIMIT_MONTHLYTIMELINE_LIMIT_YEARLY

要以小時、天、月和年保留的快照數目。

每個項目的預設值都為 "10"

範例 4.1 時間軸組態範例
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_AGETIMELINE_LIMIT_*。在此範例中,快照在可供刪除之前的最短期限設為 30 分鐘 (1800 秒)。因為我們建立了每小時快照,所以這可確保僅保留最新的快照。如果將 TIMELINE_LIMIT_DAILY 設為非零值,這表示同時會保留當天的第一個快照。

要保留的快照
  • 每小時:已建立的最後十個快照。

  • 每日:保留最近十天內建立的第一個每日快照。

  • 每月:保留最近十個月內當月最後一天建立的第一個快照。

  • 每年:保留最近十年內當年最後一天建立的第一個快照。

TIMELINE_MIN_AGE

定義快照在可供自動刪除之前的最短保留期限 (秒)。

預設值為 "1800"

4.4.1.2 以一般使用者身分使用 Snapper

依預設,Snapper 只能由 root 使用者使用。但是,在下列情況中,某些群組或使用者需要能夠建立快照或透過回復至快照來復原變更:

  • 想要建立 /srv/www 快照的網站管理員

  • 想要建立其主目錄快照的使用者

為了以上這些目的,您可以建立用於授予使用者或/和群組權限的 Snapper 組態。相應的 .snapshots 目錄必須可由指定的使用者讀取和存取。實現這一目的最簡單的方法是將 SYNC_ACL 選項設定為 yes

過程 4.5 讓一般使用者可以使用 Snapper

請注意,此程序中的所有步驟都必須由 root 使用者執行。

  1. 若不存在,請為使用者應該能夠在其上使用 Snapper 的分割區或子磁碟區建立 Snapper 組態。如需指示,請參閱第 4.4 節「建立和修改 Snapper 組態」。範例:

    snapper --config web_data create /srv/www
  2. 組態檔案將在 /etc/snapper/configs/CONFIG 下建立,其中 CONFIG 是您在上一步中使用 -c/--config 指定的值 (如 /etc/snapper/configs/web_data)。根據您的需求調整該值;如需詳細資料,請參閱第 4.4.1 節「管理現有的組態」

  3. 設定 ALLOW_USERS 和/或 ALLOW_GROUPS 的值,以分別向使用者和/或群組授予權限。多個項目需要用 Space 加以分隔。例如,若要向使用者 www_admin 授予權限,請執行:

    snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
  4. 現在,指定的使用者和/或群組便可以使用給定的 Snapper 組態。您可以使用 list 指令進行測試,例如:

    www_admin:~ > snapper -c web_data list

4.5 手動建立和管理快照

Snapper 並不限於依照組態自動建立和管理快照;您還可以使用指令行工具或 YaST 模組手動建立快照對 (前與後) 或單一快照。

所有 Snapper 操作都會對現有組態進行 (如需詳細資料,請參閱第 4.4 節「建立和修改 Snapper 組態」)。您只能為存在組態的分割區或磁碟區建立快照。預設會使用系統組態 ()。如果您要為您自己的組態建立或管理快照,則必須明確選擇它。使用 YaST 中的目前組態下拉式方塊,或在指令行上指定 -c 選項 (snapper -c MYCONFIG COMMAND)。

4.5.1 快照中繼資料

每個快照都包含快照本身和一些中繼資料。建立快照時,您還需要指定中繼資料。修改快照即表示變更其中繼資料 — 您無法修改其內容。下列中繼資料適用於每個快照:

  • 類型:快照類型,請參閱第 4.5.1.1 節「快照類型」 以取得詳細資料。此資料無法變更。

  • 編號:快照的唯一編號。此資料無法變更。

  • 前快照編號:指定相應前快照的編號。僅適用於類型為後的快照。此資料無法變更。

  • 描述:快照的描述。

  • 使用者資料:延伸描述,您可在其中以逗號分隔之「鍵=值」清單的形式指定自定資料:reason=testing, project=foo。此欄位還用於將快照標示為重要 (important=yes) 並列出建立該快照的使用者 (user=tux)。

  • 清理演算法:快照的清理演算法,請參閱第 4.5.1.2 節「清理演算法」 以取得詳細資料。

4.5.1.1 快照類型

Snapper 知道三種不同類型的快照:前、後與單一。實際上,它們並無差異,但是 Snapper 會以不同的方式處理它們。

修改檔案系統的快照。每個快照都對應一個快照。例如,用於自動建立 YaST/Zypper 快照。

修改檔案系統的快照。每個快照都對應一個快照。例如,用於自動建立 YaST/Zypper 快照。

單一

獨立快照。例如,用於自動按小時建立快照。這是建立快照時的預設類型。

4.5.1.2 清理演算法

Snapper 提供了三種用於清理舊快照的演算法。每日 cron 工作中會執行這些演算法。清理頻率本身是在分割區或子磁碟區的 Snapper 組態中加以定義 (如需詳細資料,請參閱第 4.4.1 節「管理現有的組態」)。

數目

當達到特定的快照計數時刪除舊快照。

時間軸

刪除經過特定期限的舊快照,但會保留大量每小時、每日、每月和每年快照。

空-前-後

刪除無差異的前/後快照對。

4.5.2 建立快照

可透過執行 snapper create 或在 YaST 模組 Snapper 中按一下建立建立快照。下列範例說明如何從指令行建立快照。透過 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 時,此選項才可用。

4.5.3 修改快照中繼資料

Snapper 可讓您修改快照的描述、清理演算法和使用者資料,所有其他中繼資料則無法變更。下列範例說明如何從指令行修改快照。透過 YaST 介面可便於採用這兩種建立方法。

若要透過指令行修改快照,您需要知道其編號。請使用 snapper list 來顯示所有快照及其編號。

YaST Snapper 模組已列出所有快照。從清單中選擇一個快照,然後按一下修改

snapper modify --cleanup-algorithm "時間軸" 10

修改預設 () 組態之快照 10 的中繼資料。清理演算法設為時間軸

snapper --config home modify --description "每日備份" -cleanup-algorithm "時間軸"120

修改名為 home 的自定組態之快照 120 的中繼資料。將會設定新的描述並取消設定清理演算法。

4.5.4 刪除快照

若要使用 YaST Snapper 模組刪除快照,請從清單中選擇快照,然後按一下刪除

若要使用指令行工具刪除快照,您需要知道其編號。請透過執行 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 節「清理演算法」

4.6 常見問題解答

為何 Snapper 從不顯示 /var/log/tmp 及其他目錄中的變更?

對於我們確定要從快照中排除的某些目錄,請參閱從快照中排除的目錄獲取清單及排除原因。為了將某路徑從快照中排除,我們為該路徑建立了子磁碟區。

快照使用了多少磁碟空間?如何釋放磁碟空間?

由於 df 無法正確顯示 Btrfs 檔案系統上的磁碟使用量,因此您需要使用指令 btrfs filesystem df 掛接點。目前,Btrfs 工具無法顯示快照配置的磁碟空間量。

為了釋放包含快照之 Btrfs 分割區上的空間,您需要刪除不需要的快照,而不是檔案。與新快照相比,較舊的快照佔用的空間更多。如需詳細資料,請參閱第 4.1.1.3 節「控制快照歸檔」

從一個 Service Pack 升級到另一個 Service Pack 會導致快照佔用系統子磁碟區上的大量磁碟空間,這是因為有許多資料進行了變更 (套件更新)。對於不再需要的快照,建議您手動將其刪除。如需詳細資料,請參閱第 4.5.4 節「刪除快照」

能否從開機載入程式將快照開機?

能,請參閱第 4.3 節「透過從快照開機來執行系統復原」獲取詳細資訊。

何處可以取得有關 Snapper 的詳細資訊?

請造訪 Snapper 首頁,網址為 http://snapper.io/

列印此頁面