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

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 管理指南。

步驟 1:確認此伺服器支援標準的 Snapper 回滾路徑

在選擇快照之前,請確認以下三點:根檔案系統為 Btrfs,Snapper 具有名為 `<configuration_name>` 的配置root,以及 Btrfs 根檔案系統位於單一裝置上。 SUSE 文件中對預設根子磁碟區佈局的可開機回溯支援說明指出,根 Btrfs 檔案系統必須報告一個裝置。

findmnt /
sudo snapper list-configs
sudo /sbin/btrfs filesystem show /
SLES 終端機正在檢查 Btrfs 根檔案系統、Snapper 根設定和單一裝置 Btrfs 佈局。
首先檢查根檔案系統和 Snapper 配置。受支援的 SLES 預設佈局使用 Btrfs 作為根檔案系統 (/),Snapper 配置名為 root,並且使用單一設備根檔案系統。

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

步驟 2:找到更新失敗前立即產生的快照

列出快照,並查看它們的日期、類型、快照前的關係和描述:

sudo snapper list
SLES Snapper 快照列表,顯示 zypper 更新前後的快照
Snapper 清單可以顯示圍繞 Zypper 交易建立的前後快照對。如果故障是由更新本身引起的,那麼更新前的快照通常是首選。

在預設的 SLES 配置下,YaST 和 Zypper 活動可以建立pre快照post對。一個pre快照代表事務發生前的檔案系統狀態;其對應的post快照代表事務發生後的狀態。不要因為某個快照早於故障發生時間就選擇它。請確保快照的時間戳記和描述與更新視窗相符。

如果失敗的變更是服務包遷移,SUSE 的SLES 15 SP7 升級指南明確告訴管理員要找到遷移先前建立的快照,並指出相關的快照被標記為重要。

步驟 3:檢查候選快照實際上會改變什麼。

如果目前系統仍可啟動,請在重新啟動前將候選快照與目前狀態進行比較。這可以揭示更新是僅修改了一個配置文件,還是更改了大量系統檔案。

sudo snapper status SNAPSHOT_ID..0
sudo snapper diff SNAPSHOT_ID..0 /etc/some-file.conf
SLES 終端機顯示更新前快照的 snapper 狀態和 snapper diff 輸出
使用 Snapper 的狀態和差異功能來了解更新範圍。如果涉及大量軟體包和配置更改,則建議完全回滾;如果僅涉及一個獨立文件,則可能只需選擇性恢復。

選擇性恢復何時才是更好的權衡之道

如果已知某個檔案出錯,而更新後的系統其餘部分運作正常,則僅恢復該檔案可以避免撤銷無關的系統變更。 SUSE 對此格式有文件說明:

sudo snapper -c root -v undochange SNAPSHOT_ID..0 /etc/some-file.conf

切勿隨意省略檔案名稱。如果沒有檔案名,undochange可能會導致兩種狀態之間所有已變更的檔案都被還原。 SUSE 警告:不建議使用檔案復原來模擬完整的根目錄回滾。軟體包事務可能會更改許多相互依賴的文件,因此,當更新失敗是系統性問題時,通常更容易透過完整的測試回溯來找出原因。

步驟 4:從 GRUB 啟動候選快照

重啟計算機。在 SLES GRUB 2 選單中,選擇「從唯讀快照啟動開機載入程式」選項,然後選擇與更新前狀態相符的快照。特定的螢幕佈局可能因韌體和啟動配置而異,但 SLES 15 SP7 文件中將該選項描述為「從唯讀快照啟動引導程式」。

SLES GRUB 選單展示了唯讀快照啟動選項和選定的更新前快照。
首先啟動更新前的快照,而不是立即執行回溯操作。這樣可以在更改根子磁碟區之前建立一個低風險的驗證步驟。

只有使用預設 Snapperroot配置建立的快照才能透過此 SLES 機制啟動。如果快照選單缺失,請勿建立啟動項目。請重新檢查 Snapper 是否已啟用、根目錄佈局是否仍為預設支援的結構,以及已安裝的引導程式是否正常運作。

步驟 5:在根目錄為唯讀的情況下測試快照

快照啟動後,請確認您確實是從該快照運行的,並且根檔案系統是唯讀的:

findmnt /
mount | grep ' on / '
SLES 終端機顯示一個以唯讀方式掛載為根檔案系統的 Btrfs 快照。
快照啟動時,其根目錄快照內容為唯讀狀態。在執行回溯操作之前,請使用此狀態測試之前的系統狀態是否能解決更新失敗的問題。

現在測試更新後失敗的項目:服務啟動、網路配置、身份驗證、應用程式啟動、核心相關行為或其他相關檢查。避免將只讀快照視為正常的生產啟動。某些操作會失敗,只是因為無法寫入根檔案系統的快照部分。

如果快照不正確,請重新啟動系統並嘗試其他快照。在執行回溯命令之前,您尚未將該快照設定為新的可寫入系統根目錄。

步驟 6:僅在快照通過檢查後才提交回滾操作

當啟動的快照運作正常時,將其設為永久快照:

sudo snapper rollback

您可以新增描述,以便日後更容易識別產生的快照:

sudo snapper rollback -d "Rollback after failed update"
SLES 終端機示範了 snapper 回滾指令,並附有描述性的回滾標籤。
僅在啟動的快照通過驗證檢查後才執行 snapper rollback。添加簡短描述有助於日後更輕鬆地識別恢復點。

根據 SLES 管理文檔,Snapper 會建立回滾前狀態的快照,並建立一個新的可寫入快照作為預設根目錄。這是一個重要的安全特性:回滾操作不會直接覆蓋舊的根目錄。

指令執行完畢後重開機:

sudo reboot

下次啟動時,選擇正常的預設 SLES 條目,而不是再次啟動舊的唯讀快照。

步驟 7:驗證復原後的根目錄是否可寫,且現在是否為預設目錄。

正常啟動後,檢查根掛載點和快照清單:

findmnt /
sudo snapper list
回滾後,SLES 終端機顯示可寫入的 Btrfs 根目錄和 Snapper 快照。
重新啟動正常入口後,確認根目錄(/)可寫,並查看新的回滾相關快照。新的根目錄現在應該是系統的當前狀態。

重複執行之前失敗的功能檢查。如果應用程式仍然失敗,請考慮該應用程式的某些部分是否位於根快照未包含的目錄中。

步驟 8:刷新儲存庫並驗證軟體包狀態

對於普通的軟體包更新,在嘗試再次更新之前,請刷新軟體倉庫並檢查軟體包依賴關係。對於服務包回滾,軟體倉庫和產品註冊檢查尤其重要,因為不匹配的軟體倉庫集會立即導致系統處於不一致的狀態。

sudo zypper ref -fs
sudo zypper lr -u
sudo zypper verify
SLES 終端刷新 Zypper 軟體倉庫,列出軟體倉庫 URL,並驗證已安裝的軟體包
最後檢查儲存庫配置和軟體包一致性。服務包回滾後,也要驗證產品註冊資訊是否與恢復後的 SLES 狀態相符。

對於服務包恢復,請按照官方SLES 升級指南中的檢查步驟進行操作,該指南明確要求在回滾後檢查儲存庫配置和產品註冊。

Snapper 根目錄回滾無法復原的內容

這是在生產伺服器上使用回滾功能之前必須了解的最重要限制。預設的 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回滾可能無法撤銷這些資料變更。在認為僅憑系統快照就足夠之前,請務必檢查應用程式本身的降級或復原過程。

避免的常見錯誤

  • 在測試快照之前進行回滾。先啟動只讀快照是更安全的 SLES 工作流程,因為它允許您驗證目標狀態。
  • 誤選了更新後的快照。請檢查類型、日期、描述以及更新前後的關係,而不僅依賴快照編號。
  • 用於undochange整個軟體包事務。它適用於選定檔案;SUSE 建議使用啟動回滾方法進行完整的 root 權限恢復。
  • 預期/var或/home將沿根目錄向後移動。預設子卷排除項是故意設定的。
  • 忽略單設備要求。 SLES 15 SP7 文件中提供了單一裝置 Btrfs 根目錄的可開機根目錄回溯支援。
  • 立即重試相同的更新。首先確定更新失敗的原因,確認軟體來源,並確定失敗原因是軟體包缺陷、第三方軟體不相容、磁碟空間不足或本機設定問題。

如果系統使用事務性更新

SLES 也可以安裝為事務伺服器角色。這是一種不同的運行模式:更新應用於快照並在重新啟動時啟動。在這些系統中,SUSE 提供了transactional-update rollback將快照設定為預設根目錄的功能。切勿在未先確定係統角色的情況下,將事務伺服器復原方案混入傳統的讀寫 SLES 安裝中。官方行為在SLES 15 SP7 事務更新文件中有詳細描述。

恢復檢查清單

  • 確認檔案/系統為 Btrfs,rootSnapper 配置存在,且根 Btrfs 檔案系統位於同一裝置上。
  • 找到更新失敗前立即產生的快照。
  • 當您需要了解變更範圍時,snapper status請使用此功能。snapper diff
  • undochange僅對明顯隔離的檔案進行選擇性操作。
  • 如果系統更新失敗,請從 GRUB 啟動候選快照並以唯讀方式進行測試。
  • snapper rollback僅在候選程序表現正常後運行。
  • 重新啟動正常預設條目,並驗證恢復後的根目錄是否可寫入。
  • 服務包恢復後,刷新儲存庫,驗證軟體包狀態,並檢查註冊狀況。
  • 在宣布恢復完成之前,請檢查排除的子磁碟區是否有應用程式或資料格式不符的情況。

核心的權衡在於精確性和一致性。選擇性檔案復原改動較小,但需要您確切地知道哪裡出了問題。經過測試的系統回滾改動較大,但它可以恢復一個連貫的快照根狀態,更適合影響多個元件的失敗更新。在 SLES 系統中,最安全的工作流程是使用唯讀快照啟動作為決策點,而不是在驗證候選方案之前就使回溯操作不可逆。

留下評論

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 入口網站、淺色和深色設定以及應用程式工具包限制。

如何設定 Pardus 企業管理軟體(LIDER AHENK)

如何設定 Pardus 企業管理軟體(LIDER AHENK)

在 Pardus 上設定 LIDER AHENK,並採用以品質為中心的設定:驗證先決條件、部署 Lider、註冊 Ahenk 用戶端並驗證管理。

如何在 Pardus 23 工作站上啟用 NVIDIA 驅動程式

如何在 Pardus 23 工作站上啟用 NVIDIA 驅動程式

使用 Pardus NVIDIA 驅動程式安裝程式在 Pardus 23 上啟用 NVIDIA 驅動程式。檢查 GPU 相容性、安全重新啟動、驗證驅動程式並解決常見問題。

Ubuntu Server 24.04 最小化安裝版與標準安裝版:效能基準測試結果究竟如何

Ubuntu Server 24.04 最小化安裝版與標準安裝版:效能基準測試結果究竟如何

使用可重複的基準測試方法,比較 Ubuntu Server 24.04 Minimal 和 Standard 安裝的磁碟使用情況、記憶體、啟動時間、服務和實際工作負載效能。

修復 SUSE Linux Enterprise 中的「Zypper 被另一個進程鎖定」問題

修復 SUSE Linux Enterprise 中的「Zypper 被另一個進程鎖定」問題

安全地解決 SLES 中的 Zypper 鎖定錯誤。識別進程,選擇等待或停止該進程,並區分事務鎖和包鎖。

如何在 Pardus Linux 上設定遠端桌面訪問

如何在 Pardus Linux 上設定遠端桌面訪問

使用 RustDesk 在 Pardus Linux 上設定安全的遠端桌面存取。安裝 Debian 軟體包,連接以獲得一次性支持,並安全地配置無人值守存取。

Pardus XFCE 與 GNOME:公平記憶體基準測試能告訴你什麼,又不能告訴你什麼?

Pardus XFCE 與 GNOME:公平記憶體基準測試能告訴你什麼,又不能告訴你什麼?

公平地比較 Pardus XFCE 和 GNOME 的記憶體使用情況。看看官方 25.2 版本的信息,了解如何測量可用內存,以及哪個版本更適合您的電腦。