删除文件后,磁盘空间没有释放的处理记录

问题说明:

IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),于是在跟有关同事确认后rm -f果断删除该文件。但是发现删除该文件后,/分区的磁盘空间压根没有释放出来,使用率还是100%!这是为什么呢??

[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       58G  7.8G   47G  100% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/vda1             190M   72M  108M  40% /boot

原因分析:

在Linux或者Unix系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),也就是说只是删除了文件和系统目录结构的链接;如果文件在删除时是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程将仍然可以读取该文件,也就是说没有删除掉文件在读取的状态,所以磁盘空间也就会一直被占用。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除文件后,空间还没释放,就是因为有进程还在一直向这个文件写入内容,导致虽然删除了文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

解决措施有以下几种:

1)通过lsof|grep deleted命令获取到已经被删除但是仍然被应用程序占用的文件列表,然后kill掉还在占用所删除文件的进程。需要注意的是:如果有很多进程都在使用所删除文件,那么采用第1种方式kill进程就有点麻烦了,而且风险也比较大。因为kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。必须要确定不会对运行中的进程造成影响时才能使用,应用程序对这种方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题。

2)或停掉或重启使用这个所删除文件的应用,让OS自动回收磁盘空间。

3)也可以重启操作系统,不过这并不是最好的方法

4)对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件。通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志。 在线清空文件(比如/home/wangshibo.log)的方式:

a)# echo " " > /home/wangshibo.log
b)# cat /dev/null > /home/wangshibo.log
c)# > /home/wangshibo.log

还有一种磁盘空间使用问题的现象:明明使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满:“no space left on device”! 这个参考:由索引节点(inode)爆满引发的问题

转自:https://cloud.tencent.com/developer/article/1027207

原文地址:https://www.cnblogs.com/guanbin-529/p/12101309.html

时间: 2024-11-08 00:34:20

删除文件后,磁盘空间没有释放的处理记录的相关文章

rm -rf 删除文件后磁盘空间不释放

当一个服务器的磁盘空间满了后,执行rm -rf命令以后,磁盘空间没有被释放可以使用lsof | grep delete命令来查看删除进程,然后kill掉相关的进程以后就可以释放空间了 原文地址:http://blog.51cto.com/11742478/2091817

linux删除文件后磁盘空间未释放的问题

很可能是该文件还被其它进程使用. 使用: lsof | grep deleted | grep $FILE_NAME 可以看到正使用该文件的进程,将之kill即可.也可以查看进程来验证: ls -l /proc/3446  

Linux中删除文件,磁盘空间未释放问题追踪

在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的

关于mysql 删除数据后物理空间未释放

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化.这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 .OPTIMIZE TABLE

关于mysql 删除数据后物理空间未释放(转载)

转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908911.html OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . B

liunx删除文件后磁盘未减小

一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的进程,然后再重启该进程或者服务. [例子] 现在发现磁盘空间的占用了99%,剩余空间只剩下522M. [plain] view plain

LINUX删除文件,但空间不释放

1.问题描述: rm  /tmp/access_log 通过rm删除大文件之后,查看磁盘结果显示磁盘占用依然是100%,空间并没有被释放. 2.解决思路 一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构. 一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部

mysql优化, 删除数据后物理空间未释放(转载)

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化.这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 .OPTIMIZE TABLE

mac 系统磁盘大小不正确!删除文件,磁盘空间不变。

在安装或则使用非app库中得软件时,可能会发现磁盘的空间不会随着文件的删除而改变.不知道mac下磁盘是如何管理的,但是mac下有磁盘工具来管理,首先打开 launchpad 找到->其他->磁盘工具,打开 点击验证磁盘.当然也可以都验证一遍.他会给出以下提示. 2014-08-28 14:08:59 +0800: “磁盘工具”已停止验证“LS”: 这个磁盘需要使用 Recovery HD 来修复.请重新启动电脑,同时按住 Command 键和 R 键,直到看到 Apple 标志出现后才放开按键