磁碟 100% 的後果比想像中嚴重:資料庫拒絕寫入、網站報 500、連日誌都寫不進去導致無從排查。本文給出一套從定位到清理的標準流程。

第一步:確認全域狀況

執行 df -h 查看各分割區使用率,確認是根分割區滿了還是某個掛載點滿了。如果 inode 用盡(df -i 顯示 100%)而空間還有剩餘,說明是海量小檔案問題,思路相同但要找的是檔案數量多的目錄。

第二步:定位大目錄

從根目錄逐層下鑽:du -h --max-depth=1 / 2>/dev/null | sort -rh | head,找到最大的目錄後再進入下一層重複,兩三輪就能鎖定元兇。

最常見的五個「胖子」

  • 日誌:/var/log 下的滾動日誌和應用自己寫的日誌最常見。用 journalctl --vacuum-size=200M 收縮系統日誌,並給應用日誌配置 logrotate;
  • Docker:懸空映像檔和建置快取極佔空間,docker system df 查看、docker system prune 清理(注意確認不會誤刪在用的東西);
  • 舊備份:備份腳本只增不刪,幾個月就把磁碟吃滿,給備份加保留策略;
  • 套件管理快取apt clean 可釋放下載快取;
  • 被刪除但未釋放的檔案:程序還持有已刪除檔案的控制代碼時空間不會釋放,lsof | grep deleted 找到程序重啟即可。

清理時的兩條鐵律

一是先看後刪:刪除前確認檔案用途,資料庫目錄、正在寫入的日誌不能直接 rm;二是大檔案先截斷後刪除:正在被寫入的日誌用 truncate -s 0 清空比直接刪更安全。清理後建議設定磁碟使用率告警(超過 80% 提醒),避免下次又是滿了才發現。