马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
磁盘满了第一反应就是敲 df -h,但同样是看磁盘,du 和 df 有时候能差出三十来兆,df 报 145M 而 du -sh 只有 113M——这不是看错了,是两个命令的统计口径根本不同。本文把 df 的参数、字段含义、自定义输出和"两者不一致"的成因一次讲透。
df 是什么
df(disk free)命令用来检查系统磁盘空间利用情况。常见参数:
-h:可读性,显示单元,换算单元 1024 字节。
-H:可读性,显示单元,换算单元 1000 字节。
-k:以 KB 为单元显示磁盘大小。
-m:以 MB 为单元显示磁盘大小。
--total:汇总。
-i:列出 inode 信息而非块使用量。
-T:显示文件系统类型。
-t:检查指定文件系统类型的磁盘利用情况,如 df -t tmpfs。
-x:检查除指定文件系统类型外的磁盘利用情况,即 -t 的反选。
-a:显示所有文件系统。
一、字段表明
不加参数默认显示所有磁盘占用情况,不显示单元。字段从左到右依次是:
- Filesystem:磁盘使用的文件系统
- 1K-blocks:磁盘的总内存,以 1K 为单位(1K=1024 字节)
- Used:已使用的内存
- Available:可用内存
- Use%:磁盘使用百分比
- Mounted on:磁盘文件系统的挂载点
二、显示单元
df -h 以容易阅读的格式显示大小单元,自动转换为 G(千兆字节)、M(兆字节)、K(千字节),也是工作中最常用的一种方式。
df -H 和 df -h 很像,不同的是,-h 每 1024 字节转化为 1KB,-H 每 1000 字节转化为 1KB。也就是 -h 按 2 的进制、-H 按 1000 的十进制,同一块盘显示出来会差那么一点。
df -k 以 K 为单元显示文件大小,但不显示单元,也就是默认的显示格式。df -m 以 M 为单元显示文件大小,同样不显示单元。
三、汇总显示
df --total 可以汇总磁盘的使用情况,在最下方插入一行,显示每一列的总和。
四、指定目录
检查指定目录的挂载点及所在磁盘的使用情况。比如 df -h /root 检查 /root 目录挂载到哪个磁盘及磁盘的使用情况。
五、指定显示字段
自定义结果输出的字段,字段名之间使用逗号分隔。例如只显示文件系统、使用百分比、挂载点这三个字段:
df --output=source,pcent,target
可选择的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file' 和 'target'。
六、du 和 df 结果不一样
du 和 df 命令都可以检查磁盘利用情况,但有些时间两者的查询结果会不一样。比如:
df -h # 显示 /boot 磁盘利用了 145M
du -sh /boot # 进入 /boot 目录后显示只用了 113M
两者不同的原因在统计口径:
- du 基于文件获取数据,可以跨分区。
- df 基于分区的块信息获取数据,只能针对整个分区。
当用户删除文件后,du 将无法获取这些文件的数据。这个时间,如果还有进程持有被删除文件的句柄,文件就不会被真正的删除,分区的块信息就还保存文件信息,df 统计的时候也会算上这个文件的磁盘占用空间。
这种情况不会真的释放空间。lsof 可以检查这种被删除状态的文件,也就是 deleted 状态:
# 进入 /boot 目录
lsof | grep deleted
拿到 PID 之后 kill PID 结束进程或重启对应的服务,就会释放掉被删除文件的句柄。重启服务器也会结束进程,同样能释放掉被删除文件的句柄。
小结
df 用的时候记住这几个组合:df -h 日常看,df -T 想看清是不是 tmpfs 之类的特殊挂载(频繁读写但占空间小),df -h 目录 定位某个目录落在哪块盘,df --total 看全局合计。-h 和 -H 的区别只在进制,别写混。
遇到 df 说满、du 说没满的常见场景:删了大日志 但进程没退(句柄还握着),先 lsof | grep deleted 找 PID,kill 或重启服务就回来了——这比再删一遍文件有效得多。另外 inode 耗尽也会让磁盘"写不进去"但 df -h 看空间还有,排查时 df -i 一起看。
qidao123.com企服评测-应用市场 编辑提示:本文为站点编辑整理的 Linux df 命令详解,命令与参数已按原意规范化书写;文中"-h/-H 进制差异""du 与 df 口径不同"均为可验证的通用行为;本站不提供任何磁盘工具下载或加好友服务。 |