df -h和du -sh看到的硬盘使用不相等?
笔者最近做一些DLPNO-CCSD(T)的计算,比较耗硬盘,就对硬盘的空间比较敏感。无意中发现有一块硬盘用df -h命令查看,始终占了比较大的空间。删掉了一些文件后,还是剩余空间不多。但是用du -sh命令看硬盘的使用空间时却没有那么大。具体情况如下图所示:
/scratch分区在df -h命令下显示使用了622G的空间,而用du -sh则显示只用了277G的空间。
在网上找了一下df和du的区别,一个通俗易懂的说法如下(此处直接当一名搬运工):
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。它计算的大小就是当前它认为存在的所有文件大小的累加和。
df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,它比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。当文件系统也确定删除了该文件后,这时候du与df就一致了。
“
版权声明:以上两段文字摘自CSDN博主「wisgood」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/wisgood/java/article/details/17316663
”
有了以上原理分析就清楚了,df可能会统计一些被用户删了,但没有真正消失的文件,因此看到的空间比du看到的使用空间更大。解决方法如下:
1. 用lsof命令列出被程序所打开的文件文件名,并筛选出被删除的文件:
lsof | grep deleted > deleted_file
2. 将文件按从大到小排序:
sort -nr -k 7 deleted_file > deleted_file_sorted
3. 打开deleted_file_sorted文件,从上往下依次找,就可以看到一些被删除但是没有释放的文件,以及占用这些文件的程序。
笔者确实看到了一些被删掉的临时文件,所占空间也很大。不过top之后却看不到相关的进程,因为top看到的是当前用户和系统的一些活跃进程,那些僵尸进程可能就显示不出来了。笔者的解决办法是用top -u zhigang (zhigang为笔者的用户名),仅查看本用户的进程,就可以看到了,然后kill掉进程,文件就被释放了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘
- Android实现简单C/S聊天室应用
- Android仿IOS回弹效果 支持任何控件
- 送你一道字节前端原题(Add sumOf)|文末送红宝书