Linux中删除文件,磁盘空间未释放问题追踪
在客户使用我们产品后,发现一个问题:在删除了文件后。磁盘空间却没有释放。是有进程在打开这个文件,还是其它情况?我们一起来看看一下两个场景
一. 场景一:进程打开此文件
当一个文件正在被一个进程使用时。用户删除此文件,文件仅仅会从文件夹结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。
我们发现剩余磁盘空间比較少时,回去删除一些大的暂时文件或者log文件。假设删除之后会发现磁盘空间并未降低。那么能够通过“lsof”命令去查看正在使用该文件的进程。然后再重新启动该进程或者服务。
【样例】
如今发现磁盘空间的占用了99%。剩余空间仅仅剩下522M。
SUSE11X64-001:/test # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 29G 27G 522M 99% /
devtmpfs 972M 116K 972M 1% /dev
tmpfs 972M 0 972M 0% /dev/shm
找到一个文件"vmcore"占用了接近900M空间。但这个文件不须要再使用了,于是採用“rm”命令删除此文件,但是删除后,发现磁盘空间并没有真正的降低。
SUSE11X64-001:/test # rm vmcore
SUSE11X64-001:/test # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 29G 27G 522M 99% /
devtmpfs 972M 116K 972M 1% /dev
tmpfs 972M 0 972M 0% /dev/shm
//10.204.16.2/home/splx/iceking 6.3T 1.6T 4.7T 25% /mnt/iceking
也就是说非常有可能有其它进程正在使用这个文件,使用“lsof”命令去查看正在使用该文件的进程。
SUSE11X64-001:/test # lsof | grep vmcore
a.out 2610 root 3r REG 8,2 941331144 1643779 /test/vmcore (deleted)
进程号为2610(进程名为"a.out")的进程,正在使用vmcore文件。也能够看到其后有“deleted”:其表示正在使用的文件被删除,但并没有真正从磁盘上移除。
如今我们删除这个进程,并查看磁盘空间此时占用率减少为95%。剩余空间添加到1.4G。
SUSE11X64-001:/test # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 29G 26G 1.4G 95% /
devtmpfs 972M 116K 972M 1% /dev
tmpfs 972M 0 972M 0% /dev/shm
二. 场景二:内核模块Bug
在文件系统处理文件须要的信息都存放在索引节点(inode)中,假设在删除文件的时候索引节点的引用计数不为0(表示文件正在被使用),则不会在磁盘中真正的删除文件。从而保证正在使用此文件的进程可以正常的处理文件。
首先我们一起来看一下内核中关于文件系统的一些重要数据结构的关联。当一个进程打开一个文件后,便会在内核中创建一个file对象,这个对象主要描写叙述了进程怎样与文件进行交互。file对象中将指向一个dentry结构(文件夹项)。文件夹项中描写叙述了文件夹项名称,父文件夹项信息,子文件夹项信息等。而dentry中的d_inode所指向的inode节点中则包括了实际的文件存储在磁盘上的信息。
当多个进程打开同一个文件时,内核中变会创建对应的file对象,可是他们都公用同一个dentry,仅仅只是每一次打开文件dentry的引用计数d_count加1。
而且对于打开的同一个文件而言,inode也是唯一的。inode的引用计数i_count一般为文件硬链接的数目。
看过一些中文博客,说“同一个文件。每打开一次,则inode中引用计数i_count则加1”。这样的说法通过我的验证结果是错误的。实验结果是:对于同一个文件。每打开一次,则inode中的引用计数不变,但对应的dentry引用计数加1.
这次客户在删除文件后。磁盘空间没有释放,通过"lsof"命令也没有找到正在占用此文件的进程。于是再次怀疑这是因为产品的内核模块早成的。后经分析得到:在上一篇博文《Linux
Kernel模块内存泄露查找 (2)》中解释过因为在产品内核模块中,对dentry引用,并使用完之后并没有对其引用计数减1。从而造成内存泄露。
在这样的情况下。dentry不会被释放。则inode也就一直被引用着,从而也导致了即使删除文件,也不会从磁盘删除。
并且针对以上的问题和分析,假设不能及时给客户修这个问题,那也仅仅能让其又一次启动OS,空暇的磁盘空间才会释放出来。
Linux中删除文件,磁盘空间未释放问题追踪的更多相关文章
- linux 删除文件 磁盘空间未释放
具体情况就是:删除了一个超大文件后,发现磁盘空间没有变化 原因:有进程正在使用这个文件,虽然我们从文件系统的目录结构上解除链接(unlink),然而文件是被 打开的(有一个进程正在使用),那么进程将仍 ...
- Linux解决删除文件后空间没有释放问题_端口占用问题
使用命令 (1) losf | grep deleted 查询所有已经删除但是还未释放空间的进程,找到容量最大的线程,kill -9 pid 然后等待容量释放 (2) netstat -ano | g ...
- 【Linux命令】删除大文件后磁盘空间未释放问题
前言 工作中经常遇到Linux系统磁盘空间不足,但是删除后较大的日志文件后,发现磁盘空间仍没有被释放,有点摸不着头脑,今天博主带大家解决这个问题. 思路 1.工作发现磁盘空间不足: 2.找到占用磁盘空 ...
- LINUX文件删除,但磁盘空间未释放
最近在进行系统压测,由于服务器节点太多,便写了个简单的脚本,在执行过程中发现,日志文件删除后,磁盘空间只释放了一小部分,任有大部分磁盘空间未释放. 使用lsof | grep delete命令,发现已 ...
- Mysql删除数据后磁盘空间未释放的解决办法【转】
转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...
- Linux 删除文件后空间不释放【原创】
删除MySQL备份文件后,查找文件所在目录发现文件已经备删除了,但是空间没有释放,还是83% 解决方法: lsof|grep -i delete 发现进程还在,杀掉进程 kill -9 5377 再次 ...
- linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
- 解决linux删除文件后空间没有释放问题
linux删除文件后沒有释放空间 今天发现一台服务器的home空间满了,于是要清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [ro ...
- Linux 删除文件后空间不释放磁盘空间
在Linux操作系统下,有个没用的文件占用了400G,于是删除掉. [root@yoon log]# rm -rf messages [root@yoon log]# df -hFilesystem ...
随机推荐
- nginx 11个过程
nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读<深入理解nginx:模块开发与架构解析>这本书,这里只做简单介绍: 1. ...
- Hadoop的多节点集群详细启动步骤(3或5节点)
版本1 利用自己写的脚本来启动,见如下博客 hadoop-2.6.0-cdh5.4.5.tar.gz(CDH)的3节点集群搭建 hadoop-2.6.0.tar.gz的集群搭建(3节点) hadoop ...
- Java 开发 2.0: 现实世界中的 Redis
原文地址:http://www.ibm.com/developerworks/cn/java/j-javadev2-22/ 之前,我已在本系列中讨论过 NoSQL 的概念,也介绍了一些与 Java 平 ...
- js获取当前时间年份,处理年月日
js中获得当前时间年份.月份.日期 //获取完整的日期 var date=new Date; var y = date.getFullYear()var m = date.getMonth ...
- Jsp学习总结(1)——JSP九大内置对象和四种属性范围解读
一.四种属性范围 1.1.在JSP中提供了四种属性保存范围 page:在一个页面内保存属性,跳转之后无效 request:在一次服务请求范围内,服务器跳转后依然有效 session:-在一次会话范围内 ...
- Introducing ASLR for FreeBSD
Shawn WebbOliver Pinter10 July 2014http://www.hardenedbsd.org/ [ 1. Introduction ]Security in FreeBS ...
- CS224d lecture 9札记
欢迎转载.转载注明出处: http://blog.csdn.net/neighborhoodguo/article/details/47193885 近期几课的内容不是非常难.还有我的理解能力有所提高 ...
- RvmTranslator6.5 is released
RvmTranslator6.5 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...
- H265(HEVC) nal 单元头介绍及rtp发送中的fu分组发送详解
首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示: 从图中可以看出hHEVC的nal包结构与h264有明显的不 ...
- 5.Maven之(五)Maven仓库
转自:https://blog.csdn.net/oonmyway1234/article/details/82315777 本地仓库 Maven一个很突出的功能就是jar包管理,一旦工程需要依赖哪些 ...