一、背景說明
舉例Proxy 伺服器 (/dev/sdb1) 掛載點 /var/spool/squid 容量 99GB,主要用於 Squid 快取。
由於快取配置總量過大(約 92GB),實際使用率長期維持在 80% 以上,導致磁碟可用空間過小,存在以下風險:
快取未及時清理 → 磁碟接近滿載時,Squid 才會啟動 LRU 清理,可能造成整個分區剩餘空間不足。
日誌檔異常增長 → Squid 與系統服務的日誌若未妥善管理,可能與快取爭奪空間,加速磁碟耗盡。
磁碟滿載風險 → 一旦磁碟 100% 滿載,Squid 及其他系統服務可能停止運作,導致業務中斷。
二、快取空間規劃建議
調整快取上限
將單一快取目錄由 4096MB 改為 3072MB,總快取容量由 92GB 降至約 69GB。
預留約 30GB 安全緩衝,避免磁碟滿載。
設定清理水位
建議於 squid.conf 加入:
cache_swap_high 85
cache_swap_low 75
當快取用量達到 85% 時啟動清理,直到降到 75% 停止,確保自動回收機制更早生效。
定期清理排程(選擇性)
於 /etc/cron.weekly/ 設定清理腳本,確保長期維護時即使自動回收未觸發,也能避免磁碟滿載。
三、日誌檔檢查與空間管理
- 日誌成長風險
Squid 的存取日誌 (/var/log/squid/access.log) 與快取日誌 (cache.log) 隨流量成長,可能數 GB。
系統服務(Postfix、DHCP、Named、Chronyd 等)也會將日誌寫入 /var/log/。
若 logrotate 未正確配置,日誌無限累積,可能與快取檔案共同壓縮磁碟空間。
- 檢查日誌空間方式
總覽日誌目錄大小:
du -sh /var/log/*
檢查最大檔案:
ls -lhS /var/log/squid/
- 日誌管理建議
確認 logrotate 啟用
檢查 /etc/logrotate.conf 與 /etc/logrotate.d/squid 是否存在。
建議將 Squid 日誌設為每日切割,並保留 7~14 天。
限制日誌檔大小
在 logrotate 規則內加入 size 限制,例如:
/var/log/squid/*.log {
daily
rotate 7
compress
size 100M
missingok
notifempty
create 0640 squid squid
}
將大型日誌轉存或集中管理
可搭配 ELK、Splunk 或 syslog server,避免本機日誌無限制增長。
四、綜合注意事項
磁碟使用率門檻監控
建立腳本或監控系統,當 /var/spool/squid 或 /var/log 超過 80% 時發送告警。
快取與日誌需分區管理
理想狀況下,/var/spool/squid(快取)與 /var/log(日誌)應分開掛載,避免互相影響。
日誌檢查與清理例行化
建立每週/每月檢查流程,定期盤點佔用空間最大的日誌與快取,並視需要清理。
五、結論
快取不宜無限制擴張,需設定合理上限與清理水位,避免壓爆分區。
日誌檔與快取同樣佔用磁碟,必須透過 logrotate、定期檢查與監控避免異常增長。
最安全的做法:快取限制在分區的 70%,搭配 85/75 清理水位,再加上 logrotate,每週檢查一次 /var/spool/squid 與 /var/log 空間。
動手改設定前要考慮到很多,所以能不動設定盡量別動設定,因此動手前可以先思考該伺服器來說,剩下磁碟間是否「夠用」的,因為本來就會自動刪舊的檔案。考慮到磁碟成長速度,也就是快取用量的變化趨勢。這通常用來判斷「一天大概長幾 GB」、「多久會到水位」,是否能在自動刪舊的檔案負荷。