是inode耗尽导致数据库写入失败;运行df -i查看IUse%是否超95%,若磁盘空间充足但报“只读”“无法创建表”等错,即为inode不足,需清理PHP session、systemd残留目录及日志文件并重启PHP-FPM。

确认是不是 inode 耗尽导致数据库写入失败
直接运行 df -i,重点看 / 或 /www 分区的 IUse% ——如果达到 95%+,而 df -h 显示磁盘空间还有余量,基本就是 inode 不够了。此时 MySQL 报“只读”“无法创建表”“Can’t create/write to file”等错误,不是权限或磁盘满,而是系统连新 inode 都分不出来了。
快速定位高危小文件目录(尤其是 PHP session 和系统日志)
宝塔环境下最常吃光 inode 的是两类路径:/www/sess(旧版宝塔常用)、/www/server/php/*/var/session(新版默认),以及 /tmp/systemd-private-* 这类 systemd 升级残留目录。它们的特点是:单个文件几 KB,但数量动辄几十万。
用下面命令精准扫出文件数最多的前 10 个目录:
find /www -xdev -type d | while read dir; do echo "$(find "$dir" -maxdepth 1 -type f 2>/dev/null | wc -l) $dir"; done | sort -nr | head -10
重点关注输出中第一列超 10 万的路径,比如:
/www/server/php/74/var/session/tmp/systemd-private-*/www/wwwroot/example.com/runtime/cache
安全清理 session 文件(不中断用户登录态)
不能直接 rm -rf 整个 session 目录,否则所有用户会话立即失效。必须按 PHP 的真实过期时间过滤。
先查配置:php --ini 找到 php.ini 路径,再执行:grep "session.gc_maxlifetime" /www/server/php/74/etc/php.ini。假设值是 1440(24 分钟),那就用 -mmin +24;如果是 86400(24 小时),就用 -mtime +1。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
推荐清理命令(以 24 小时为例):
find /www/server/php/74/var/session -name "sess_*" -type f -mtime +1 -delete
注意:-delete 比 -exec rm -f {} \; 更快更安全;若提示 Argument list too long,说明文件太多,改用 -print0 | xargs -0 rm -f。
顺手清理 systemd 私有临时目录和旧日志
/tmp/systemd-private-* 是宝塔升级后 systemd 服务残留的私有 tmp 目录,里面全是空子目录或零散小文件,占 inode 不占空间,可放心清:
find /tmp -maxdepth 1 -name "systemd-private-*" -type d -empty -delete
若非空,先确认无正在运行的服务依赖它(ps aux | grep systemd),再强制删:
find /tmp -maxdepth 1 -name "systemd-private-*" -type d -exec rm -rf {} +
网站日志、MySQL binlog 虽然主要占磁盘空间,但海量 .log 文件也会推高 inode 使用率,一并清理:
find /www/wwwlogs -name "*.log" -mtime +30 -deletefind /www/server/data -name "mysql-bin.*" -mtime +7 -delete
真正容易被忽略的是:删完文件后,df -i 可能仍显示 100%,因为部分文件正被 PHP-FPM 进程持有(lsof | grep deleted 可查)。这时必须重启对应 PHP 版本服务:systemctl restart php-fpm-74,inode 才会真正释放。

















