1、若有进程在占用某个文件,而其他进程把这文件删掉,只会删除其在磁盘中的标记,而不会释放其占用的磁盘空间;直到所有访问该文件的进程退出为止;
2、df 是从内核中获取磁盘占用情况数据的,而du是统计当前磁盘文件大小的结果,由于磁盘标记已被删掉,因此du 不会计算上述被删除文件的空间,导致df 与 du的结果不一致。

三、解决问题
通常的解决方法有两个:
1、把占用文件的相关进程关闭
这可通过下面的命令得到这些已被删除,但未释放空间的文件和进程信息:

# lsof |grep deleted

找到这些进程后,在安全的情况下把其关闭,空间自会马上释放。

2、以清空的方式替代删除
归根到底,产生问题的原因是,访问该文件的文件指针(句柄),在rm 动作后,因为进程仍在访问,因此,仍处在文件里面(中间或结尾处)。所以,如果用清空的方式,把文件指针重置,该文件所占用的空间也会马上释放出来。

引用
# echo > /tmp/test.iso
# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda1              12G  5.7G  5.5G  51% /
tmpfs                 506M     0  506M   0% /dev/shm
# tail -f /tmp/test.iso
tail: /tmp/test.iso: file truncated

所以,对于常发生类似问题的文件,如:日志记录文件等。以改名、清空、删除的顺序操作可避免问题。

四、补充
除rm外,有些不明显的操作,也会产生类似的问题。
例如 gzip 命令,其对某个文件xxx.log进行压缩时,会产生一个新的xxx.log.gz文件,完成后,会把原来的xxx.log删除。
这时,若仍有进程在使用xxx.log文件,那么,实际上,该文件还是只会标记为deleted,其空间也不会释放,问题与上面提到的情况是相同的。所以,在编写脚本时,可先判断是否仍有进程正在使用该文件,然后再进行gzip 操作。

五 文件空洞

文件读写时,如果先文件指针偏移很大一段,然后写入1byte;这样这个文件实际占用1byte空间,但是stat查看文件大小,或者读写时,都会发现文件很大;所有没有写内容的都返回0,且不占用空间,这样的文件叫 'sparse file',即文件空洞

容易发生在一个进程在写一个文件,这是人工进行清空文件操作,就会产生。

df and du的更多相关文章

  1. Shell命令_文件系统常用命令df、du

    一.df(文件系统查看命令) [root@localhost ~]# df [选项] [挂载点] 选项: -a 显示所有的文件系统信息,包括特殊文件系统,如 /proc. /sysfs -h 使用习惯 ...

  2. Linux命令:nohup、df、du与/dev/null

    早上开始工作时发现服务器挂掉了,重启TongWeb时有报错: 上面的红框圈错了,第一个红框的下一行: java.io.IOException: No Space left on device 我们用d ...

  3. df、du、fdisk:Linux磁盘管理三板斧的使用心得(转载)

    From:http://os.51cto.com/art/201012/240726_all.htm 作者介绍:李洋(博客),博士毕业于中科院计算所.10多年来一直从事计算机网络信息安全研发工作,曾主 ...

  4. df和du显示的磁盘空间使用情况不一致的原因及处理

    在Linux下查看磁盘空间使用情况,最常使用的就是du和df了.然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊. 1. 如何记忆这两个命令 du-Disk Usage df-Disk Free ...

  5. Linux下查看文件和文件夹大小的df和du命令

        转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...

  6. df 和du 命令统计磁盘空间不准确

    Linux & Unix 中 df 和 du 命令统计磁盘空间数值不一致 经常会使用 df 和 du 分别查看磁盘空闲空间和占用空间,偶尔会发现 df(空闲空间) 会小于磁盘大小减去 du(占 ...

  7. Linux下df与du两个命令的差别?

    Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...

  8. Linux下查看文件或文件夹大小的命令df 、du、ls

    转自:http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的 ...

  9. df、du、fdisk

    [df.du.fdisk] 参考:http://os.51cto.com/art/201012/240726.htm

随机推荐

  1. Struts2开发模式漏洞

    当Struts2中的devMode模式设置为true时,存在严重远程代码执行漏洞.如果WEB服务以最高权限运行时,可远程执行任意命令,包括远程控制服务器. 如果为受影响的版本,建议修改配置文件stru ...

  2. Synchronizing Threads and GUI in Delphi application

    Synchronizing Threads and GUI   See More About delphi multithreading tthread class user interface de ...

  3. linux 下查看cpu信息

    linux 操作系统的位数查看 A. getconf LONG_BIT 如果是32表示是32位 B.  file /sbin/init信息全面一些 root@kali:~/software# file ...

  4. mysql相关攻击代码收集

    1.批处理文件内容 @echo off net user li /add net user li /active:yes net localgroup Administrators li /add 2 ...

  5. linux文件和目錄管理的基本命令命令

    ls命令 作用:顯示目標列表或目錄的內容 語法:ls[選項][目錄或文件] -a:顯示指定目錄下所有子目錄與文件,包括隱藏文件 -l:顯示文件的詳細信息 -d: 顯示目錄 例:ls -dl cd命令 ...

  6. Hadoop学习笔记(1):WordCount程序的实现与总结

    开篇语: 这几天开始学习Hadoop,花费了整整一天终于把伪分布式给搭好了,激动之情无法言表······ 搭好环境之后,按着书本的代码,实现了这个被誉为Hadoop中的HelloWorld的程序--W ...

  7. [Win32]一个调试器的实现(五)调试符号

    一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号. 什么是调试符号 我们知道, ...

  8. 微信JSSDK支付接口-安卓机无法正常调起接口

    今天碰到个问题,是项目调起微信支付接口,苹果机都没有什么问题,但是安卓机的情况就是支付接口出现一下就消失了 试了将error反馈信息弹出来,也就是显示choosewxpay fail 找了半天不知道什 ...

  9. 【Linux】 解决报错: ImportError: libSM.so.6: cannot open shared object file: No such file or directory

    centos7 +  python3.6.4 我使用 pip3 install opencv-python 安装了opencv-python  之后,在使用 import cv2  报错如下 报错原因 ...

  10. openlayers中利用vector实现marker的方式

    项目需要一个小型的gis.openlayers,geoserver,postgres组合是比较好的选择. openlayers的marker层好像不支持拖动操作.通过研究api发现,可以利用vecto ...