如何安全地執行 apt upgrade 升級
在 Linux 系統管理中,定期更新套件是維持伺服器安全性與穩定性的關鍵環節。對於 Ubuntu 和 Debian 使用者而言,apt upgrade 是最常用的指令。然而,許多初學者甚至中階使用者常有一個誤解:認為直接執行 sudo apt upgrade 就能萬事大吉。事實上,若未做好前置準備,這個看似簡單的指令可能會導致系統無法開機、網路中斷或資料庫崩潰。
本文將帶領你了解如何以「安全、可控、可恢復」的方式執行系統升級,確保你的 Linux 環境在更新後依然穩定運作。
為什麼不能直接執行 apt upgrade?
在 Debian 系發行版中,apt upgrade 與 apt 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
觀察輸出結果,特別注意以下幾點:
- Removed packages:是否有關鍵服務(如
openssh-server,systemd)被標記為移除? - New packages:是否有大量新套件需要安裝,可能佔用過多磁碟空間?
- Kernel upgrade:是否包含核心升級?若包含,請確認你有多個核心版本可供回滾。
步驟三:執行升級並監控過程
確認無誤後,開始執行實際升級。建議搭配 screen 或 tmux 執行,以防 SSH 連線中斷導致升級過程殘留鎖檔。
sudo apt update
sudo apt upgrade -y
若你需要更徹底的更新(包含相依性變更),請使用:
sudo apt full-upgrade -y
升級過程中,系統可能會中斷並要求你確認某些設定檔的變更(例如 sshd_config 或 nginx.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 套件更新後,設定檔衝突或服務未正確重啟。
解決方案:
- 檢查 SSH 服務狀態:
sudo systemctl status ssh - 若設定檔衝突,可嘗試恢復備份的設定檔:
sudo cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config sudo systemctl restart ssh - 若完全無法連線,請透過主機控制台(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 世界裡,預防勝於治療,良好的更新策略是伺服器穩定性的基石。