先运行 df -i 确认 IUse% 超 95% 且磁盘空间充足,再用 php -i | grep session.save_path 查路径,最后 find /www/sess -type f | wc -l 统计文件数,若达几十万即为 session 文件占满 inode。

宝塔面板报“磁盘Inode已耗尽”,八成是 /www/sess 或 /tmp 下堆积了海量 PHP session 文件,直接删就能快速释放 inode。
怎么确认是 session 文件撑爆了 inode
宝塔本身不显示具体哪个目录占满 inode,得手动查。先看整体情况:
- 运行
df -i,若/或/www分区的IUse%达到 95%+,且df -h显示磁盘空间还有余量,基本锁定是小文件问题 - 重点检查 PHP 默认 session 路径:
php -i | grep session.save_path,常见输出是/tmp或/www/sess - 快速统计该路径下文件数:
find /www/sess -type f | wc -l(若返回几十万甚至百万,就是它)
批量清理 session 文件但不伤业务
session 文件名通常形如 sess_abc123...,不能用 rm *——参数过长会报 Argument list too long。必须流式处理:
- 安全预览(先看匹配哪些):
find /www/sess -name "sess_*" -type f | head -20 - 只删 7 天前的(保留近期活跃会话):
find /www/sess -name "sess_*" -type f -mtime +7 -delete - 全删(确定无长期登录需求):
find /www/sess -name "sess_*" -type f -print0 | xargs -0 rm -f - 如果路径是
/tmp,且你确认没其他服务依赖临时文件,可加-maxdepth 1避免误入子目录:find /tmp -maxdepth 1 -name "sess_*" -type f -delete
为什么删完可能还不见效
删了文件,df -i 的 IUse% 没降?常见三个原因:
- 文件正被 PHP-FPM 进程占用:用
lsof +L1或lsof | grep deleted查“已删除但未释放”的句柄,重启php-fpm服务才能真正归还 inode - 宝塔面板自己卡在 inode 检查逻辑里:它在
/www/server/panel/class/panelSite.py和public.py里硬编码了 inode 阈值判断(如f_favail < 2),即使你清完了,面板仍可能因缓存或检查失败持续报错 - 有其他目录也在疯长:比如
/var/spool/postfix/maildrop(cron 邮件堆积)、/www/wwwlogs(未轮转的网站日志)、/tmp/systemd-private-xxx(systemd 临时目录)——建议顺手跑一遍du --inodes -s /var/* /tmp /www/* 2>/dev/null | sort -n
真正棘手的不是删文件,而是删完后业务是否还能拿回 session 数据、PHP-FPM 是否会因重启丢失连接、以及宝塔下次启动时会不会又因 inode 检查逻辑反复报错——这些细节比命令本身更影响恢复速度。

















