Linux下 文件删除但是空间未被释放 或者 磁盘已满但找不到对应的大文件 的解决方案

前言

linux磁盘空间已满,手动rm -rf 删除了大文件之后,df -h 查看一下发现空间占用还是不变,有时候会想rm -rf 删除只是逻辑删除到回收站一样?其实不然,通常这种情况都是文件被删除,但是还被进程占用,因此删除文件空间未释放

通常的建议是kill 掉对应的进程,但是如果是生成环境,不能轻易kill进程的话,可以通过置空文件的方式来释放空间

通过lsof | grep deleted 找到未能删除掉的文件,确定占用的进程号
通过 ls -l /proc/PID/fd/* | grep 文件名,找到相应文件句柄
清除文件内容 echo > /proc/PID/fd/FD_NUM

此操作不会删除文件,而是将文档内容清空的方法释放空间,文件仍存在

1. 查看当前磁盘占用情况

首先查看磁盘占用,然后创建了一个5GB的文件,然后继续查看磁盘占用,可以看到磁盘可用已经减少了5GB

# 查看磁盘占用
df -h
# 创建1个5000MB的文件
dd if=/dev/zero of=/delete.tmp bs=1000MB count=5

在这里插入图片描述

2. 模拟进程占用

这里使用tail -f 命令对文件进行占用

tail -f /delete.tmp

在这里插入图片描述

3. 执行rm -rf 命令删除文件

下图可以看到,由于文件被占用,执行删除命令成功后仍然没有释放空间

# 查看磁盘占用
df -h
# 删除创建文件
rm -f /delete.tmp

# 查看磁盘占用
df -h

在这里插入图片描述

4. 查看被删除但是未释放空间的文件

通过执行以下命令,可以看到tail 进行占用了delete.tmp文件,文件大小5GB

lsof | grep deleted 

在这里插入图片描述

5. 执行清空文件操作

语法:

# 通过PID查看文件句柄
ll /proc/PID/fd | grep delete.tmp

# 将指定进程下文件句柄的文件置空
echo > /proc/PID/fd/文件句柄

示例:

# 查看pid为17271的文件句柄
ll /proc/17271/fd | grep delete.tmp

# 置空文件
echo > /proc/17271/fd/3

在这里插入图片描述

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐州蔡徐坤

又要到饭了兄弟们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值