如何在 Ubuntu 桌面系統上設定 Btrfs 自動快照

Ubuntu Desktop 26.04 LTS 的安裝指南列出了其標準和進階磁碟設定選項,但並未將 Btrfs 列為安裝程式選項。該指南上次更新時間為 2026 年 5 月 6 日。這意味著 Btrfs Ubuntu Desktop 可能會使用自訂分割區或子磁碟區佈局。在自動建立快照之前,請務必確認實際掛載的分割區或子磁碟區/;Snapper 指令如果假定根子磁碟區為 Btrfs,則可能會失敗或保護錯誤的資料。本指南使用 Snapper 在已驗證的 Btrfs 子磁碟區上設定每小時一次的時間軸快照,然後啟用計劃清理,以避免舊快照無限累積。

Snapper 已包含在 Ubuntu 軟體倉庫中,Ubuntu 26.04 LTS (Resolute) 軟體包中包含用於其時間軸和清理任務的 systemd 單元。以下指令適用於目標快照為 Btrfs 子磁碟區的系統。如果您的 Ubuntu 系統使用的是 ext4、LVM 或 Btrfs 頂層掛載點,而不是您要保護的子卷,請在執行佈局檢查時停止,並先解決佈局問題。

Btrfs快照保護的是什麼?

Btrfs 快照是一個時間點子卷,它最初與來源檔案共用檔案範圍。它可用於在誤編輯或更新後恢復檔案或比較系統狀態。它並非獨立備份:快照保留在同一檔案系統上,因此磁碟故障、檔案系統損壞、被盜或意外刪除整個檔案系統都可能導致即時資料和快照遺失。

快照不會遞歸捕獲巢狀子磁碟區。如果/home存在一個單獨的子卷,則根子卷的快照不會包含該單獨子卷的內容/home。請為每個需要保護的子磁碟區規劃一個 Snapper 配置,或依賴單獨的備份來保存使用者資料。在另一台設備或遠端系統上保留第二個副本,以備災難復原之用。

1. 確認 Ubuntu 系統運作在 Btrfs 檔案系統上

打開終端機並檢查根掛載點:

findmnt -no SOURCE,FSTYPE,OPTIONS /
sudo btrfs subvolume show /
sudo btrfs subvolume list /

第一條命令應報告檔案btrfs系統類型。檢查掛載點的掛載選項subvol=,並使用子卷清單了解其佈局。第二條指令應辨識掛載在指定位置的子卷/。如果檔案系統類型不是 Btrfs,則此 Snapper 操作步驟不適用。如果指令報告該/子卷不是子卷,或顯示它是頂層子卷,請勿盲目建立根 Snapper 配置。 Btrfs 的頂層子磁碟區有特殊限制;請改用設計合理的子磁碟區佈局或對已驗證的獨立子磁碟區進行快照。

分別檢查該/home掛載點是掛載點還是子磁碟區findmnt /home。sudo btrfs subvolume show /home如果它是獨立的,並且您想要對個人文件進行快照,則需要單獨配置。此外,還要考慮其他重要路徑(例如單獨的資料掛載點)是否位於其他檔案系統上。根快照不會自動包含它們。

2. 安裝 Snapper 和 Btrfs 工具

確認目標磁碟區為 Btrfs 子磁碟區後,安裝 Ubuntu 軟體包:

sudo apt update
sudo apt install snapper btrfs-progs

snapper管理快照配置和保留策略;btrfs-progs提供檢查 Btrfs 檔案系統的實用工具。在建立新配置前,請檢查是否存在已存在的配置:

sudo snapper list-configs

如果已存在指向正確根子磁碟區的配置root,請保留該配置並檢查其設置,而不是建立重複配置。如果輸出為空且/已確認是您要保護的子卷,則建立該配置:

sudo snapper -c root create-config /

此create-config指令會為選定的子磁碟區建立 Snapper 配置及其快照目錄。如果命令提示配置已存在或路徑不是子卷,請停止並檢查目前設定;切勿為了強制執行命令而刪除現有配置。

3. 選擇快照計畫和保留策略

Snapper 的時間軸模式可以建立每小時快照,其時間軸清理演算法可以保留選定的每小時、每日、每週、每月和每年快照。對於可用空間有限的桌面,建議從適度的策略開始,並監控儲存空間,而不是保留無限的歷史記錄。此範例請求建立 6 個每小時快照、7 個每日快照、4 個每週快照和 3 個每月快照,但不建立年度快照:

sudo snapper -c root set-config 'TIMELINE_CREATE=yes TIMELINE_CLEANUP=yes TIMELINE_LIMIT_HOURLY=6 TIMELINE_LIMIT_DAILY=7 TIMELINE_LIMIT_WEEKLY=4 TIMELINE_LIMIT_MONTHLY=3 TIMELINE_LIMIT_YEARLY=0'

這些值描述的是保留類別,並非磁碟空間的硬性限制。即使大檔案已更改或刪除,只要快照引用這些舊資料區段,它們仍會被保留。可用空間也取決於其他 Btrfs 子磁碟區和檔案。請定期檢查df -h /,sudo btrfs filesystem usage /如果檔案系統即將滿,請減少保留期限或增加儲存空間。避免同時編輯多個配置:更改後請執行sudo snapper -c root get-config並驗證這些值。

4. 啟用 Snapper 的 systemd 定時器

在 Ubuntu 26.04 LTS 上,Snapper 軟體包檔案清單包含snapper-timeline.timer和snapper-cleanup.timer。啟用這兩個文件,以便 systemd 定期建立時間軸快照並執行清理程式:

sudo systemctl enable --now snapper-timeline.timer snapper-cleanup.timer

檢查它們是否已加載,並查看下次加載時間:

systemctl list-timers snapper-timeline.timer snapper-cleanup.timer
systemctl status snapper-timeline.timer snapper-cleanup.timer

定時器顯示為活動狀態表示 systemd 已載入調度程序;但這本身並不能證明 Snapper 已成功建立快照。下次運行時間軸後,請檢查配置和快照清單:

sudo snapper list-configs
sudo snapper -c root list

如果在計劃運行後沒有出現時間軸快照,請確認是否TIMELINE_CREATE已設置yes,然後使用命令檢查服務日誌journalctl -u snapper-timeline.service -b。在檢查打包單元和日誌之前,請勿建立自訂計時器;重複的計劃可能會建立超出預期的快照。

5. 為 Btrfs 主目錄子磁碟區新增單獨的配置

僅當佈局檢查確認該磁碟區/home本身是 Btrfs 子磁碟區且目標包含使用者檔案時,才執行此操作。首先運行sudo snapper list-configs並確保該名稱home未使用。然後為該子卷建立配置並套用單獨的保留策略:

sudo snapper -c home create-config /home
sudo snapper -c home set-config 'TIMELINE_CREATE=yes TIMELINE_CLEANUP=yes TIMELINE_LIMIT_HOURLY=6 TIMELINE_LIMIT_DAILY=7 TIMELINE_LIMIT_WEEKLY=4 TIMELINE_LIMIT_MONTHLY=3 TIMELINE_LIMIT_YEARLY=0'

相同的 systemd 定時器會處理已啟用時間軸建立和清理功能的 Snapper 配置,因此通常不需要單獨的計時器。請確認其sudo snapper -c home list運作正常,並sudo snapper -c home get-config顯示預期值。名為 `<directory_name>` 的目錄/home不會自動成為單獨的子磁碟區;請在執行 `.` 之前進行驗證create-config。

如何判斷自動化流程是否有效?

  • 配置: sudo snapper list-configs顯示預期名稱和子卷。
  • 策略: sudo snapper -c root get-config已啟用報告時間軸建立和清理功能。
  • 日程表: systemctl list-timers顯示兩個 Snapper 計時器及其下次運行時間。
  • 快照: sudo snapper -c root list顯示計時器運行後帶有日期的條目。
  • 服務運行狀況: journalctl -u snapper-timeline.service -b不存在阻止建立快照的重複性錯誤。

如果您的電腦按排程時間關機,計時器可能會根據其設定稍後運行;但這並不能取代檢查產生的快照。您可以進行一個簡單的手動測試來驗證 Snapper 是否可以建立快照:執行 `Snapper install` sudo snapper -c root create --description 'setup test',然後再次列出快照。此測試的是配置,而不是計時器;只有在您確定選擇了正確的條目後,才能刪除測試快照。

可能出現哪些問題?應該避免哪些問題?

首先,快照會隨著時間的推移佔用共享檔案系統的容量。保留控制會減少舊的歷史記錄,但保留的資料量會隨著文件變更而變化。請監控可用空間並確保清理程式正在運作。其次,根快照可能會遺漏嵌套的子卷,例如/home;成功執行命令並不意味著每個掛載路徑都受到保護。第三,僅靠 Snapper 快照無法保證可以啟動回滾。 Snapper 文件指出,回滾需要正確配置的 Btrfs 系統。 Ubuntu 的掛載佈局、啟動配置、加密方式和獨立檔案系統決定了可復原的範圍。在依賴回滾之前,請使用單獨的備份和還原媒體測試復原計畫。

不要將自動快照視為備份的替代品。將重要文件複製到另一台實體設備或遠端位置,並定期確認可以恢復這些文件。為了獲得最可靠的 Ubuntu 桌面設置,請使用 Snapper 來建立便利的本地還原點,使用單獨的備份工具來建立獨立副本,並使用經過測試的系統級故障復原流程。

官方參考資料

留下評論

如何在 Ubuntu 桌面系統上設定 Btrfs 自動快照

如何在 Ubuntu 桌面系統上設定 Btrfs 自動快照

配置 Snapper 以在 Ubuntu 桌面上建立和清理定時產生的 Btrfs 快照。首先檢查子磁碟區佈局,啟用 systemd 定時器,並安全地驗證保留策略。

安全修復 SUSE Linux Enterprise LVM 精簡配置空間不足的問題

安全修復 SUSE Linux Enterprise LVM 精簡配置空間不足的問題

透過區分資料耗盡和元資料耗盡、擴展儲存、修復元資料和啟用自動擴展,診斷和恢復 SUSE Linux Enterprise 上的完整 LVM 精簡池。

Debian 12 CIS 加固指南:伺服器基線逐步指南

Debian 12 CIS 加固指南:伺服器基線逐步指南

使用安全的伺服器工作流程(包括更新、SSH、防火牆、AppArmor、稽核和驗證),對 Debian 12 Bookworm 進行強化,使其符合目前的 CIS 基準 v2.0.0 標準。

如何在 Gooroom OS 上安裝 Flatpak 和 Snap 應用

如何在 Gooroom OS 上安裝 Flatpak 和 Snap 應用

在 Gooroom OS 上安裝 Flatpak 和 Snap 應用,包括版本檢查、終端命令以及相容性、安全控制、更新和儲存的實際比較。

如何修正 GPG 錯誤:Ubuntu 中無法驗證以下簽名

如何修正 GPG 錯誤:Ubuntu 中無法驗證以下簽名

安全地修復 Ubuntu APT 簽章錯誤。無需停用軟體包驗證,即可識別 NO_​​PUBKEY、EXPKEYSIG、BADSIG、時脈和軟體來源設定問題。

如何在 SLES 15 上設定 DM-Multipath:實用指南

如何在 SLES 15 上設定 DM-Multipath:實用指南

在 SLES 15 上設定 DM-Multipath,實現安全發現、服務設定、最小 multipath.conf 變更、initramfs 更新和路徑健康檢查。

SLES Btrfs Snapper 更新失敗後回滾:安全復原指南

SLES Btrfs Snapper 更新失敗後回滾:安全復原指南

使用 Btrfs 和 Snapper 在更新失敗後恢復 SLES。比較回滾選項,安全地測試快照,恢復系統,並驗證儲存庫。

如何在 Pardus 用戶端部署自訂桌布和策略

如何在 Pardus 用戶端部署自訂桌布和策略

使用 Liderahenk 和 Ahenk 來設定自訂的 Pardus GNOME 桌布,使用 dconf 鎖定選定的設置,並透過經過測試的試點專案推出其他客戶端策略。

Ubuntu 伺服器啟動進入緊急模式:逐步救援指南

Ubuntu 伺服器啟動進入緊急模式:逐步救援指南

診斷 Ubuntu 伺服器進入緊急模式的原因,安全地修復常見的 /etc/fstab 和掛載問題,檢查檔案系統,並驗證正常重新啟動。

修復 Ubuntu 24.04 中 Flatpak 應用不遵循 GTK 主題的問題

修復 Ubuntu 24.04 中 Flatpak 應用不遵循 GTK 主題的問題

排查 Ubuntu 24.04 上忽略 GTK 主題的 Flatpak 應用程式問題。檢查主題擴充、GTK 入口網站、淺色和深色設定以及應用程式工具包限制。