Linux 新手入门:用 df 和 du 找出磁盘被谁占满了

举报
yd_292135771 发表于 2026/11/07 10:10:27 2026/11/07
【摘要】 服务器用着用着,最常见的一类报错就是磁盘满了:写文件提示 No space left on device,服务起不来,日志也写不进去。遇到这种情况先别急着删东西,第一步是先看清磁盘到底被谁占了,再动手清理。先看整块磁盘还剩多少,用 df -h:df -h-h 是让人读得懂的单位(G、M 而不是字节数)。重点看 Use% 这一列,哪个挂载点接近 100%,问题就在哪里。根目录满了和 /var ...

服务器用着用着,最常见的一类报错就是磁盘满了:写文件提示 No space left on device,服务起不来,日志也写不进去。遇到这种情况先别急着删东西,第一步是先看清磁盘到底被谁占了,再动手清理。

先看整块磁盘还剩多少,用 df -h:

df -h

-h 是让人读得懂的单位(G、M 而不是字节数)。重点看 Use% 这一列,哪个挂载点接近 100%,问题就在哪里。根目录满了和 /var 满了,排查方向完全不一样,所以先定位挂载点,再往下找。

如果根目录 / 满了,用 du -sh /* 看一级目录各占了多少:

du -sh /*

du 是统计目录大小,-s 只汇总不展开子目录,-h 同样是可读单位。这一眼就能看出是 /var 大、/home 大,还是 /tmp 大。找到最大的那一级,再往里钻一层:

du -sh /var/*

这样一层层缩小范围,很快就能定位到具体目录。想一次看到排序后的结果,可以加上排序:

du -h --max-depth=1 /var | sort -hr | head -10

--max-depth=1 只看一层,sort -hr 按大小倒序,head -10 只取前十行。日志目录 /var/log 经常是头号嫌疑对象,某个服务的日志没做轮转,几个月就能长到几十 G。

定位到具体的大文件,可以用 find 按大小找:

find /var/log -type f -size +100M

这条命令找出 /var/log 下大于 100M 的文件。找到之后先确认这个文件归哪个服务,再决定怎么处理。直接删正在被写的文件要小心:文件删了、进程还拿着句柄,磁盘空间并不会立刻释放,服务还可能写出错。更稳妥的做法是先清空内容而不是删除文件:

truncate -s 0 /var/log/xxx.log

truncate -s 0 把文件截断成 0 字节,进程继续往里写也不会报错,空间马上释放。系统自带的 logrotate 会定期做这件事,手动清理只是应急,长期还是要靠轮转配置。

还有两个新手容易忽略的点。第一,df 看到满了、但 du 算出来没那么大,可能是已删除却仍被进程占用的文件,用 lsof | grep deleted 可以查到,重启对应服务就能释放。第二,/tmp 里堆着的临时文件和下载一半的安装包,确认没用就可以直接删,这是最安全的清理对象。

总结一下排查顺序:df -h 定挂载点,du -sh 一层层定位目录,find 找大文件,truncate 安全清空日志。磁盘满了不可怕,可怕的是不看就乱删——先定位、再清理,服务才不会被你顺手删出问题。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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