温故而知新---Linux:df和du查看磁盘大小不一致的问题和解决办法

时间:2024-03-13 08:09:11

今天在公司的服务器清理日志之后,发现了一个奇怪的现象,先上图:
温故而知新---Linux:df和du查看磁盘大小不一致的问题和解决办法
如上图所示:data已经用掉了5.5GB的空间,但是data所有文件夹加起来的空间不超过4.3G。那多占用的空间到哪里去了呢?
后来网上查询了一下原因:
du:是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在
的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
df:通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不
是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已 经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除 的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。
当文件系统也确定删除了该文件后,这时候du与df就一致了。
那怎么才能让文件系统亲爱的小姐姐知道这个文件已经删掉了呢?可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。
温故而知新---Linux:df和du查看磁盘大小不一致的问题和解决办法
文件系统小姐姐被骗得好惨呀,居然这么多!赶快kill掉这些骗子:
解决方法:
1、根据lsof列出的pid直接kill相应进程或者重启对应的服务。示例:
温故而知新---Linux:df和du查看磁盘大小不一致的问题和解决办法
执行之后,再来检查,确认没有deleted状态的文件了,最后确认检查:
温故而知新---Linux:df和du查看磁盘大小不一致的问题和解决办法
注:如果服务器正在运行业务,kill 会导致进程直接终止,可能会影响到业务,请慎重操作。还是不要对小姐姐简单粗暴了,下面 还有一种更加温柔的方式:
2. 重启服务器。(重启大法好)
重启服务器系统会退出现有的进程,开机后重新加载。该过程会释放调用的deleted文件的句柄。