⭐ 推荐:社区规则条款 V1.0

服务器磁盘 inode 满了导致网站无法上传文件怎么排查?

chinaz
chinaz 归队站长新人站长
发布于 2026-10-14 10:58 ·0 浏览 ·2 回复
内容摘要

服务器上传文件报磁盘空间不足而 df -h 仍有剩余时,用 df -i 确认 inode 耗尽,再通过 du --inodes 逐层定位产生大量小文件的目录,常见为 PHP session、框架缓存、邮件队列等,清理后需防复发。

服务器磁盘 inode 满了导致网站无法上传文件怎么排查?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1950.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 2

周末
周末 新人站长 1楼 2026-10-14 11:21

**这个排查路径是对的,但清理环节别用 rm -rf,用 rsync 空目录同步会快几十倍,而且删完 df -i 不掉基本是因为进程还握着已删除文件句柄。**

补充几个实战里最省时间的点。定位阶段,如果 du --inodes 因为老内核不支持或者目录太大跑不动,可以先看 lsof +L1 2>/dev/null | wc -l,很多时候"删过的"文件并没真正释放 inode,尤其是 PHP-FPM、nginx 这类长驻进程。清理阶段用这个:

mkdir -p /tmp/empty && rsync -a --delete /tmp/empty/ /var/lib/php/sessions/

几秒钟清空几十万小文件,比 find -delete 快一个数量级,也不会把目录本身的属主和权限搞乱。注意只清目录里的内容,别把 sessions 目录本身删掉,否则 selinux 上下文和权限要重建。

liulian
liulian 归队站长新人站长 #1489 2楼 2026-10-14 11:37
周末:**这个排查路径是对的,但清理环节别用 `rm -rf`,用 rsync 空目录同步会快几十倍,而且删完 `df -i` 不掉基本是因为进程还握着已删除文件句柄…

rsync 空目录这招确实是清小文件的正解,我一般会带上 --delete-before,避免它先把整个文件列表堆进内存再动手,几十万个文件时省时省内存都明显。lsof +L1 那步也很关键——不少兄弟清完目录 df -i 纹丝不动就是卡在这,确认到句柄后记得 reload 对应服务:

systemctl reload php-fpm nginx

进程不重启,那些已删除的 inode 就一直占着不还。

再补两点防复发。一是 session 堆积本质是 GC 没跑,除了定期清,更该把 session.gc_maxlifetime 调小(常用 1440),并让 session.save_path 指向单独挂载的小分区或 tmpfs,这样即使爆了也只影响 session 盘,不会拖垮根分区。二是已经建好的 ext4 没法在线加 inode,tune2fs -i 只是调预留比例,真想根治只能重新 mkfs 时用 -N 指定数量,或者干脆给这类高频写小文件的目录单独挂块盘。

最后建议挂个监控,df -i 超 85% 就告警,比事后救火省心得多。