Linux磁盘空间被未知资源耗尽100%

本文介绍了在Linux系统中,当删除大文件后由于文件句柄未关闭导致磁盘空间无法释放的问题。通过使用lsof命令结合grep deleted,可以找出被占用的已删除文件,从而定位并解决磁盘空间占用100%的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


转自:http://www.cnblogs.com/ggjucheng/archive/2012/10/07/2714300.html


在linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df -lh 和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小。

遇到这种情况,基本可以断定是某些大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被某些程序关闭,造成内核无法回收这些文件占用的空间。

那么,如何查找那些文件被某些程序占用呢,命令如下:

# lsof -n | grep deleted
COMMAND     PID      USER   FD      TYPE             DEVICE        SIZE       NODE NAME
dd        31708      higkoo    1w      REG                8,2 5523705856     429590 /data/filetest (deleted)

命令打lsof -n | grep deleted印出所有针对已删除文件的读写操作,这类操作是无效的,也正是磁盘空间莫名消失的根本原因

备注:本人遇到的场景是同事删除了mysql的表,但是是在shell上执行rm表的文件,而不是通过drop table之类的命令去删除表的,于是mysql会一直占用这些表文件的句柄,最后造成磁盘空间100%,这种情况下,也不用重启mysql,只要进入mysql客户端执行flush tables就行了。


当你在Linux系统中遇到磁盘空间耗尽的问题,但`df`和`du`命令显示的结果不一致时,很可能是因为某些进程仍然持有对已删除文件的句柄。要解决这个问题,首先需要确定哪个进程占用了这些句柄。 参考资源链接:[解决Linux磁盘空间未知进程占用的技巧](https://wenku.youkuaiyun.com/doc/64521371ea0840391e738edd?spm=1055.2569.3001.10343) 使用`lsof`命令是一个有效的解决方案。具体操作如下: 1. 打开终端。 2. 输入命令`lsof -n | grep delete`,它会列出所有打开的已删除文件。 3. 从输出结果中找到对应的进程ID(PID)。 4. 根据PID,你可以选择使用`kill -9 <PID>`来强制结束进程,或者如果是数据库文件,可以执行`FLUSH TABLES`命令来释放句柄占用的空间。 5. 在执行任何操作之前,请确保备份重要数据,并确认这些进程不是系统运行所必需的。 6. 操作完成后,再次使用`df`和`du`命令检查磁盘空间,确认问题是否已经解决。 通过上述步骤,你可以有效地找到和释放那些占用已删除文件句柄的进程所占用的空间,恢复系统的磁盘使用情况。如果需要进一步学习和了解Linux系统中文件句柄和磁盘管理的更多知识,推荐阅读《解决Linux磁盘空间未知进程占用的技巧》一书。该书详细解释了问题背后的原理,并提供了多种实用技巧,帮助你更深入地理解和处理Linux系统中的磁盘空间问题。 参考资源链接:[解决Linux磁盘空间未知进程占用的技巧](https://wenku.youkuaiyun.com/doc/64521371ea0840391e738edd?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值