Linux 查磁盘空间:df、lsblk、du 各看什么

举报
yd_238811036 发表于 2026/10/27 14:05:14 2026/10/27
【摘要】 同样是查磁盘,df、lsblk、findmnt 和 du 回答的问题各不相同。用几组示意输出说明容量、挂载和目录占用的关系,再补看 inode,避免把“有一块盘”误当成“业务有可用空间”。

查 Linux 磁盘时,容易遇到这样的疑问:明明有一块 200G 的盘,为什么业务目录可用空间只有几十 G?df 和 du 的数字为什么又对不上?

先弄清楚每个命令在看什么,再判断要不要清理或者扩容。

下面的路径和输出都是示意,不对应真实机器。执行时,请把 /srv/app 换成已经确认存在的业务目录。这篇只介绍查询,不涉及删除文件、修改挂载或初始化磁盘。

先看业务目录还能用多少空间

关心某个目录能使用多少空间,可以直接把路径交给 df:

df -h /srv/app

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   20G   28G  42% /

这个结果表示,/srv/app 所在的文件系统总量约 50G,可用约 28G。最后一列是 /,说明它当前使用根文件系统的空间。

df 查的是整个文件系统的容量。即使 /srv/app 这个目录里只有几个小文件,显示的也仍然是所在文件系统的用量。

如果文件还没创建,就查它准备写入的、已经存在的父目录。比起只看一遍所有挂载点,这样更容易找准业务实际用的盘。

再看机器上到底接了哪些盘

查看块设备和挂载情况,可以用:

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT

NAME    SIZE FSTYPE MOUNTPOINT
sda      50G
└─sda1   50G ext4   /
sdb     200G

示例里确实有一块 200G 的 sdb,但没有显示挂载点。它接在机器上,不代表这 200G 已经成为业务目录可用的空间。

这里有个很容易误判的地方:FSTYPE 和挂载点为空,不能直接证明盘里没有数据。它还可能涉及权限、识别情况或其他存储层,不能看到空白就按新盘处理。

一些旧系统不支持复数的 MOUNTPOINTS,会报 unknown column。这时可以先换成上面单数的 MOUNTPOINT,不必为了看磁盘去升级系统。两列也有区别:同一文件系统有多个挂载点时,单数列只显示其中一个,复数列可列出多个。

目录叫 data,也要核对它实际落在哪

目录名称不能说明存储位置。叫 /data 的目录,也可能一直在使用系统盘。

不确定时,可以查具体路径:

findmnt -T /srv/app

TARGET SOURCE    FSTYPE OPTIONS
/      /dev/sda1 ext4   rw,relatime

结果说明,示例中的 /srv/app 落在 /dev/sda1,对应的挂载点是 /。后面看容量,就应该围绕这个文件系统判断。

findmnt -T 查的是包含指定路径的文件系统,路径本身不需要是挂载点。如果原本打算让业务使用另一块盘,却查到了系统盘,先核对挂载设计和业务配置,别急着清文件。

确认位置后,再找哪个目录占空间

du 适合查看目录和文件占用。假设已经确认 /srv/app 就是要排查的业务目录:

du -x -h --max-depth=1 /srv/app

4.1G    /srv/app/cache
8.8G    /srv/app/logs
2.3G    /srv/app/uploads
16G     /srv/app

先看哪一项占得多,再缩小到相应子目录继续查。看到日志目录大,也要先了解日志用途和保留要求,不能光凭大小决定处理方式。

这条命令里,-x 表示不跨到其他文件系统,--max-depth=1 控制显示到一层子目录。只显示一层,不代表只扫描一层:为了计算总量,du 仍要遍历里面的文件,文件多时会产生明显 I/O。

所以查业务目录就从业务目录开始,不要一上来扫描整盘。遇到 Permission denied 时,统计也可能不完整。

df 和 du 的数字不必完全一致:前者看文件系统的空间分配,后者统计能遍历到的文件。文件系统元数据、被进程占用的已删除文件、统计权限等,都可能造成差异。

容量不紧张,还可以补看 inode

如果是新文件创建失败,而容量检查没发现问题,可以再看:

df -i /srv/app

Filesystem      Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1      3276800  393216 2883584   12% /

重点看 IFree 和 IUse%。对示例中的 ext4 这类文件系统,大量小文件可能先耗尽可用 inode;只看剩余容量,容易漏掉这一点。这里的示意结果还有余量,没有表示正在发生故障。

排查顺序可以很简单:先确定业务路径,用 df 看容量,用 lsblk 和 findmnt 对上设备与挂载关系,需要定位占用时再运行范围明确的 du。涉及新文件创建失败,补看 inode。

这些检查都正常时,就回到程序的原始报错继续查。写入失败还可能涉及权限、只读挂载、配额等原因,不能因为看到了“磁盘”两个字就直接扩容。

参考资料

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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