linux中du,df查看磁盘空间大小还不一样

马哥Linux运维

共 1634字,需浏览 4分钟

 ·

2022-01-04 19:52

Linux查看磁盘空间一般可以用du,df,但是有些时候两个得到的结果却不一样.

分别用du,df查看根分区的大小

> root# du -k -d 1 /  
628     /run  
41736   /etc  
0       /dev  
6761392 /root  
6905636 /var  
4       /media  
4       /mnt  
206096  /boot  
2247520 /opt  
30812   /home  
0       /proc  
16      /lost+found  
10319996        /usr  
0       /sys  
4       /srv  
168     /tmp  
26514016        /  
> df -k  
Filesystem     1K-blocks     Used Available Use% Mounted on  
devtmpfs         1856388        0   1856388   0% /dev  
tmpfs            1866776        0   1866776   0% /dev/shm  
tmpfs            1866776      628   1866148   1% /run  
tmpfs            1866776        0   1866776   0% /sys/fs/cgroup  
/dev/vda1       41152812 26803328  12445776  69% /  
tmpfs             373356        0    373356   0% /run/user/0  
  • du得到根目录/的大小是26514016KB

  • df得到根目录/的大小是 26803328KB

df 得到的比du得到的大,下面分析一下原因

五种原因

df 命令的全称是Disk Free ,显而易见它是统计磁盘中空闲的空间,也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。

du 命令的全称是 Disk Used ,统计磁盘有已经使用的空间。它是直接统计各文件各目录的大小,而不是从硬盘获得信息的。

  • 用户删除了大量的文件后,du命令就不会在文件系统目录中统计这些文件。如果此时还在运行中的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df命令仍会统计这个被删除的文件。通过lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df命令统计结果不一致。可在opt目录下执行如下命令查看。lsof |grep deleted

  • Linux系统磁盘分区有保留区的概念,会给root或指定用户预留5%或更大的空间,当使用到这块保留区的空间时,fdisk命令的计算将会是负数。ext文件系统(包括ext2、ext3、ext4)都会默认预留5%的磁盘空间,使用root用户维护系统或记录系统关键日志使用。

  • 当用du -sh *命令来统计目录总容量时,如果该路径下包含隐藏文件,是不会包含在统计结果里的。

  • 如果某个正在运行的进程进行io的文件被删除,du不会统计,但因为对应的句柄未释放,文件系统中仍有此句柄,df仍会有对应的统计;

  • 由于数据盘挂载前该路径下就存在文件,挂载后用du无法查询到原路径文件。

文章转载:入门小站
(版权归原作者所有,侵删)


点击下方“阅读原文”查看更多

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报