linux已删除占用空间的文件了,为什么磁盘还是显示used 100%?

本文介绍了当Linux系统中磁盘空间显示为100%满时,如何排查和解决问题的具体步骤。通常这种情况是由被程序占用但未正确关闭的大文件引起的。

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

写在前面的话,之前的笔记,转存博客

问题就是:

之前跑jmeter脚本,对服务进行压测时,发现磁盘空间满了,,然后kill掉jmeter进程,删除相关日志文件后,发现磁盘空间还是100%,怎么破?

[root@bjsjs_73_63 bin]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/vgroot-lvroot
                      9.7G  9.6G     0 100% /
/dev/mapper/vgroot-lvvar
                       15G  1.2G   13G   9% /var
/dev/mapper/vgroot-lvusr
                      9.7G  2.7G  6.5G  30% /usr
/dev/sda1             190M   20M  161M  11% /boot
tmpfs                  32G   52K   32G   1% /dev/shm
/dev/mapper/vgroot-lvopt
                       16G  2.2G   14G  14% /opt
/dev/mapper/vgroot-lvted
                      228G  527M  228G   1% /search/ted

问题原因:

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

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

解决:

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

lsof -n | grep deleted
java      12623      root   68w      REG              253,0 4911812608     720990 /search/wj/apache-jmeter-3.1/bin/jmeter.log (deleted)
java      12623      root  336w      REG              253,0 2845872128     721321 /search/wj/apache-jmeter-3.1/bin/log_wj123.jtl (deleted)
java      12623      root  338w      REG              253,0    6172672    2031642 /search/wj/apache-jmeter-3.1/bin/root.log (deleted)
kill -9 12623   即可解决。
[root@bjsjs_73_63 /]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/vgroot-lvroot
                      9.7G  2.5G  6.8G  27% /
/dev/mapper/vgroot-lvvar
                       15G  1.2G   13G   9% /var
/dev/mapper/vgroot-lvusr
                      9.7G  2.7G  6.5G  30% /usr
/dev/sda1             190M   20M  161M  11% /boot
tmpfs                  32G   52K   32G   1% /dev/shm
/dev/mapper/vgroot-lvopt
                       16G  2.2G   14G  14% /opt
/dev/mapper/vgroot-lvted
                      228G  527M  228G   1% /search/ted
<think>好的,用户想查找Linux系统中占用磁盘空间较大的文件,他们提到了df和du命令。首先,我需要回忆这两个命令的作用和区别。根据引用[4],du是查看文件和目录的磁盘使用空间,而df是显示文件系统的整体使用情况。用户的问题是关于大文件的,所以应该主要使用du命令,但可能需要结合df先确定哪个文件系统需要检查。 用户可能需要一个步骤指导,先使用df -h查看整体情况,确定哪个挂载点空间不足,比如根目录/。然后切换到该目录,用du命令找出大文件或目录。例如,sudo du -sh /*会列出根目录下各目录的大小,找到最大的那个目录后,再进入继续深入分析,直到找到具体的大文件。 需要注意权限问题,有些目录可能需要sudo才能访问。另外,用户可能需要不同的参数组合,比如排序或者限制深度。例如,使用--max-depth参数来限制目录层级,或者用sort -hr来排序结果,更易读。 还要考虑示例的准确性,确保命令正确有效。比如du -sh * | sort -hr可以按大小排序当前目录下的文件和目录。用户可能不知道如何组合这些命令,所以给出具体的步骤和示例会很帮助。 另外,可能需要提醒用户注意安全,谨慎删除文件,尤其是系统文件。最后,生成相关问题,比如如何按时间查找文件,或者如何删除文件,这样用户可以有进一步的指导。</think>### Linux系统中查找大文件的步骤说明 #### 步骤1:查看整体磁盘使用情况 使用$df -h$命令快速定位空间不足的分区[^2]: ```bash df -h ``` 输出示例: ``` Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 45G 2.3G 95% / ``` 当发现特定分区(如根目录/)使用率过高时,进入下一步分析 #### 步骤2:定位大文件目录 切换到目标分区后,使用组合命令查看子目录大小: ```bash cd / && sudo du -sh * | sort -hr ``` 参数说明: - $du -sh$:显示目录大小(-s汇总统计,-h易读格式) - $sort -hr$:按人类可读数值倒序排序[^5] #### 步骤3:逐层深入定位 示例发现/var目录占用最大时: ```bash cd /var && sudo du -sh * | sort -hr ``` 重复此过程直到定位具体大文件: ```bash cd /var/log && ls -lhS --time=ctime ``` $ls -lhS$参数组合按文件大小排序显示[^3] #### 进阶技巧 1. **限制搜索深度**:使用$--max-depth=N$参数 ```bash sudo du -h --max-depth=1 / | sort -hr ``` 2. **查找特定类型文件**:结合find命令 ```bash find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null ``` ### 典型应用场景示例 当/opt分区空间告警时: ```bash # 确认分区使用率 df -h /opt # 定位具体目录 sudo du -sh /opt/* | sort -hr # 发现某个软件包异常膨胀 ls -lh /opt/bigdata/logs/error.log.2023 ``` ### 注意事项 1. 需要root权限查看系统目录时,使用$sudo$ 2. 使用$2>/dev/null$过滤无权限访问的目录报错 3. 删除文件前使用$ls -lh$确认文件属性,避免误删系统文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值