系統維護
為了持續使用 Arch Linux,需要進行系統日常維護,每個用戶都應該及時維護系統。
檢查是否有 systemd 服務失敗:
$ systemctl --failed
更多信息請參考使用單元。
檢查 /var/log/ 目錄下的日誌文件中的錯誤信息,同時檢查 systemd Journal 中記錄的信息:
# journalctl -b
有關過濾選項等詳細內容請參閱 systemd/Journal。
有關 Xorg 記錄錯誤的位置與方式請參閱 Xorg#故障和修復。
應把重要數據的備份作為日常維護任務,因為隨著時間推移,數據很可能會由於人為和機器處理錯誤損壞,且存儲數據的物理介質也注定會發生故障。
請參見同步和備份程序尋找最符合實際需要的用於備份的應用程式。其它相關文章請參閱分類:系統恢復。
強烈建議自動化備份並測試恢復流程,以確保一切按預期運行。關於自動化操作,請參閱系統備份#自動化。
在編輯任何配置文件前,都先進行備份,這樣若出現問題便可以直接還原。可以配置 Vim、Emacs 等編輯器自動進行此操作。在更複雜的應用場景中,可考慮使用配置管理器。
對於 dotfiles(即主文件夾內的配置文件),可參閱 dotfiles#使用 Git 跟蹤點文件。
維護一個所有安裝軟體包的列表,這樣在不得已進行系統重裝時,可以很快恢復到初始環境。
參見 pacman/提示和技巧#備份 pacman 資料庫。
參見系統備份。
建議定期通過 pacman#升級軟體包進行完整系統升級,這樣既能享受到最新的問題修復和安全更新,還可以避免一次性處理過多需要手動干預的軟體包升級。從社區尋求幫助時,其他人通常會假定系統處於最新狀態。
手頭上保留 Arch 安裝盤或其它 Linux「Live」環境介質,以便在更新後出現問題時能輕鬆恢復系統。如果在生產環境使用 Arch,或因其它原因不能接受停機,那麼在更新前請在非關鍵系統上測試新的配置文件和軟體包,確認沒有問題後再部署到生產環境。
如果系統中裝有來自 AUR 的軟體包,請注意小心地升級每個軟體包。
pacman 是一款強大的包管理工具,但並不試圖處理所有極端情況。用戶必須保持警惕,並承擔維護自身系統的責任。
升級前建議訪問 Arch Linux 主頁查看最新消息(中文翻譯見 Arch Linux 中文社區主頁),或訂閱 RSS(中文翻譯)、arch-announce 郵件列表 或 Telegram Arch Linux 中文新聞頻道。如果升級需要不尋常的(即無法簡單地按照 pacman 的輸出信息處理的)用戶操作介入時,以上信息源總會給出合適的方法。
在更新內核、Xorg、systemd、glibc包 等核心軟體之前,查看論壇(中文論壇)了解是否已有任何問題報告。
必須同樣意識到的是,升級軟體包可能引發意想不到的問題,需要用戶立即進行一些手動調整。因此,請不要在重要任務前進行系統更新,而要留出足夠的時間用於應付可能的問題。
避免部分升級⸺總是使用 pacman -Syu 而不要使用 pacman -Sy。
一般情況下,避免使用 pacman 的 --overwrite 選項。--overwrite 選項接受一個可包含通配符的模式作為參數。使用時,pacman 將跳過匹配模式的文件的衝突檢查,直接覆蓋文件。在一個維護得當的系統中,該選項應僅在 Arch 開發者明確推薦(參見 #在升級前閱讀新聞)時使用。
避免使用 pacman 的 -d 選項。pacman -Rdd 軟體包 在移除軟體包時不會進行依賴關係檢查,因此可能僅移除某個提供關鍵依賴的軟體包,從而導致系統損壞。
Arch Linux 是滾動更新的發行版:當新版本的庫被推送到軟體倉庫時,開發者和軟體包維護者會重新構建倉庫中所有需要針對新庫重新構建的軟體包。如果兩個軟體包依賴於同一個庫,僅升級其中一個軟體包時,若需要同時升級該庫(作為依賴項),就會破壞另一個依賴於該庫舊版本的軟體包。
這就是為什麼 Arch 不支持部分升級。切勿使用:
pacman -Sy 軟體包- 先執行
pacman -Sy或pacman -Syuw再執行pacman -S 軟體包(此處應使用-Su安裝軟體包。)
pacman -Syuw 命令確實存在與 pacman -Sy 相同的風險,因其也會更新 pacman 的同步資料庫但並不進行完整系統升級。當更新或安裝軟體包時,總是使用 pacman -Syu 進行完整升級。
pacman -Syu 因錯誤而未能完成完整升級,必須儘快解決該錯誤並完成升級操作。出於同樣的原因,使用 IgnorePkg 和 IgnoreGroup 時要非常小心。如果系統有本地構建的軟體包(例如 AUR 包),當其依賴項發生 soname 升級時,需要重新構建。
如果不慎造成了部分升級,導致二進制文件找不到連結庫,不要簡單地通過創建符號連結來「修復」問題。當庫不再向後兼容時,會進行 soname 升級。只要 pacman 本身沒有損壞,對一個同步正常的鏡像執行簡單的 pacman -Syu 即可解決問題。
pacman-contrib包 提供的 bash 腳本 checkupdates 提供了一種安全方法檢查已安裝軟體包的可用更新但不進行完整系統升級,並且提供了一個選項 -d 可以將待處理的更新下載到 pacman 緩存中而不同步資料庫,從而避免在這些操作後嘗試使用 pacman -S 軟體包 安裝軟體包導致的部分升級問題。
升級系統時,請一定要注意 pacman 輸出的注意信息。如果有需要手動操作的,請一定要立即搞定。如果不明白 pacman 輸出的信息,請去論壇搜索或檢查 Arch Linux 首頁的新聞(參見 #升級前閱讀新聞)。
pacman 運行時可能會創建 .pacnew 和 .pacsave 文件並發出通知。這些文件必須及時處理,詳細的操作說明請參閱 pacman/pacnew 與 pacsave。
此外,請留意之前複製來的或創建的其他配置文件。例如,若曾將軟體包的示例配置文件複製到主目錄,請檢查示例文件是否更新。
升級通常不立即應用於運行中的程序,只有重新啟動程序才能完全應用升級。
可使用 archlinux-contrib包 提供的 checkservices 腳本,其運行 pacdiff 合併 .pacnew 文件,然後檢查正在運行且使用過期庫的進程,並提示用戶是否想要重啟這些進程。
內核尤其難以應用升級,一般需要重啟系統。升級內核後重啟系統永遠是最安全的選擇,但如果非常不便,也可使用內核熱補丁在不重啟系統的情況下應用更新。
如果已知升級某個軟體包可能會引發問題,軟體包維護者會確保在 pacman 升級該包時給出提示信息。如果在升級後遇到問題,可以查看 /var/log/pacman.log 再次確認 pacman 的輸出內容。
只有在確保無法從 pacman 日誌中找到任何相關信息、已 #在升級前閱讀新聞且沒有關於該更新的論壇帖子之後,才應考慮在論壇(中文論壇)或 IRC 上尋求幫助。降級軟體包回退有問題的更新是最後的解決方案。
系統升級後,有些軟體包可能不再需要,或者已從遠程倉庫中移除。
用 pacman -Qtd 命令查找之前作為依賴安裝,現在不再需要的軟體包(即孤立軟體包)。如果還需要孤立包,可以將安裝原因改為「顯式安裝」;如果不再需要,可以直接將其刪除。詳見 pacman/提示和技巧#刪除未使用的軟體包(孤立軟體包)。
除此之外,有些軟體包可能已從遠程倉庫中移除,但是還安裝在本地(即棄用的軟體包)。pacman -Qm 命令可以列出所有棄用的軟體包。注意輸出的列表會包含手動安裝的軟體(包括來自 AUR 的包)。若要排除那些在 AUR 上可用的軟體包(曾通過 AUR 安裝,或從遠程倉庫移至 AUR),可使用 BBS#288205 中提供的腳本,或嘗試使用 ancient-packagesAUR 工具。
pacman 在跟蹤安裝的文件方面遠比人工操作更可靠。如果手動安裝軟體,遲早會忘記做過的操作、忘記安裝位置、安裝衝突的軟體、安裝到錯誤的位置等等。
- 使用 pacman#安裝軟體包中介紹的方法安裝官方軟體包。
- 如果官方源中沒有所需程序,請檢查 AUR 中是否有人已為其創建了軟體包。如果有,按照 AUR 文章中的方法進行安裝。
- 如果在 AUR 中也沒有找到,可以考慮為其創建軟體包。
要清理自己安裝的文件,可以參考查找不屬於任何軟體包的文件。
儘可能選擇開源驅動,避免私有驅動。大多數時候,開源驅動比私有驅動更加穩定可靠且開源驅動的問題修改起來更加容易快速。私有驅動儘管提供更多的特性和性能,但往往以犧牲穩定性為代價。為了避免這個兩難選擇,可以選擇已知有功能完整、成熟的開源驅動支持的硬體。關於硬體和開源 Linux 驅動的信息可以在 linux-drivers.org 找到。
在使用 AUR 或非官方用戶倉庫中的軟體包時,請務必保持謹慎。這些包大多由普通用戶提供,可能無法達到與官方倉庫相同的質量。在編譯或安裝軟體包之前,務必檢查軟體包的 PKGBUILD 確保其中不含有錯誤或惡意的代碼。
為簡化維護,應限制第三方軟體包的使用。定期檢查實際使用的包,移除不再需要的包(或使用官方倉庫中存在的包替代)。pacman/提示和技巧#維護提供了相關實用命令。系統升級後,可使用 rebuild-detector包 識別可能需要重新構建的非官方軟體包。
鏡像的質量可能會隨時間變化,有些鏡像會下線或者出現同步或下載問題,所以請注意更新 pacman 的鏡像列表。
詳見鏡像源。
有助於完成此任務的程序可在應用程式列表/工具#磁碟清理中找到。
在查找要刪除的文件時,關鍵在於找到那些占用最多磁碟空間的文件。有助於完成此任務的程序可在應用程式列表/工具#磁碟使用情況顯示中找到。
刪除 /var/cache/pacman/pkg/ 中不需要的 .pkg 文件可以減少空間占用。
詳見 pacman#清理軟體包緩存。
刪除系統中不需要的軟體包可以減少空間占用並降低維護難度。
參見 #檢查孤立與棄用的軟體包。
新版本的軟體可能不兼容舊配置文件。請定期清理不需要的配置文件,尤其是在主目錄和 ~/.config 目錄。出於類似原因,在不同系統安裝之間共享主目錄時需格外謹慎。
檢查以下目錄:
-
~/.config/⸺應用程式存儲其配置的位置 -
~/.cache/⸺某些程序的緩存可能會占用大量空間 -
~/.local/share/⸺舊文件可能殘留於此
有關這些目錄的更多信息請參閱 XDG 基本目錄。
為使主目錄免受錯誤創建於其中的臨時文件影響,建議管理一個不需要的文件列表並定期清理它們,例如使用 rmshit.py 腳本。
系統中可能殘留有需要刪除的已損壞的舊符號連結。方法可以參考這裡和這裡。但是注意一些損壞的符號連結仍有用處,故不應盲目刪除所有的符號連結 [1]。
要快速列出系統中全部損壞符號連結(排除運行時與虛擬目錄),請使用:
# find / -type d \( -path "/dev" -o -path "/proc" -o -path "/run" -o -path "/sys" \) -prune -o -xtype l -print
然後檢查並刪除列表中不必要的文件。
以下技巧通常並非必需,但對某些用戶可能有用。
Arch 的滾動更新讓用戶可以使用最新的功能和上游更新,但是這也增加了系統維護的難度。為簡化維護並提升穩定性,可以儘量避免使用尖端軟體,使用穩定的、經測試的軟體包。此類軟體包不太可能出現複雜的升級,例如重大的配置變更或功能移除。選擇擁有強大活躍開發社區以及大量資深用戶的軟體,在出現問題時能夠更輕鬆地獲得支持。
避免使用 testing 倉庫(即使僅僅單個軟體包),這些軟體包都屬實驗性質,不適合安裝到穩定系統。同樣地,也應避免那些直接從上流開發原始碼構建的軟體包。這些包通常由 AUR 提供,包名上通常帶有 dev、devel、svn、cvs、git 等字樣。
可使用 core 倉庫中的 linux-lts包 替代默認內核。內核上游開發者為此版本提供長期支持(LTS),包括安全更新和錯誤修復。適用於由於使用了樹外內核模塊(如某些專有驅動)並希望確保其兼容性或其它原因需要長期支持的用戶,也可以將此內核作為備用內核,以免升級到新內核後出現問題。
要將其添加到啟動選項,需要編輯引導加載程序的配置文件,使用 LTS 內核及其內存磁碟映像:vmlinuz-linux-lts 和 initramfs-linux-lts.img。