宝塔报“磁盘已满”但 df -h 显示空间充足,大概率是 inode 耗尽或缓存未刷新;先运行 df -h 和 df -i 对比,若 iuse% ≥95% 而空间使用率低,则聚焦 /www/sess 或 /tmp 下大量 php session 小文件,用 find 统计并清理过期文件,再检查 lsof | grep deleted 是否存在被占用的已删文件,必要时重启 php-fpm。

df -h 显示空间充足但宝塔面板报“磁盘已满”
这八成不是磁盘空间真满了,而是 inode 耗尽或面板缓存未刷新。宝塔首页的磁盘使用率来自系统缓存快照,不主动识别新挂载点、bind 挂载,甚至在旧版 XFS 上存在统计异常——你扩容了硬盘,它可能还卡在 99%。先别信面板数字,直接运行 df -h 和 df -i 对比:如果 df -h 显示 / 或 /www 使用率才 30%,但 df -i 的 IUse% 达到 95%+,问题就锁定在小文件堆积。
确认是 /www/sess 或 /tmp 下 PHP session 文件占满 inode
宝塔本身不显示哪个目录吃掉了 inode,得手动查。常见高危路径就是 /www/sess 和 /tmp,session 文件名形如 sess_abc123,单个几 KB,但几十万份就能把 inode 耗光。
- 先用
php -i | grep session.save_path确认实际存储路径(可能是/www/sess,也可能是/tmp) - 再运行
find /www/sess -type f | wc -l统计文件数;若输出超 10 万,基本坐实 - 安全预览前 20 个:
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
清理后 inode 还不释放?检查被进程占用的“已删除文件”
Linux 删除文件只是解除硬链接,如果还有进程正打开它,inode 就不会真正归还。PHP-FPM 就常干这事:session 文件被删了,但 worker 进程还持有着句柄,状态显示为 deleted。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 查这类“幽灵文件”:
lsof | grep deleted或更精准的lsof +L1 - 若发现大量
php-fpm进程在占用已删的sess_*,必须重启服务:systemctl restart php-fpm - 注意:重启 php-fpm 会导致当前 PHP 请求中断,建议选低峰期操作
- XFS 文件系统还可能存在延迟回收,等下次挂载或运行
xfs_repair才彻底释放——这不是 bug,是设计如此
日志文件过大导致磁盘空间真实告急
如果 df -i 正常但 df -h 真爆了,重点盯 /www/wwwlogs/、/var/log/ 和 systemd journal。Nginx/Apache 日志、宝塔自身日志、systemd 日志都可能几个月不清理,单个几百 MB 很常见。
- 清空所有网站日志内容(保留文件结构):
cat /dev/null > /www/wwwlogs/*.log - 删 7 天前的压缩归档:
find /www/wwwlogs/ -name "*.log.*.gz" -mtime +7 -delete - 收缩 systemd 日志至 100MB:
journalctl --vacuum-size=100M - 避免误删关键日志:别直接
rm -rf /var/log,先用du -sh /var/log/* 2>/dev/null | sort -hr定位最大项
真正卡住人的从来不是命令怎么写,而是删完 session 后用户登录态是否丢失、php-fpm 重启会不会引发连接池雪崩、以及宝塔下次自动巡检时是否又因 inode 检查逻辑反复弹窗——这些依赖关系和恢复节奏,比 find 参数重要得多。










