df和du显示的磁盘空间使用情况不一致的原因及处理
来源:互联网 发布:盘古网络为什么总招人 编辑:程序博客网 时间:2024/06/04 05:53
df和du显示的磁盘空间使用情况不一致的原因及处理
在Linux下查看磁盘空间使用情况,最常使用的就是du和df了。然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊。
1. 如何记忆这两个命令
du-Disk Usage
df-Disk Free
2. df 和du 的工作原理
2.1 du的工作原理
2.2 df的工作原理
3 du和df不一致情况模拟
- [root@centos192 testdu]# df -h /dev/sda1
- 文件系统 容量 已用 可用 已用%% 挂载点
- /dev/sda1 49G 776M 45G 2% /var
- [root@centos192 var]# dd if=/dev/zero of=myfile.iso bs=1024k count=1000
- 记录了1000+0 的读入
- 记录了1000+0 的写出
- 1048576000字节(1.0 GB)已复制,24.0954 秒,43.5 MB/秒
- [root@centos192 var]# df -h /dev/sda1
- 文件系统<span style="white-space:pre"> </span> 容量 已用 可用 已用%% 挂载点
- /dev/sda1 49G 1.8G 44G 4% /var
- [root@centos192 var]# du -sh /var/
- 1.6G /var/
- [root@centos192 var]# tail -f myfile.iso &
- [1] 23277
- [root@centos192 var]# rm -f myfile.iso
- [root@centos192 var]# lsof | grep myfile.iso
- tail 23955 root 3r REG 8,1 1048576000 7999 /var/myfile.iso (deleted)
- [root@centos192 var]# du -sh /var/
- 596M /var/
- [root@centos192 var]# df -h /dev/sda1
- 文件系统 容量 已用 可用 已用%% 挂载点
- /dev/sda1 49G 1.8G 44G 4% /var
- [root@centos192 var]# lsof | grep myfile.iso
- [root@centos192 var]#
- [root@centos192 var]# du -sh /var/; df -h /dev/sda1
- 596M /var/
- 文件系统 容量 已用 可用 已用%% 挂载点
- /dev/sda1 49G 776M 45G 2% /var
4 工作中需要注意的地方
# du -s /tmp 返回如下值:
12920 /tmp
而 df /tmp返回如下值:
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/hd3 57344 42208 26% 391 4% /tmp
从上面的值我们可以算出<total from df> - <Free from df> = <used block count>: 57344 - 42208 = 15136. 而15136大于12920。该值差异的存在是由于du与df命令实施上的不同: du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;而df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如i节点,磁盘分布图,间接块,超级块等。这些数据对大多数用
户级的程序来说是不可见的,通常称为Meta Data。
du命令是用户级的程序,它不考虑Meta Data,而df命令则查看文件系统的磁盘分配图并考虑Meta Data。df命令获得真正的文件系统数据,而du命令只查看文件系统的部分情况。例如,一个frag=4096 并且 nbpi=4096的空的大小为4MB的日志文件系统
中Meta Data 的分配情况如下:
1 4k block for the LVM
2 4k super blocks
2 4k blocks for disk maps
2 4k blocks for inode maps
2 4k blocks for .indirect
32 4k blocks for inodes
-------------------------
41 4k blocks for meta data on an empty 4MB file system
对于AIX 4.X 版本:
执行 du /foo返回的结果如下:
8 /foo/lost+found
16 /foo
要使du命令输出的结果与df 命令输出的结果匹配,我们必须要加上Meta Data。首先,将41个4k 的块转换为以512字节为单
位的值:
41 * 8 = 328
328(meta data) + 16(from du) = 344
所以有344个以512字节为单位的块分配给了这个空的文件系统。
而使用 df /foo命令我们可以得到下面的结果:
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/lv01 8192 7848 5% 16 2% /foo
上面的换算方法对于空的文件系统很容易实现,但是对于非空的文件系统,由于Meta Data中文件间接块的大小不定,因此较难实现。所以我们不需要查看du 与 df返回的值的匹配关系,而只需要了解du -s命令返回的值反映了分配给文件及目录的磁盘块数,而df命令则反映了文件系统的实际分配情况。df命令反映的实际情况包含了用户数据(文件及目录)和Meta Data。
另一个表现出du与df命令不同之处的例子如下:
如果用户删除了一个正在运行的应用所打开的某个目录下的文件,则du命令返回的值显示出减去了该文件后的目录的大小。但df命令并不显示减去该文件后的大小。直到该运行的应用关闭了这个打开的文件,df返回的值才显示出减去了该文件后的文件系统的使用情况。
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理
- df和du显示的磁盘空间使用情况不一致的原因及处理(文件删除后磁盘空间不释放)
- df du 统计磁盘空间不一致的解决方法
- df和du磁盘空间不一致
- Linux,du、df统计的硬盘使用情况不一致问题
- Linux,du、df统计的硬盘使用情况不一致问题
- df和du显示的统计信息不一致
- df和du的区别以及磁盘空间使用问题
- df和du的区别以及磁盘空间使用问题
- du、df统计的硬盘使用情况不一致的情况解析
- Linux查看磁盘的使用情况命令: df 和 du
- centos 6.5 查看df -ah 和 du -sh 空间不一致的情况问题分析
- df与dh显示的磁盘空间结果不一致
- java中的移位运算符:<<,>>,>>>总结
- 乱七八糟
- js计算出来的文件md5值跟java计算出来的不一致
- 【算法】李国杰院士:AI创业光靠算法走不远,警惕命运魔咒
- MFC 静态文本框使用/更改button背景色/不使能button/设置标题/不显示控件/窗口最大最小化
- df和du显示的磁盘空间使用情况不一致的原因及处理
- mybatis配置优化
- JS基础学习第四天:条件控制语句、循环语句、函数模块、事件等通用代码块
- CentOS7.4升级OpenSSH7.6p1
- Galois开始写的三个前端页面记录
- 【资料合集】2017云栖大会·广东分会回顾合集:PDF下载
- JavaScript深入系列15篇正式完结!
- easyui combobox组合框使用简介(一)
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件