磁盘满了怎么清理?先定位大文件再安全删除

磁盘满了先别急着删文件。
正确顺序是:用 df -h 确认哪个分区满,再用 du 逐层找出大目录,最后判断是日志、缓存、临时文件还是“已删除但被进程占用”的空间,确认后再清理或扩容。

先确认是哪个分区满了

登录服务器后执行:

df -h

看 Use% 达到 100% 或接近 100% 的那一行,记下挂载点,常见的是 / 或 /data。
如果根分区满,系统日志、软件安装都可能失败,需要优先处理。

接着看 inode 是否也满了,小文件过多时会出现磁盘有空间但无法创建新文件:

df -i

如果 IUse% 接近 100%,清理方向是删除大量小文件,而不是找大文件。

用 du 逐层找大目录

从根目录开始,按占用从大到小排序:

du -h --max-depth=1 / 2>/dev/null | sort -hr

找到最大的目录后,继续进入该目录重复执行,例如:

du -h --max-depth=1 /var 2>/dev/null | sort -hr

常见的大目录集中在 /var/log、/var/lib/docker、/tmp、网站上传目录和数据库数据目录。
不要看到大目录就直接 rm -rf,先确认它属于哪个服务。

常见占用场景与清理方法

日志文件过大:查看 /var/log 下的大日志,优先用 truncate 清空而不是直接删除正在写入的日志:

truncate -s 0 /var/log/nginx/access.log

如果日志由 journald 管理,可限制保留大小:

journalctl --vacuum-size=200M

Docker 占用空间:先看占用:

docker system df

确认无用的镜像、停止的容器和构建缓存后,再执行 docker system prune。
生产环境不要随意加 -a 删除所有未使用镜像。

已删除文件仍占空间:如果 du 统计的总量远小于 df 显示的已用空间,说明文件被删除但进程仍持有句柄。
用 lsof 查找:

lsof +L1

找到对应进程后,重启该服务即可释放空间,不要直接杀进程,先确认业务影响。

临时文件:/tmp 下的旧文件可按修改时间清理,例如删除 7 天前的普通文件:

find /tmp -type f -mtime +7 -delete

执行前确认没有程序依赖这些临时文件。

避坑与验证

清理前对重要数据做备份,尤其是数据库目录和网站上传目录。
删除操作先用 ls 确认路径,避免通配符误删。
清理后再次执行 df -h,确认 Use% 下降;
如果空间没有变化,回到 lsof +L1 检查是否还有被占用的已删除文件。

对于持续增长的日志,建议配置 logrotate 或日志保留策略,而不是反复手动清理。
如果磁盘长期接近上限,应评估扩容或迁移数据,清理只能解决短期问题。

常见疑问

删了文件为什么空间没释放? 文件可能仍被进程打开,用 lsof +L1 找到进程后重启对应服务。

能不能直接删除 /var/log 下的日志? 正在写入的日志直接删除后,进程仍持有句柄,空间不会立即释放,建议用 truncate 清空。

根分区满了还能操作吗? 可以尝试清理临时文件和旧日志,但部分命令可能因无法写临时文件而失败,优先释放少量空间再继续排查。

分享到:
上一篇
内存占满了怎么办?先别重启,按这四步定位并释放
下一篇
服务器中毒了怎么处理:先隔离取证,再清理加固
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意