宝塔安装报“磁盘空间不足”大概率是校验逻辑卡在/tmp(常为几百mb的tmpfs)或/www分区(要求≥10gb),而非真实空间不足;应先用df -h和df -t /tmp定位瓶颈,再通过export tmpdir=/root/bt-install临时更换安装路径,或清理日志、迁移/www至新磁盘。

宝塔安装报“磁盘空间不足”,大概率不是真没空间,而是脚本校验逻辑卡在 /tmp 或 /www 分区上——尤其当 /tmp 是内存挂载的 tmpfs(常仅几百 MB)时,df -h 根本不显示它占满,但安装直接失败。
先看清楚到底哪个路径在拖后腿
别急着删日志或挂盘,先确认真实瓶颈位置。宝塔安装前会检查两个关键路径:/www 所在分区(默认要求 ≥10GB)和 /tmp 目录剩余空间。运行:
-
df -h—— 看/、/www、/tmp三处的Use% -
df -T /tmp—— 如果类型是tmpfs,那它就是罪魁祸首 -
ls -ld /tmp—— 确认权限是否为drwxrwxrwt,否则安装脚本写入失败也会误报空间不足
常见假象:根分区还有 20GB,但 /tmp 是 tmpfs 且只剩 12MB,安装就停在“disk space is insufficient”。
临时绕过 /tmp 容量限制
小内存 VPS 上 /tmp 是 tmpfs 几乎是默认配置,硬扩容不现实。更稳妥的做法是换一个有足够空间的临时目录执行安装:
- 创建临时工作目录:
mkdir -p /root/bt-install - 指定新 TMPDIR:
export TMPDIR=/root/bt-install - 再运行安装命令:
bash install.sh
注意:TMPDIR 必须指向一个真实磁盘路径(不能是 tmpfs),且当前用户要有读写权限。这个操作不影响系统其他服务,只改本次安装的临时文件落点。
清理 /var/log 和 systemd journal 日志
长期未轮转的系统日志是隐藏空间杀手,单个 /var/log/secure 或 /var/log/messages 动辄几 GB,但 rm -f 直删无效——进程仍在写,文件句柄未释放,空间不会归还。
- 安全清空(保留文件结构):
truncate -s 0 /var/log/secure - 查 journal 占用:
journalctl --disk-usage,超 500MB 就该处理 - 收缩 journal 总量:
journalctl --vacuum-size=100M(别用rm -rf /var/log/journal) - 宝塔自带日志切割功能默认关闭,进面板 →「网站」→「日志切割」打开并设周期,否则下次还堆
特别注意:/var/log/journal 是 systemd 索引结构,暴力删除会导致后续 journalctl 命令异常,必须用官方 vacuum 命令。
挂载新磁盘到 /www 并软链接(一劳永逸)
如果服务器有闲置数据盘(如 /dev/vdb),把 /www 迁过去是最彻底的解法。宝塔所有功能都适配该路径,迁移后无需修改任何配置。
- 格式化新盘:
mkfs.xfs /dev/vdb1(推荐 xfs,大文件性能好) - 挂载测试:
mkdir /www_new && mount /dev/vdb1 /www_new - 迁移内容:
mv /www/* /www_new/ 2>/dev/null || true(加|| true防止空目录报错) - 建立软链:
umount /www && rm -rf /www && ln -s /www_new /www - 写入自动挂载:
echo "/dev/vdb1 /www_new xfs defaults 0 0" >> /etc/fstab
这步做完,df -h 里 /www 就会显示新盘容量。但要注意:若原 /www 下已有网站或数据库,迁移前务必确认 MySQL 已停止,否则 mv 过程中可能损坏 InnoDB 文件。
真正卡住人的,往往不是找不到大文件,而是删完发现空间没回来——比如 SQLite 数据库(/www/server/panel/data/default.db)删表后不执行 VACUUM,文件体积纹丝不动;又比如 Docker 容器日志藏在 /var/lib/docker/containers/ 下,宝塔“大文件扫描”根本扫不到。这些路径不在常规清理清单里,但恰恰是反复告警的根源。











