云主机磁盘快满时,用 df 和 du 先定位再清理

举报
yd_51737554 发表于 2026/11/01 09:34:47 2026/11/01
【摘要】 登录云主机,第一眼看到的告警经常是磁盘使用率。很多人下一步就去删日志,删完发现使用率几乎没动,因为大头根本不在 /var/log。df 和 du 是两把尺子:df 看每个挂载点还剩多少,du 看某个目录下面谁占得最多。顺序反了,就会在错误的盘上忙活。 先看挂载点,不要只看根分区执行:df -hT-h 把字节换成 G、M,T 带上文件系统类型。输出里每一行是一个挂载点。关注两列:Size 和 ...

登录云主机,第一眼看到的告警经常是磁盘使用率。很多人下一步就去删日志,删完发现使用率几乎没动,因为大头根本不在 /var/log。df 和 du 是两把尺子:df 看每个挂载点还剩多少,du 看某个目录下面谁占得最多。顺序反了,就会在错误的盘上忙活。

先看挂载点,不要只看根分区

执行:

df -hT

-h 把字节换成 G、M,T 带上文件系统类型。输出里每一行是一个挂载点。关注两列:Size 和 Use%。云主机上常见的情况是根分区 / 已经 90% 以上,而数据盘 /data 还很空,或者正好相反。先确认告警打在哪一块盘上,再进入对应的挂载点。

有一行 tmpfs 或 overlay 占用看起来很高,多半是内存盘或容器层,不要把它当成要清理的业务盘。只对真实的 ext4、xfs 挂载点做下一步。

再用 du 从挂载点往下拆

进入告警所在的目录,例如根分区:

sudo du -xh --max-depth=1 / | sort -h

-x 不跨文件系统,避免把另一块盘的数字算进来。–max-depth=1 只列一层,sort -h 按大小排序。输出最后一行通常是总计,倒数第二行就是当前最大的子目录。

假设 /var 最大,就再执行一次:

sudo du -xh --max-depth=1 /var | sort -h

这样一层一层往下走,比在满屏数字里肉眼找大户更稳。常见的大头有:/var/log 里没有轮转的日志,/var/lib/docker 里没清理的镜像和容器层,/tmp 里残留的安装包,以及。某个用户家目录下的数据集。

看文件而不是只看目录

目录收到一层之后,再找出具体文件:

sudo find /var/log -type f -size +100M -printf '%s %p\n' | sort -n

-size +100M 只列出超过 100MB 的文件。先列出,再决定删不删。正在被进程写着的日志,直接 rm 之后空间不一定马上回来,因为进程还握着已经删除的文件描述符。这种情况要先让服务重新打开日志,或者用 truncate 把文件截成空文件,而不是在服务还在写的时候把文件删掉就以为空间回来了。

清理前的三条界线

第一,不删看不懂的目录。/var/lib 下面有数据库和包管理器的数据,只因为数字大就删,服务会起不来。

第二,docker 目录大,优先用 docker system df 看镜像、容器、卷各占多少,再用 docker image prune 清理悬空镜像。不要直接 rm -rf /var/lib/docker,那会把还在跑的容器一起毁掉。

第三,df 和 du 对不上时,先想是不是有文件已经删除但仍被占用。可以执行:

sudo lsof +L1

它列出链接数为 0、仍被进程打开的文件。确认进程后,重启对应服务,空间才会还给文件系统。

小结

磁盘告警的处理顺序是:df -hT 确认是哪一块盘,du -xh --max-depth=1 一层层找出目录,find 找出超大文件,最后再按目录的用途清理。先定位、再动手,比对着根目录一顿删除更安全,也更快。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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