Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

journalctl 清理釋放 0B?先輪替活動日誌並解釋容量下限

區分活動與封存日誌,按持久或揮發性儲存選擇上限,並驗證總量為何仍可能高於目標。

原創示意圖:磁碟用量包含活動與封存日誌,而清理只刪除封存檔案。
原創示意圖:活動檔案造成 0B 時,先輪替再做一次性清理。 Watch at Ease

journalctl 清理成功執行後,仍可能釋放 0B,或者讓磁碟用量高於指定目標;這不一定表示命令失效。顯示的用量包含活動日誌檔案與封存日誌檔案,而 vacuum 只刪除封存檔案。如果這次清理需要涵蓋目前為止寫入的資料,應先輪替日誌。

一次性清理與限制往後的儲存用量是兩件事。/var/log/journal 下的持久日誌使用 System 設定,/run/log/journal 下的揮發性日誌使用 Runtime 設定。即使上限設定正確,活動日誌檔案與檔案大小粒度仍可能使總用量高於名義目標。

1. 刪除前記錄基準

執行 sudo journalctl --disk-usage 並記錄輸出。接著檢查 sudo du -sh /var/log/journal /run/log/journal 2>/dev/null 和 sudo journalctl --list-boots。第一條命令提供 journal 自身統計的用量;目錄檢查則有助於確認相關儲存是持久、揮發性,還是兩者都有。不要只憑發行版名稱推斷儲存類型。

清理前,先保存事故調查、稽核或支援請求需要的日誌。本流程管理本機 journal 儲存,不涵蓋 journal-remote 的保留原則、匯出的封存,或複製到正在使用的 journal 目錄階層之外的檔案。

2. 修改設定前,先解釋 0B 的結果

上游手冊說明,--disk-usage 包含活動與封存檔案,而 vacuum 只處理封存檔案。如果儲存中只有活動檔案,即使設定很小的目標,也可能釋放 0B。Server Fault 的案例正是如此:後來有了封存檔案,清理才釋放空間。

不要把 --vacuum-size=0 當成清空捷徑。目前 systemd 文件規定,0 表示不啟用這項限制條件。應選擇非零目標,並為系統保留足夠的診斷歷史。

3. 執行範圍明確的一次性清理

若要讓清理涵蓋目前為止寫入的資料,執行 sudo journalctl --rotate --vacuum-size=500M,並把 500M 換成你評估後的目標。組合使用這兩個選項,會先輪替活動檔案,再清理封存檔案。不要在 journald 使用 .journal 檔案期間手動刪除它們。

再次執行 sudo journalctl --disk-usage,同時記錄釋放位元組數與新的總用量。仍有占用不代表必然失敗:新建的活動檔案會保留,其他命名空間或儲存也可能貢獻用量。

4. 選擇與儲存類型對應的長期限制

對於 /var/log/journal 下的持久儲存,在本機 journald.conf 的 drop-in 設定片段中設定 SystemMaxUse;如果需要更細的刪除粒度,再設定 SystemMaxFileSize。對於 /run/log/journal 下的揮發性儲存,應改用 RuntimeMaxUse 與 RuntimeMaxFileSize。SystemKeepFree 與 RuntimeKeepFree 為其他用途保留可用空間;journald 會採用適用限制中較小的那個。

Red Hat 將啟用持久日誌作為獨立程序,並透過確認 /var/log/journal 目錄存在且包含檔案來驗證。對於採用 Storage=auto 的系統,這個目錄是否存在會影響儲存方式。請遵循所用發行版的設定機制與驗證工具,不要直接照抄僅適用於某個系統角色的範例。

5. 套用設定並驗證

新增本機 drop-in 設定片段後,用發行版提供的工具核對最終生效的設定,按其支援程序重新載入或重新啟動 systemd-journald,並確認實際使用的儲存目錄。隨後讓系統產生一般日誌,視需要等待輪替,再檢查磁碟用量。設定檔語法正確,仍可能針對了錯誤的儲存類型。

驗證穩定狀態,而不只是查看剛完成清理時的結果。記錄活動檔案大小、封存檔案總量、設定的 MaxUse 與 MaxFileSize,以及剩餘可用空間。這有助於區分真正的持續增長,與文件已說明的活動檔案下限或較粗的檔案大小粒度。

6. 明確結果能夠證明什麼

一次輪替加清理的結果,只能證明符合條件的本機封存日誌檔案已被納入所選條件的檢查。它不能證明所有應用程式日誌都由 journald 儲存,不能證明遠端封存已清理,也不能證明已設定往後的容量上限。

如果用量仍持續超出預期的穩定範圍,應收集實際目錄、活動與封存檔案大小、journal 命名空間、最終生效的設定和 systemd 版本。在證據確定哪個元件消耗空間前,不要反覆降低清理目標。

原創解說圖:比較 var 下的持久 journal 儲存與 run 下的揮發性 journal 儲存,以及它們各自獨立的容量設定。
原創示意圖:持久儲存選擇 System 設定,揮發性儲存選擇 Runtime 設定,然後驗證實際路徑與活動檔案造成的容量下限。 Watch at Ease