如何安全地執行 apt upgrade 升級 文章首圖

如何安全地執行 apt upgrade 升級

如何安全地執行 apt upgrade 升級

在 Linux 系統管理中,定期更新套件是維持伺服器安全性與穩定性的關鍵環節。對於 Ubuntu 和 Debian 使用者而言,apt upgrade 是最常用的指令。然而,許多初學者甚至中階使用者常有一個誤解:認為直接執行 sudo apt upgrade 就能萬事大吉。事實上,若未做好前置準備,這個看似簡單的指令可能會導致系統無法開機、網路中斷或資料庫崩潰。

本文將帶領你了解如何以「安全、可控、可恢復」的方式執行系統升級,確保你的 Linux 環境在更新後依然穩定運作。

為什麼不能直接執行 apt upgrade?

在 Debian 系發行版中,apt upgradeapt full-upgrade 有顯著區別。upgrade 會升級所有已安裝的套件,但如果某個套件的升級需要「安裝新的相依套件」或「移除現有套件」,apt upgrade跳過該套件的升級。這聽起來很安全,但實際上會導致系統處於一種「半更新」的狀態,長期下來可能引發相依性問題。

更危險的是,若使用 apt full-upgrade,系統可能會自動移除你正在使用的核心版本或關鍵服務套件,導致系統當機。因此,「安全」的核心在於預先掌握變更內容建立還原機制

步驟一:建立系統快照(Snapshot)

這是安全升級最重要的一環。如果你使用的是虛擬機或支援快照的雲端服務,請務必在執行任何指令前建立快照。

對於實體機或無法使用快照的環境,建議使用 timeshift 或手動備份關鍵目錄:

# 備份關鍵目錄
sudo cp -a /etc /etc.bak.$(date +%Y%m%d)
sudo cp -a /var/lib/dpkg/status /var/lib/dpkg/status.bak.$(date +%Y%m%d)

步驟二:預覽升級內容

在真正執行升級前,先讓系統模擬升級過程,查看會發生什麼事。這能幫助你預判是否有套件會被移除或核心會更換。

sudo apt upgrade --simulate

觀察輸出結果,特別注意以下幾點:

  1. Removed packages:是否有關鍵服務(如 openssh-server, systemd)被標記為移除?
  2. New packages:是否有大量新套件需要安裝,可能佔用過多磁碟空間?
  3. Kernel upgrade:是否包含核心升級?若包含,請確認你有多個核心版本可供回滾。

步驟三:執行升級並監控過程

確認無誤後,開始執行實際升級。建議搭配 screentmux 執行,以防 SSH 連線中斷導致升級過程殘留鎖檔。

sudo apt update
sudo apt upgrade -y

若你需要更徹底的更新(包含相依性變更),請使用:

sudo apt full-upgrade -y

升級過程中,系統可能會中斷並要求你確認某些設定檔的變更(例如 sshd_confignginx.conf)。請務必仔細閱讀差異,選擇 keep the local version(保留本地版本)或 install the package maintainer's version(安裝維護者版本),取決於你是否曾修改過這些設定。

步驟四:清理與重啟

升級完成後,執行以下指令清理不再需要的相依套件:

sudo apt autoremove
sudo apt clean

若升級內容包含核心(Linux kernel)更新,則必須重新開機才能生效:

sudo reboot

開機後,請確認系統正常運作,並檢查核心版本:

uname -r

常見問題

Q1: 升級後 SSH 無法連線怎麼辦?

這通常發生在 openssh-server 套件更新後,設定檔衝突或服務未正確重啟。

解決方案:

  1. 檢查 SSH 服務狀態:sudo systemctl status ssh
  2. 若設定檔衝突,可嘗試恢復備份的設定檔:
    sudo cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config
    sudo systemctl restart ssh
  3. 若完全無法連線,請透過主機控制台(Console)登入,並檢查 /var/log/auth.log 尋找錯誤訊息。

Q2: 如何回滾到升級前的狀態?

若升級後系統異常,且你有使用 timeshift,可直接透過 GUI 或指令還原快照。若無快照,可嘗試手動還原備份的 dpkg 狀態檔,但此方法僅適用於套件安裝/移除狀態的還原,不包含設定檔或數據。

# 僅供參考,實際還原需謹慎操作
sudo cp /var/lib/dpkg/status.bak.* /var/lib/dpkg/status
sudo apt update

更推薦的方式是,若系統無法開機,可進入救援模式(Rescue Mode),並重新安裝舊版核心:

# 在救援模式下,列出可用核心並安裝舊版
apt list --installed | grep linux-image
sudo apt install linux-image-5.15.0-xx-generic

小結

安全地執行 apt upgrade 並非僅是輸入一個指令,而是一套包含「備份、預覽、執行、驗證」的標準作業程序。對於中階使用者而言,養成執行 --simulate 的習慣,並定期備份關鍵目錄,能大幅降低系統更新帶來的風險。記住,在 Linux 世界裡,預防勝於治療,良好的更新策略是伺服器穩定性的基石。