Linux 磁盘满了别慌:用 du 和 df 一步步定位大文件

举报
yd_272823509 发表于 2026/10/26 09:47:57 2026/10/26
【摘要】 服务器上最常见的半夜报警之一就是磁盘满了:服务写不进日志、数据库拒绝写入、上传失败。别一上来就到处删文件,先花两分钟定位,再动手清理,顺序对了才不会误删。 第一步:先看整体,df 告诉你满的是哪块盘df -h看 Use% 最高的那一行,再看它挂载在哪个目录(/、/var、/data 各自独立的话,清理目标完全不同)。还有一个容易被忽略的指标:df -i这是 inode 使用率。小文件特别多时...

服务器上最常见的半夜报警之一就是磁盘满了:服务写不进日志、数据库拒绝写入、上传失败。别一上来就到处删文件,先花两分钟定位,再动手清理,顺序对了才不会误删。

第一步:先看整体,df 告诉你满的是哪块盘

df -h

看 Use% 最高的那一行,再看它挂载在哪个目录(/、/var、/data 各自独立的话,清理目标完全不同)。还有一个容易被忽略的指标:

df -i

这是 inode 使用率。小文件特别多时,磁盘空间明明还剩不少,inode 先用完了,照样写不进新文件。这时删大文件没用,得清掉成堆的小文件(比如过期的会话文件、缓存碎片)。

第二步:用 du 逐层往下钻

du -sh /*
du -h --max-depth=1 /var | sort -h

du -sh 看一级目录各占多少,sort -h 按人类可读的大小排好序,最大的自然沉到底部。再对最大的那个目录重复一次,两三层就能锁定到具体目录。两个小提醒:加 -x 可以不跨文件系统,避免把挂载进来的另一块盘也算进来;在 /proc、/sys 这类虚拟目录里钻没有意义,它们不占真实磁盘。

第三步:先查这几处常见大户

  • 日志:/var/log 是重灾区。先看 journalctl --disk-usage,再决定要不要用 journalctl --vacuum-size=500M 收紧。正在被写着的日志不要直接 rm,用 : > 文件名 或 truncate 清空更稳,删了文件、进程还攥着句柄的话空间也不会释放。
  • 已删但未释放的文件:df 显示满、du 却算不出那么大,八成是它。用 lsof | grep deleted 找出来,重启对应进程或让它重新打开文件,空间才会真正回来。
  • 临时与缓存:/tmp 里的旧文件、包管理器的缓存、容器镜像层,都值得看一眼。容器环境别上来就 docker system prune -a,它会连没在跑的镜像一起清,生产机上先确认再动手。

清理的三条原则

  1. 先定位、后删除:不知道是什么文件之前不删,尤其不碰数据库目录和系统目录。
  2. 删前留一手:不确定的先移到别处放一天,确认服务正常再彻底删,比直接删多一道保险。
  3. 清完要复查:再跑一次 df -h,确认使用率真的降下来了;如果是日志失控长出来的,顺手把日志轮转(logrotate)配好,否则下周还会满。

小结

磁盘满的处理就四步:df -h 看哪块盘满、df -i 排除 inode 满、du 逐层定位、针对日志、已删未释放文件和缓存这几类大户清理。按这个顺序走,既快又不容易误删,比凭感觉删文件稳得多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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