站点运营

站点运营:磁盘空间与 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 这种底层问题,平时多看一眼,比事后救火省事得多。