SLES Btrfs Snapper 更新失敗後回滾:安全復原指南
使用 Btrfs 和 Snapper 在更新失敗後恢復 SLES。比較回滾選項,安全地測試快照,恢復系統,並驗證儲存庫。
SLES 更新失敗並不總是意味著需要重新安裝伺服器。在標準的 SUSE Linux Enterprise Server 安裝中,如果根檔案系統使用 Btrfs 並且啟用了 Snapper,通常可以啟動更新前的快照,在不更改當前系統的情況下進行測試,然後將這個已知良好的狀態設定為新的可寫根檔案系統。
重要的決定並非僅僅是“哪個快照是最新的?”,而是“我應該回滾到什麼程度?”。當更新更改了多個軟體包、庫、服務或設定文件,導致系統運作不穩定時,完全回滾 Snapper 系統是合適的。如果只有一個設定檔出錯,通常會恢復該檔案造成的干擾較小。本指南解釋了這兩種選擇,並遵循 SUSE 於 2026 年 10 月發布的 SLES 15 SP7 恢復模型。
| 情況 | 最佳起始選項 | 主要權衡 |
|---|---|---|
| 更新後伺服器將無法正常啟動。 | 從 GRUB 啟動一個唯讀的 Btrfs 快照,進行測試,然後執行snapper rollback | 全面恢復,但僅還原已快照的根內容。 |
| 伺服器啟動了,但多個軟體包或服務同時崩潰。 | 使用相同的啟動和測試回滾工作流程 | 需要重新啟動電腦,但避免了猜測是哪個檔案導致了問題。 |
已知文件中有一個文件/etc已損壞 | 使用snapper status/檢查diff,然後undochange對該文件使用 | 影響較小,但不適合大宗包裹交易。 |
| 服務包遷移失敗 | 使用遷移前的快照,然後驗證儲存庫和產品註冊情況。 | 恢復後儲存庫狀態很重要 |
| 根檔案系統不是 Btrfs,Snapper 已被停用,或支援的根檔案系統佈局已更改。 | 使用備份、復原媒體、軟體包修復或其他復原方案 | 標準 SLES 快照回溯工作流程不適用 |
SUSE 將撤銷變更與系統回溯區分開來。撤銷變更會比較快照並撤銷選定的檔案變更。回滾則會將快照狀態作為新的可寫根檔案系統的基礎。 SUSE 特別建議在執行根檔案系統回溯時先啟動目標快照,因為這樣您有機會在提交之前驗證候選方案。請參閱SLES 15 SP7 管理指南。
在選擇快照之前,請確認以下三點:根檔案系統為 Btrfs,Snapper 具有名為 `<configuration_name>` 的配置root,以及 Btrfs 根檔案系統位於單一裝置上。 SUSE 文件中對預設根子磁碟區佈局的可開機回溯支援說明指出,根 Btrfs 檔案系統必須報告一個裝置。
findmnt /
sudo snapper list-configs
sudo /sbin/btrfs filesystem show /

如果findmnt /報告檔案系統為 XFS 或 Ext4 等,則停止:Btrfs 快照啟動工作流程不適用於該根檔案系統。如果snapper list-configs未找到root任何條目,則可能尚未啟用自動根檔案系統快照。如果btrfs filesystem show /報告存在多個設備,也應停止;SLES 15 SP7 文件未將此佈局列為可啟動根檔案系統回溯所支援的佈局。
列出快照,並查看它們的日期、類型、快照前的關係和描述:
sudo snapper list

在預設的 SLES 配置下,YaST 和 Zypper 活動可以建立pre快照post對。一個pre快照代表事務發生前的檔案系統狀態;其對應的post快照代表事務發生後的狀態。不要因為某個快照早於故障發生時間就選擇它。請確保快照的時間戳記和描述與更新視窗相符。
如果失敗的變更是服務包遷移,SUSE 的SLES 15 SP7 升級指南明確告訴管理員要找到遷移先前建立的快照,並指出相關的快照被標記為重要。
如果目前系統仍可啟動,請在重新啟動前將候選快照與目前狀態進行比較。這可以揭示更新是僅修改了一個配置文件,還是更改了大量系統檔案。
sudo snapper status SNAPSHOT_ID..0
sudo snapper diff SNAPSHOT_ID..0 /etc/some-file.conf

如果已知某個檔案出錯,而更新後的系統其餘部分運作正常,則僅恢復該檔案可以避免撤銷無關的系統變更。 SUSE 對此格式有文件說明:
sudo snapper -c root -v undochange SNAPSHOT_ID..0 /etc/some-file.conf
切勿隨意省略檔案名稱。如果沒有檔案名,undochange可能會導致兩種狀態之間所有已變更的檔案都被還原。 SUSE 警告:不建議使用檔案復原來模擬完整的根目錄回滾。軟體包事務可能會更改許多相互依賴的文件,因此,當更新失敗是系統性問題時,通常更容易透過完整的測試回溯來找出原因。
重啟計算機。在 SLES GRUB 2 選單中,選擇「從唯讀快照啟動開機載入程式」選項,然後選擇與更新前狀態相符的快照。特定的螢幕佈局可能因韌體和啟動配置而異,但 SLES 15 SP7 文件中將該選項描述為「從唯讀快照啟動引導程式」。

只有使用預設 Snapperroot配置建立的快照才能透過此 SLES 機制啟動。如果快照選單缺失,請勿建立啟動項目。請重新檢查 Snapper 是否已啟用、根目錄佈局是否仍為預設支援的結構,以及已安裝的引導程式是否正常運作。
快照啟動後,請確認您確實是從該快照運行的,並且根檔案系統是唯讀的:
findmnt /
mount | grep ' on / '

現在測試更新後失敗的項目:服務啟動、網路配置、身份驗證、應用程式啟動、核心相關行為或其他相關檢查。避免將只讀快照視為正常的生產啟動。某些操作會失敗,只是因為無法寫入根檔案系統的快照部分。
如果快照不正確,請重新啟動系統並嘗試其他快照。在執行回溯命令之前,您尚未將該快照設定為新的可寫入系統根目錄。
當啟動的快照運作正常時,將其設為永久快照:
sudo snapper rollback
您可以新增描述,以便日後更容易識別產生的快照:
sudo snapper rollback -d "Rollback after failed update"

根據 SLES 管理文檔,Snapper 會建立回滾前狀態的快照,並建立一個新的可寫入快照作為預設根目錄。這是一個重要的安全特性:回滾操作不會直接覆蓋舊的根目錄。
指令執行完畢後重開機:
sudo reboot
下次啟動時,選擇正常的預設 SLES 條目,而不是再次啟動舊的唯讀快照。
正常啟動後,檢查根掛載點和快照清單:
findmnt /
sudo snapper list

重複執行之前失敗的功能檢查。如果應用程式仍然失敗,請考慮該應用程式的某些部分是否位於根快照未包含的目錄中。
對於普通的軟體包更新,在嘗試再次更新之前,請刷新軟體倉庫並檢查軟體包依賴關係。對於服務包回滾,軟體倉庫和產品註冊檢查尤其重要,因為不匹配的軟體倉庫集會立即導致系統處於不一致的狀態。
sudo zypper ref -fs
sudo zypper lr -u
sudo zypper verify

對於服務包恢復,請按照官方SLES 升級指南中的檢查步驟進行操作,該指南明確要求在回滾後檢查儲存庫配置和產品註冊。
這是在生產伺服器上使用回滾功能之前必須了解的最重要限制。預設的 SLES 根快照會排除幾個子卷,以避免意外還原易失性資料以及使用者或應用程式資料。特定於產品的排除清單可能包括/home` /opt/ etc/snapshot`、` / etc /snapshot`、`/etc/snapshot`、` / etc/snapshot`、`/etc /usr/local/ snapshot` 以及特定於架構的引導程式路徑。有關當前清單及其原理,請參閱 SUSE 的Snapper 基本概念文件。/srv/tmp/var/run
這種設計雖然能保護數據,但也帶來了一些弊端:系統程式碼可能會回滾,而排除在外的子卷中的數據則會保持在新狀態。 SUSE 指出了幾個可能出現的後果,包括第三方軟體的版本/opt不符、權限變更,以及應用程式無法識別快照建立後寫入的資料格式。
這一點對於資料庫和伺服器應用程式尤其重要。如果更新包含了模式遷移或變更了應用程式數據,則根/var目錄/srv回滾可能無法撤銷這些資料變更。在認為僅憑系統快照就足夠之前,請務必檢查應用程式本身的降級或復原過程。
undochange整個軟體包事務。它適用於選定檔案;SUSE 建議使用啟動回滾方法進行完整的 root 權限恢復。/var或/home將沿根目錄向後移動。預設子卷排除項是故意設定的。SLES 也可以安裝為事務伺服器角色。這是一種不同的運行模式:更新應用於快照並在重新啟動時啟動。在這些系統中,SUSE 提供了transactional-update rollback將快照設定為預設根目錄的功能。切勿在未先確定係統角色的情況下,將事務伺服器復原方案混入傳統的讀寫 SLES 安裝中。官方行為在SLES 15 SP7 事務更新文件中有詳細描述。
/系統為 Btrfs,rootSnapper 配置存在,且根 Btrfs 檔案系統位於同一裝置上。snapper status請使用此功能。snapper diffundochange僅對明顯隔離的檔案進行選擇性操作。snapper rollback僅在候選程序表現正常後運行。核心的權衡在於精確性和一致性。選擇性檔案復原改動較小,但需要您確切地知道哪裡出了問題。經過測試的系統回滾改動較大,但它可以恢復一個連貫的快照根狀態,更適合影響多個元件的失敗更新。在 SLES 系統中,最安全的工作流程是使用唯讀快照啟動作為決策點,而不是在驗證候選方案之前就使回溯操作不可逆。
使用 Btrfs 和 Snapper 在更新失敗後恢復 SLES。比較回滾選項,安全地測試快照,恢復系統,並驗證儲存庫。
使用 Liderahenk 和 Ahenk 來設定自訂的 Pardus GNOME 桌布,使用 dconf 鎖定選定的設置,並透過經過測試的試點專案推出其他客戶端策略。
診斷 Ubuntu 伺服器進入緊急模式的原因,安全地修復常見的 /etc/fstab 和掛載問題,檢查檔案系統,並驗證正常重新啟動。
排查 Ubuntu 24.04 上忽略 GTK 主題的 Flatpak 應用程式問題。檢查主題擴充、GTK 入口網站、淺色和深色設定以及應用程式工具包限制。
在 Pardus 上設定 LIDER AHENK,並採用以品質為中心的設定:驗證先決條件、部署 Lider、註冊 Ahenk 用戶端並驗證管理。
使用 Pardus NVIDIA 驅動程式安裝程式在 Pardus 23 上啟用 NVIDIA 驅動程式。檢查 GPU 相容性、安全重新啟動、驗證驅動程式並解決常見問題。
使用可重複的基準測試方法,比較 Ubuntu Server 24.04 Minimal 和 Standard 安裝的磁碟使用情況、記憶體、啟動時間、服務和實際工作負載效能。
安全地解決 SLES 中的 Zypper 鎖定錯誤。識別進程,選擇等待或停止該進程,並區分事務鎖和包鎖。
使用 RustDesk 在 Pardus Linux 上設定安全的遠端桌面存取。安裝 Debian 軟體包,連接以獲得一次性支持,並安全地配置無人值守存取。
公平地比較 Pardus XFCE 和 GNOME 的記憶體使用情況。看看官方 25.2 版本的信息,了解如何測量可用內存,以及哪個版本更適合您的電腦。