Linux 入门:用 df 和 du 定位磁盘被谁占满

举报
yd_235948304 发表于 2026/11/03 06:17:26 2026/11/03
【摘要】 磁盘突然写满时,服务会开始报 No space left on device,登录都可能变慢。先分清两件事:文件系统还剩多少空间,以及这些空间到底被哪个目录吃掉。df 看的是挂载点总量,du 看的是目录占用,两者配合就能在几分钟内把范围缩到一个目录。先看每个挂载点还剩多少。-h 把字节换成易读单位,-T 带上文件系统类型,避免把 tmpfs 这种内存盘误当成数据盘。df -hT重点看 Use...

磁盘突然写满时,服务会开始报 No space left on device,登录都可能变慢。先分清两件事:文件系统还剩多少空间,以及这些空间到底被哪个目录吃掉。df 看的是挂载点总量,du 看的是目录占用,两者配合就能在几分钟内把范围缩到一个目录。

先看每个挂载点还剩多少。-h 把字节换成易读单位,-T 带上文件系统类型,避免把 tmpfs 这种内存盘误当成数据盘。

df -hT

重点看 Use% 接近 100% 的挂载点,以及 Available 已经是 0 的行。如果根分区满了,再继续往下钻;如果只是数据盘或 /var 满了,就只在那个挂载点里查,不要在整台机器上漫无目的地搜索。

df 的已用空间和 du 加总有时对不上。常见原因有三个:一是还有进程占着已删除的文件,目录里看不见,空间却没释放;二是权限不够,du 跳过了别人的目录;三是把不同挂载点算进了同一个父目录。查已删除但仍被打开的文件可以用:

sudo lsof +L1

输出里体积很大、并且名字带 deleted 的行,就是还没释放的空间。处理方式是重启对应进程,或让进程自己关闭文件句柄,不要直接去删系统目录里看不懂的文件。

确认是哪个挂载点之后,用 du 从该挂载点往下看一层,并且不跨文件系统。-x 避免把别的盘算进来,–max-depth=1 只展开一层,sort 把大的放在最后,方便从底向上读。

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

看到日志目录或容器数据目录特别大,就再对那一层重复同样的命令,一层层缩小范围。日志目录常见的是某个服务把调试日志打满;容器场景则经常是旧镜像和已经退出的容器。清理前先确认业务不再需要这些文件,必要时先把关键日志拷到别的磁盘。

如果 df 显示空间还够,但创建文件仍然失败,就改查 inode。inode 用尽时,系统同样会报空间不足,新手很容易在这里绕圈。

df -ih

IUse% 到 100% 时,多半是某个目录里堆了海量小文件,例如邮件队列、会话文件或缓存碎片。这时 du 看到的体积不一定大,要用 find 统计文件个数,再决定从哪一层下手。

sudo find /var -xdev -type f | wc -l

定位到目录后,优先清理明确可以再生成的缓存和已经轮转完成的旧压缩日志。不要用递归删除去扫系统目录。对还在写入的日志,把文件截断成空文件比直接删除更安全,因为进程仍握着原来的文件描述符,删除只会让空间继续被占住。

sudo truncate -s 0 /var/log/app/app.log

日常可以留一个只读检查习惯:每天看一次 df -hT 里的使用率,超过八成就按上面的步骤再钻一层。命令放进巡检笔记就够用,不必先上监控平台,也能先挡住磁盘半夜写满这类故障。把结论记成“哪个挂载点、哪个目录、哪类文件”,下次同类告警就能直接跳到同一层,而不是从头把整台机器再扫一遍。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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