Linux 磁盘满了怎么办:df/du 排查实战

举报
yd_296644751 发表于 2026/11/11 08:14:47 2026/11/11
【摘要】 服务器跑着跑着,某天部署突然失败,日志里写着 “No space left on device”。磁盘满了是运维里最常见也最容易手忙脚乱的问题之一。本文记录一套我常用的排查流程:先定位,再清理,最后防复发,全程只用系统自带工具。 第一步:确认是哪个分区满了先用 df -h 看整体情况。-h 是人类可读格式,重点看 Use% 接近 100% 的那一行。根分区 / 满和 /var 满,处理思路完...

服务器跑着跑着,某天部署突然失败,日志里写着 “No space left on device”。磁盘满了是运维里最常见也最容易手忙脚乱的问题之一。本文记录一套我常用的排查流程:先定位,再清理,最后防复发,全程只用系统自带工具。

第一步:确认是哪个分区满了

先用 df -h 看整体情况。-h 是人类可读格式,重点看 Use% 接近 100% 的那一行。根分区 / 满和 /var 满,处理思路完全不同,所以先分清再动手。

如果看到某个分区 100%,但你刚删了大文件空间却没释放,别急着重启:很可能是某个进程还握着已删除文件的句柄。用 lsof | grep deleted 可以找到它们,重启对应服务或杀掉进程,空间才会真正释放。这是新手最容易踩的坑。

第二步:用 du 逐层往下找

确认分区后,用 du -sh /* 看根目录下一级各自占了多少,再对最大的那个目录继续深入,比如 du -sh /var/*。这样一层层钻下去,几分钟就能定位到罪魁祸首。

嫌一层层敲命令麻烦,可以用 du -h --max-depth=2 /var 2>/dev/null | sort -rh | head -20,直接列出 /var 下占用前 20 的目录。2>/dev/null 是把无权限目录的报错丢掉,输出干净很多。

第三步:常见的大户及处理方法

根据经验,磁盘空间最常被这几类东西吃掉:

日志文件。 /var/log 下的日志如果没配 logrotate,会无限膨胀。先看一眼 ls -lh /var/log,对超大日志可以先用 : > 文件名 截断(比直接删更安全,正在写的进程不会丢句柄),然后检查 logrotate 配置,避免下次再爆。

包管理缓存。 Debian/Ubuntu 用 apt clean 清理下载过的安装包缓存;长期运行的机器上,这一项经常能腾出几个 GB。

Docker 相关。 如果装了 Docker,docker system df 看看镜像、容器和构建缓存各占多少,docker system prune -a 可以回收未使用的部分。注意 -a 会删掉所有未使用的镜像,生产环境操作前先确认。

临时文件和旧内核。 /tmp 下的残留文件可以定期清理;dpkg --list | grep linux-image 看看是不是攒了一堆旧内核,apt autoremove 能顺手清掉。

第四步:清理之后做两件事防复发

第一,给关键目录加监控。最简单的办法是写个定时任务,每天跑一次 df,使用率超过 80% 就发告警。云厂商一般也提供磁盘告警,直接配一个阈值告警更省事。

第二,给日志配好轮转。确认 /etc/logrotate.d/ 里应用的日志都有合理的保留策略,比如保留 7 天、单个文件超过 100MB 就轮转。很多磁盘爆满事故,本质上都是轮转没配好。

小结

磁盘满了不用慌,按 df 定位分区、du 逐层定位目录、针对性清理、最后补监控和轮转这四步走,大部分情况半小时内就能恢复。平时多留意磁盘使用率曲线,比事后救火轻松得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。