下面的方法我基本可以保证,如果df和du显示空间不一致,除了普遍的解决方法外,网络上你根本搜索不到!除非你是linux高手!高手在此我们膜拜!
在分析df和du查到的结果不一样之前,我们先来了解下linux的df和du命令有什么不同。
这个大家可以从网上很直观的搜索到,一艘一大片,我们在这里还是要啰嗦一下,为下面的解决方案做铺垫。
现在我们假定存储空间有10G,而我们准备删除2G的数据,并假定这个文件为1.txt
df命令:通过文件系统快速的获取空间大小的信息,当我们删除一个文件时,这个文件不会立马从linux系统中消失,而是等系统的服务或程序等彻底不用此文件时,才会在系统中彻底被删除。而假如你删除了一个文件,此时的df依旧能统计到它占用存储的大小。
比如我们删除这个1.txt,然后我们的txt程序还正在打开使用这个文件,那么此时,df查到的剩余存储是8G。
du命令:简单的说,du和df一样,只不过是它不统计已经删除了的文件,比如删除1.txt,无论这个文件现在是否被使用,它都认为被删除了,此时运行du命令,查到的就是剩余空间是10G。
区别就是,是否统计到已经被删除的但还在被使用的文件。那么问题来了,如果df和du查到的结果不一样,我们一般会认为,是不是因为服务或者程序正在占用已经删除了的数据,于是网络上给了处理方法,利用如下命令:lsof |grep deleted 就可以查看到已经删除的,但是还没其他服务占用的文件。
图片是借用的网络上的,因为我的根本没有占用,如果你有上图的情况,那么就可以认为,不一样的原因是因为有已经删除的,但是被占用的文件,此时去百度搜索一下原因,比如说kill掉服务(会导致服务出现异常)、重启服务器或服务等,可以去搜一下。
但是问题来了,我的执行了上述命令后,并没有所说的上图的样子,而是如下图:
占用全部是0,我在网络上搜索了众多的资源,都没有说出最终的解决办法,因为大部分人认为,df和du显示空间不一致,都是因为有程序或服务占用造成的,而我的并没有占用,那么就不是这个原因,重启服务器或服务器根本不能解决这个问题。
重点来了!上面文章说过:df可以统计已经删除的但还在被使用的,du不统计已经删除的,那么如果损坏的文件会不会被统计呢?从解决这个问题上来讲,损坏的文件并不是被删除,而是还存在的资源,但是df却已经统计不到了,但du却可以统计到,这个问题真是弄得我心力憔悴,我是怎么发现这些文件已经损坏了呢?当然用du命令查看大文件时发现的。
命令是:du -h --max-depth=1
红框中的就是未被找到,暂时认为已经损坏的文件。
既然上面的方法不能解决,那么只能死马当活马医,看看是不是因为损坏的文件占用存储空间导致的df和du空间不一致的问题。
于是乎,我们利用修复命令修复一下文件系统:
命令如下: fsck -fyv /dev/vdb1
/dev/vdb1 是磁盘,你的可能是别的,请自己查看。如果不能运行,那么还请取消挂载然umount /www,再运行 fsck -fyv /dev/vdb1,如果成功,说明就是这个原因导致的,此时你再次运行df和du已经一样,问题就找到了。成功后还请您再次重新挂载您的硬盘。
假如说,您不能umount 卸载您的硬盘,还请您vi /etc/fstab/ 看看是不是写入了挂载信息!这也是很多人没有告诉你的哈!
以上就是df和du显示空间不一致的解决方案,码了这么多字,还需要支持一下我们泰安人才招聘网www.tarczp.com,感谢您的浏览,以上只是我的解决方案,出了问题本博主概不负责!特此声明!