宝塔面板报“No space left on device”但磁盘空间充足,实为inode耗尽;可通过df -i确认,重点清理/www/server/php//var/session、/www/wwwroot//runtime/cache等小文件密集目录,并配置自动清理策略根治。

为什么宝塔面板突然报“No space left on device”却显示磁盘还有大量剩余?
这是典型的 inode 耗尽现象,不是磁盘空间(block)满了,而是文件系统能创建的文件数量上限(inode)用光了。宝塔默认会把 PHP 会话、Nginx 缓存、网站临时文件等写入 /www/server/php/、/www/wwwroot/*/runtime、/tmp 等目录,长期未清理海量小文件(尤其是 session 和 cache)极易触发该问题。
验证方式:运行 df -i,重点看 Use% 列——若接近或达到 100%,而 df -h 显示空间充足,即可确认。
- 不要直接删
/tmp全部内容,部分进程正在使用的临时文件会被误删导致服务异常 - PHP-FPM 进程依赖
session.save_path下的文件,强制清空可能造成用户登录态批量失效 - 宝塔后台日志、数据库备份临时文件也常堆积在
/www/backup子目录,需单独检查
快速定位 inode 占用最高的目录
用 find + du 组合精准定位“小文件黑洞”,避免盲目扫描全盘:
find /www -xdev -type d | while read dir; do echo "$(find "$dir" -maxdepth 1 -type f | wc -l) $dir"; done 2>/dev/null | sort -nr | head -20
重点关注输出中文件数(第一列)超 10 万的路径,常见高危目标:
-
/www/server/php/74/var/session(PHP 7.4 的默认 session 目录) -
/www/wwwroot/example.com/runtime/cache(ThinkPHP/Laravel 类框架缓存) -
/www/server/nginx/proxy_cache(Nginx 反向代理缓存,尤其开启 proxy_cache_path 后) -
/tmp/systemd-private-*(systemd 临时目录,宝塔升级后残留)
安全清理 PHP 会话与缓存文件(不中断服务)
不能直接 rm -rf 整个 session 目录,要按生命周期过滤过期文件。PHP 默认 session.gc_maxlifetime=1440(24 分钟),但实际配置以 php.ini 中 session.gc_maxlifetime 为准:
- 先查真实值:
php --ini找到配置文件,再grep "session.gc_maxlifetime" /www/server/php/74/etc/php.ini - 清理命令(以 1440 秒为例):
find /www/server/php/74/var/session -name "sess_*" -mmin +24 -delete - 缓存目录建议用
-mtime +7(7 天前)替代-mmin,避免误删刚生成的模板缓存 - 清理前务必确认 PHP-FPM 正在运行:
systemctl status php-fpm-74,否则session.save_path可能被写死到内存临时路径,清理无效
永久规避:调整宝塔相关服务的自动清理策略
手动清理只是救火,关键要让系统自己定期归档或限制增长:
- 修改 Nginx 缓存配置:在
/www/server/nginx/conf/nginx.conf的proxy_cache_path行末加inactive=1d max_size=512m,限制缓存存活时间与总大小 - PHP 会话改用 Redis:编辑
/www/server/php/74/etc/php.ini,将session.save_handler = files改为redis,并配置session.save_path = "127.0.0.1:6379"(需先安装 redis 扩展) - 宝塔计划任务添加定时清理:
0 3 * * * find /www/wwwroot/*/runtime/cache -type f -mtime +3 -delete 2>/dev/null(每天 3 点删 3 天前缓存) - 禁用不必要的宝塔插件日志:如“防火墙”插件的详细访问日志,默认每秒写入,极易撑爆 inode
inode 不像磁盘空间有直观告警,它一旦耗尽,连 touch 新文件、apt update、甚至宝塔后台登录都会失败。最易被忽略的是多个 PHP 版本共用同一磁盘分区时,/www/server/php/*/var/session 全部叠加计算——清理必须覆盖所有启用的 PHP 版本目录。

















