宝塔提示“磁盘空间不足”常因inode耗尽、/tmp占用高或ext4预留5%空间导致,并非真实容量不足;需用df -i查inode、清理/www/wwwlogs和/tmp旧文件、重启服务释放已删除但未关闭的日志文件,必要时临时调低预留空间。

不是磁盘真满了,而是宝塔插件安装器在检查时误判了可用空间——常见于 inode 耗尽、/tmp 占用过高或 /www 目录所在分区被预留空间机制“锁住”了 5%。
查清到底是空间不足还是 inode 不足
宝塔提示“磁盘空间不足”时,df -h 显示还有空间,但插件装不上,大概率是 inode 用完了。ext4 默认每 16KB 分配一个 inode,小文件多(比如日志碎片、缓存、插件解压临时文件)就会快速耗尽 inode。
- 运行
df -i查看各挂载点的Inodes使用率,重点关注/www和/tmp - 如果
Use%接近 100%,哪怕df -h显示还有 20% 空间,mkdir或tar解压都会失败 - 别只盯着
/根分区——宝塔默认把网站和日志放在/www,而它可能单独挂载在另一块盘上
清理 /www/wwwlogs 和 /tmp 下的隐藏垃圾
宝塔日志默认不轮转,/www/wwwlogs 里一堆 xxx.log-2025-06-12 这类旧文件;/tmp 则堆着未清理的插件安装包、PHP 会话临时文件、Docker 构建缓存残留。
- 删过期日志:
find /www/wwwlogs -name "*.log-*" -mtime +30 -delete - 清空 tmp(谨慎):
rm -rf /tmp/* /tmp/.??*(注意不要删/tmp/systemd-private-*这类 systemd 保护目录) - 查大日志文件:
du -sh /www/wwwlogs/* | sort -hr | head -10,手动删掉最大的几个历史压缩包(如nginx_error.log.1.gz) - 宝塔自带的“清理系统日志”功能只清
/www/wwwlogs/*.log,对带日期后缀的归档日志完全没作用
释放被删除但未关闭的大文件占用的空间
你可能刚 rm -f /www/wwwlogs/nginx_access.log,但 Nginx 进程还开着,文件描述符没关,磁盘块实际没释放。此时 df -h 不变,lsof +L1 也看不到(因为已 unlink),得靠 lsof | grep deleted 找。
- 执行
lsof +L1查看已删除但仍有进程打开的文件(部分系统需 root 权限) - 更通用:运行
lsof | grep "deleted" | grep "/www\|/tmp" - 找到对应 PID 后,重启相关服务:
bt restart(宝塔面板)、systemctl restart nginx或service php-fpm restart - 别直接 kill -9,否则可能导致服务异常;优先用宝塔命令或 systemctl reload
绕过 ext4 预留空间限制(仅限紧急情况)
ext4 默认给 root 预留 5% 空间,防止系统写死。但宝塔插件安装走的是普通用户(如 www),它无法使用这 5%。当磁盘使用率到 95% 时,插件就卡住。
- 临时释放:
tune2fs -m 1 /dev/vda1(把预留从 5% 改成 1%,/dev/vda1替换为你/www所在分区) - 查分区:
df -h /www→ 看 “Filesystem” 列,再lsblk对应确认 - 改完不用重启,立即生效;但长期建议扩容或清理,而不是永久调低预留值
- 注意:该操作有风险,生产环境建议先
e2fsck -n /dev/vda1检查文件系统一致性
真正卡住插件安装的,往往不是“总共剩多少 GB”,而是某个目录下 inode 满了、某个大日志被进程锁着、或者 /www 所在分区那 5% 预留空间成了最后一道墙——这些细节在宝塔界面里完全不提示,只能靠命令一层层剥开。











