du与df查看已使用空间不一致的原因及解决办法

本文探讨了Linux系统中使用df和du命令查看磁盘空间时出现的差异,并解释了两种命令的工作原理。同时提供了硬盘保留空间设置及已删除文件占用空间的检查与释放方法。

在linux系统上有时发现使用df 查看磁盘已使用空间和使用du统计的不相等,例如:

[running]root@slave11:/$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             9.9G  4.0G  5.4G  43% /

/dev/sda3              20G  1.4G   18G   8% /usr/local

/dev/sda4             244G  215G   17G  93% /data

tmpfs                  32G   52K   32G   1% /dev/shm

/dev/sdb1             9.9G  151M  9.2G   2% /data1

 

[running]root@slave11:/data$ du -sh

182G    .

 

从这里面可以看出通过du看到使用了182G,但是通过df 看,/data目录已使用215G,这是什么原因呢?

 

先讲du和df原理

 

du的工作原理

du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。

 

df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

 

 

原因有两个:

1、硬盘本来有保留空间,可以通过tune2fs -r 40000 /dev/sda4进行设置

 

2、已经被删掉的文件还有程序在占用,所以文件没被真正释放

 

针对第二种原因,可以通过如下步骤验证查看及释放空间

 

1、lsof |grep deleted > deleted_file查看有哪些未被释放的文件

 

2、排序看最大的未被释放的文件大小,命令:sort -nr -k 7 deleted_file>sort_deleted_file

 

3、more sort_deleted_file 查看前面那些文件,将占用空间大的程序kill掉

kill 进程号

 

注:lsof以root执行才能查全,lsof使用说明:

http://daizj.iteye.com/blog/2295148

 

 

 

 

 

在Linux中,`df`命令用于显示文件系统的磁盘使用情况,它汇总了所有挂载点的信息,包括系统分区、文件系统总大小、已使用空间以及可用的空间比例。如果你看到`df`报告某个分区的使用率接近90%,但是通过`du`(递归地统计目录下文件的大小)单独检查该分区下的具体内容时无法找到大量占用空间的文件,这可能是由于以下几个原因: 1. **隐藏的大文件**:`du`默认会跟踪系统文件,如日志文件、索引文件等。如果大型文件系统包含许多这样的系统文件,它们可能会占据大部分类似未被察觉的空间。 2. **目录结构**:大量的小文件分散在很多个目录下,`du`可能因为单次扫描文件数量限制而错过某些细节。你可以尝试加上`-h`选项查看更友好的人类可读格式,或者使用`du -s *`查找总和大的目录。 3. **间接映射**:对于像EXT4或XFS这样的高级文件系统,文件系统会利用间接块和元数据存储空间,这可能导致实际占用空间大于物理文件大小。 4. **交换分区**:有时候,虚拟内存交换空间也被计入`df`的总使用量,即使这部分是直接由用户文件占用的。 如果你怀疑有误报,可以试试下面的操作来寻找潜在的大文件: ```sh # 查看当前目录及其子目录的总大小 du -sh . # 如果需要找出最大的几个文件或目录 du -hsx * | sort -hr | head -n 5 # 或者查找特定类型的文件,例如.log文件 find . -type f -name "*.log" -exec du -sh {} \; | sort -rh ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值