站点运营

站点运营:磁盘空间与 inode 自查,别让日志把服务器塞满

磁盘写满通常没有明显征兆,却能同时让数据库写入、session 保存和文件上传一起失灵。这篇文章整理一套磁盘与 inode 自查思路:两个必看的指标、常见的空间大户、合理的排查顺序,以及日志轮转与清理时容易踩的坑。

站点运营

站点运营:磁盘空间与 inode 自查,别让日志把服务器塞满

站点打不开,第一反应往往是程序、数据库或网络,但有一类故障经常被忽略:服务器磁盘写满了。它不会给你漂亮的报错页面,常见表现是数据库拒绝写入、session 无法保存、日志写不进去、上传失败,甚至远程登录都变得困难。更麻烦的是,很多站点在磁盘涨到 100% 之前毫无征兆。

磁盘满之前,先看两个指标

容量和 inode 是两件事。容量被占满说明文件太大,inode 被占满说明文件太多。一个目录里堆了几十万个几 KB 的小文件,容量看起来还很空,但系统已经无法创建新文件。

  • df -h:看各分区已用百分比,重点盯根分区和存放数据的挂载点。
  • df -i:看 inode 使用率,缓存目录、session 目录、邮件队列容易先在这里爆掉。
  • du -sh 逐层往下钻,定位到底是哪一个目录在膨胀。

养成先看这两个数的习惯,比出故障后再逐个目录翻要快得多。

常见的空间大户

  • 应用日志、访问日志、错误日志,尤其是不做轮转的日志。
  • 备份文件:本地留一份、异地留一份,结果本地那份忘了清。
  • 缓存与临时文件:模板缓存、图片缩略图、上传中转目录。
  • 会话文件:长期没人清理的 session 目录,几十万个小文件很常见。
  • 旧版本发布包:每次发版留一个目录,一年下来就是几十 GB。
  • 数据库的 binlog、慢查询日志、临时表文件。

排查顺序建议

  1. 先用 df 确认是容量问题还是文件数量问题。
  2. 用 du 从根目录逐层定位到具体目录,不要一上来就全盘搜索大文件。
  3. 确认这些文件里哪些可以删、哪些必须保留。
  4. 清理前记录当前数值,清完再对比,确认释放量符合预期。
  5. 最后回到源头,补上轮转、保留策略或清理定时任务。

日志是最容易失控的一块

多数站点的磁盘是被日志吃掉的。日志的价值在于能回查问题,所以不建议直接关掉,而是要有轮转和保留期。

  • 按天或按大小切分,单个文件不要长到一 GB 以上。
  • 保留 7 到 30 天,视业务和合规要求而定。
  • 轮转后压缩,压缩比通常很可观。
  • 错误日志和访问日志分开,访问日志可以只保留必要字段。
  • 定期确认轮转真的在执行,而不是配置文件写好了却从未生效。
清理生产环境的文件之前,先确认没有进程正在写入,也不要随手删掉仍被进程引用的日志文件。已经删除但仍有句柄存在的文件不会释放空间,df 看起来毫无变化,这种情况需要重启对应进程才能回收。

清理时的几个注意点

  • 备份文件按策略删除,确认异地副本可用再删本地。
  • 不要直接删正在使用的 session 或缓存目录,先看程序是否支持优雅清理。
  • 大文件删除后空间没释放,用 lsof 检查是否还有进程持有句柄。
  • 让磁盘长期维持在 80% 以下,给日志暴涨和临时文件留出缓冲。

把盯守变成日常动作

  • 给容量和 inode 使用率配上阈值提醒,80% 提示,90% 升级处理。
  • 每周固定时间看一眼增长曲线,比每天临时救火轻松。
  • 把清理脚本和轮转策略写进运维文档,换人接手时不至于断档。
  • 扩容不是唯一答案,先确认没有可以回收的部分。

磁盘和 inode 属于那种平时没人注意、出问题时最要命的资源。把它纳入常规自查,配合日志轮转和保留策略,能省下不少半夜被叫醒的时间。