磁碟 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% 提醒),避免下次又是滿了才發現。