在织梦后台上传图片时弹出"空间不足"或英文 "Disk quota exceeded"、"No space left on device"。这种报错看似简单(磁盘满了),实际可能是磁盘空间、inodes、配额、临时目录四种不同情况,处理方式各不相同。
一、报错的几种类型
1. "空间不足"(中文提示)
织梦自带的中文提示,通常是 PHP 检测到磁盘剩余空间小于阈值。
2. "Disk quota exceeded"
Linux 用户配额超限,虚拟主机常见。
3. "No space left on device"
磁盘真的满了,或 inodes 用尽。
4. 上传成功但显示失败
实际写入成功但 dede_uploads 表写入失败,提示为空间问题。
二、第一步:检查磁盘空间和 inodes
df -h # 查看磁盘空间使用率 df -i # 查看 inodes 使用率 du -sh /www/wwwroot/域名/* | sort -rh | head -10 # 找出最大目录
如果 Use% 接近 100%,是真满了;如果 IUse% 接近 100%(inodes 满),是文件数太多。
三、常见空间占用大户
1. /uploads/allimg 历史图片
多年的上传图片堆积,单目录可能几十 GB。建议归档老图片到 OSS/对象存储。
2. /data/backupdata 数据库备份
每次后台"备份全部表"都会生成一份 .txt,长期累积惊人。
3. /data/logs 操作日志
dede_log、admin登录日志常年累积。
4. /data/cache 编译缓存
模板缓存、数据缓存未定期清理。
5. /tmp 临时上传目录
PHP 上传临时文件未清理,堆积大量 phpXXXXXX 临时文件。
6. /www/server/nginx/logs access.log
Web 服务器日志未做 logrotate,单文件几十 GB。
四、清理方案
1. 清理备份和日志
cd /www/wwwroot/域名/data rm -f backupdata/*.txt.bak rm -f logs/*.log.* find backupdata -mtime +30 -name "*.txt" -delete find cache -mtime +7 -delete
2. 清理临时文件
find /tmp -name "php*" -mtime +1 -delete rm -f /www/wwwroot/域名/data/uploadtmp/*
3. 清理 Web 服务器日志
cd /www/server/nginx/logs > access.log > error.log # 或宝塔:日志 → 清空
4. 处理 inodes 满
# 找出小文件最多的目录 for i in /*; do echo $i; find $i | wc -l; done # 通常是 session 或 cache 文件过多 rm -f /www/wwwroot/域名/data/sessions/*
5. 设置定时清理任务
# crontab -e 0 3 * * * find /www/wwwroot/域名/data/cache -mtime +7 -delete 0 4 * * * find /tmp -name "php*" -mtime +1 -delete
du -sh 评估空间占用,避免误删用户上传的有用文件。五、配额超限处理
虚拟主机报 "Disk quota exceeded" 但 df -h 显示主机磁盘还有空间,说明是用户配额超限:
quota -u 用户名 # 查看配额 repquota -a # 查看所有用户配额
解决:
1. 联系主机商扩容配额。
2. 删除自己站点内的旧备份、日志、缓存。
3. 把图片迁到对象存储(OSS/COS),主站只放代码。
六、长期优化建议
1. 启用对象存储
把 /uploads 整体迁到阿里云 OSS、腾讯云 COS,主站磁盘只放 PHP 代码和模板,从根本上解决空间问题。
2. 定期归档老图片
每年初把上一年的 /uploads/allimg/YYMMDD/ 打包下载到本地或 OSS,主站只保留近期图片。
3. 设置日志轮转
# /etc/logrotate.d/dedecms
/www/wwwroot/域名/data/logs/*.log {
weekly
rotate 4
compress
missingok
notifempty
}
七、注意事项
1. 清理 /data/backupdata 前先确认是否有最新备份,避免把唯一备份删了。
2. 删除 session 会让所有在线用户掉线,建议凌晨操作。
3. 宝塔的"网站日志"会单独占空间,记得定期清空。
4. 数据库的 binlog 也可能占用巨大空间:mysql -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;"
织梦上传图片提示空间不足,本质是磁盘空间、inodes、用户配额三者中某一项触顶。建议站长每周看一次 df -h 和 df -i,把 /data/backupdata、/data/logs、/uploads/allimg 列入定期清理清单。长期来看,把图片迁到对象存储是终极方案,既释放主站磁盘,又提升访问速度。把"磁盘监控 + 定时清理"做成自动化任务,可以一劳永逸地告别空间不足类报错。