<p>df -h 是最直接查看系统剩余空间的方式,按挂载点列出已挂载文件系统使用情况,单位自动转为 GiB/MiB,推荐日常使用;df -h / 可专注根分区,df -hT 能同时显示文件系统类型;du -sh * 用于定位占用空间的目录,配合 sort -hr 倒序排列;lsblk 与 df 输出差异源于未挂载分区;Use% 100% 但 Avail 非零通常是 ext 文件系统保留 5% 空间所致,需用 df -i 检查 inode 是否耗尽。</p>

df -h 是最直接的查看方式
想一眼看出系统还剩多少空间,df -h 就够了。它按挂载点列出所有已挂载文件系统的使用情况,单位自动转为 GB/MB,避免手动换算。
常见错误是只输 df 不加参数——输出全是 1K-blocks,数字大得吓人但难判断实际余量;或者输 df -H(用 1000 进制),和磁盘厂商标称容量对不上,容易误判。
-
df -h:推荐日常使用,单位是 1024 进制(KiB/MiB/GiB),和系统内核一致 -
df -h /:只查根分区,避免被 /dev/shm、/run 等虚拟文件系统干扰 -
df -hT:顺带看文件系统类型(如ext4、xfs),某些类型对小文件或大文件有不同空间开销
du -sh * 能定位“谁吃掉了空间”
df 告诉你“哪块盘快满了”,但不会说“为什么”。这时要进对应目录,用 du -sh * 查子目录大小。
注意:du 统计的是文件实际占用的块,不等于 ls -l 看到的文件大小(尤其有稀疏文件、硬链接、ACL 扩展属性时);而且默认不统计隐藏文件(以 . 开头),要加 -a 才能包含它们。
-
du -sh *:当前目录下各项目总大小,按字母序排列 -
du -sh * | sort -hr:按大小倒序,一眼揪出最大目录 -
du -sh .[^.]* *:把隐藏文件和普通文件一起统计(.[^.]*匹配 . 开头但非 .. 的项)
lsblk 和 df 输出不一致?先看挂载关系
有时 lsblk 显示一块 500G 磁盘,df -h 却只看到 400G 可用——不是数据丢了,而是分区没占满整盘,或存在未挂载分区。
lsblk 展示物理设备层级(磁盘→分区→挂载点),df 只显示已挂载的部分。如果某分区没挂载(比如 /dev/sdb1 没 mount),df 就完全看不见它。
-
lsblk -f:带文件系统类型和 LABEL,方便识别哪个分区对应哪个挂载点 -
findmnt /path:查某个路径实际挂在哪块设备上,比肉眼对照更可靠 - 未挂载的分区空间不会计入
df,但会出现在fdisk -l或parted -l里
Use% 100% 但 df 显示 Avail 还有几 MB?别急着删文件
当 Use% 达到 100%,Avail 却非零,大概率是 root 用户保留了 5% 空间(ext 类文件系统默认行为)。普通用户已无法写入,但 root 还能操作。
这不是 bug,是保护机制:防止日志、临时文件等关键进程因空间耗尽而崩溃。强行清空文件可能触发 inode 耗尽或 journal 写失败,反而更危险。
-
tune2fs -l /dev/sdXN | grep "Reserved block count"查保留块数 -
df -i看 inode 是否耗尽——小文件多的场景(如容器镜像、邮件目录)常卡在这里 - 临时释放:用 root 执行
dd if=/dev/zero of=/tmp/junk bs=1M count=100 && sync && rm /tmp/junk触发空间回收(慎用)
真正卡住的往往不是总容量,而是某个挂载点下的子目录膨胀、inode 耗尽、或保留空间策略。盯住 df -h 和 du -sh 的组合输出,比单看一个数字有用得多。


















