织梦上传图片提示空间不足

在织梦后台上传图片时弹出"空间不足"或英文 "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;"

风险提醒:磁盘满到 100% 时 MySQL 可能崩溃,建议设置 90% 告警,提前清理。

织梦上传图片提示空间不足,本质是磁盘空间、inodes、用户配额三者中某一项触顶。建议站长每周看一次 df -hdf -i,把 /data/backupdata/data/logs/uploads/allimg 列入定期清理清单。长期来看,把图片迁到对象存储是终极方案,既释放主站磁盘,又提升访问速度。把"磁盘监控 + 定时清理"做成自动化任务,可以一劳永逸地告别空间不足类报错。