站点运营

站点运营:磁盘空間與 inode 自查,別让日誌和缓存悄悄寫满分区

磁盘寫满和 inode 耗尽,往往不是突然發生的。日誌、缓存、备份、临时文件一点点堆积,等到資料库寫不進去、頁面開始报错,才被發現。這篇整理一套從 df、du 到日誌轮轉和清理策略的自查思路,帮助把問题提前找出来。

站点运营

站点运营:磁盘空間與 inode 自查,別让日誌和缓存悄悄寫满分区

服務器磁盘寫满,不一定會在第一時間表現為“打不開”。更常见的情况是:資料库寫入失敗、缓存文件生成不了、日誌停止记錄、上传功能报错,蜘蛛来抓时拿到 500 或空白頁。inode 耗尽也是類似,明明 df -h 顯示還有空間,但系統就是無法建立新文件。對站点运营来说,這類問题不需要等到出事才處理,日常巡检就能提前發現。

先分清两個指标:空間和 inode

df -h 看的是分区剩余空間,df -i 看的是 inode 使用率。两者要分開看,因為它們的“凶手”不一样。

  • 空間被占满:通常是日誌、备份包、缓存、视频或附件等大文件。
  • inode 被占满:通常是大量小文件,比如缓存碎片、會话文件、缩略图、临时上传分片。

如果只看空間不看 inode,可能出現“還有 20G 空闲,却寫不進任何文件”的情况。建议把 df -h 和 df -i 一起加入巡检命令。

常见占满来源,按優先級排查

  1. 日誌目錄:訪問日誌、错誤日誌、慢查询日誌、應用日誌。如果没做轮轉,單個文件涨到几 GB 很常见。
  2. 缓存目錄:頁面缓存、對象缓存、模板编译缓存。缓存本身是好事,但失效文件長期不清理就會堆积。
  3. 备份文件:本地备份、資料库導出、打包下载。备份最好异地存放,不要把服務器当仓库。
  4. 临时文件與會话:上传临时目錄、session 文件、队列重试文件。數量多的时候,inode 消耗很快。
  5. 邮件队列:如果站点發信量大,队列积压也會占用空間。

一套可执行的自查流程

登入服務器後,可以按下面的顺序看,不必一次做得很复杂。

  1. 執行 df -h 和 df -i,记錄使用率超過 80% 的分区。
  2. 進入可疑分区,用 du -sh * 逐层查看目錄大小,找出增長最快的目錄。
  3. 用 find 查找大文件,例如按大小排序,定位最近修改的異常文件。
  4. 對 inode 高的分区,統計目錄下的文件數量,重点看缓存和 session 目錄。
  5. 检查 logrotate 配置,確認日誌是否按天或按大小轮轉,是否压缩,保留多少份。
  6. 检查备份脚本,確認备份文件是否清理,有没有把舊备份留在同分区。

如果發現是日誌涨得太快,不要急着直接删。先確認日誌是否還需要用于排查,再决定压缩、截断還是轉移。直接清空正在寫入的日誌文件,可能導致進程繼續往已刪除的文件句柄里寫,空間不會立刻释放。

清理时的几個注意点

清理的目标是释放空間,不是制造新的故障。删之前先確認文件归属、是否被進程占用、是否有备份。
  • 正在被應用寫入的日誌,優先用轮轉和截断,而不是 rm。
  • 缓存目錄可以清理,但要確認應用能自動重建,避免清完頁面變慢。
  • 資料库文件、站点程序文件不要当作“大文件”直接删。
  • 清理後复查 df -h 和 df -i,確認空間确實释放。

把巡检變成习惯

可以给分区設定阈值,比如使用率超過 75% 就發提醒。巡检频率不用太高,每周看一次磁盘和 inode,每月检查一次日誌轮轉和备份清理策略,通常就能避免突然寫满。维護窗口内做清理和調整,也比在流量高峰时临时處理更稳妥。

對蜘蛛池和站点运营来说,服務器能稳定寫入、稳定响應,URL 才能持續被發現和抓取。磁盘和 inode 這種底层問题,平时多看一眼,比事後救火省事得多。