问题随记---通过rm方式删除文件没有释放磁盘空间

为什么会出现rm文件后不释放磁盘空间呢?

在日常的线上当中,不可避免的遇到一种情况:磁盘空间几乎耗尽,但使用du命令查看磁盘占用情况时,却似乎没有发现占用大量空间的文件。这种情况下,通常是因为删除某个文件后,磁盘空间并未真正释放所致。
然而在Linux 操作系统中,文件可以分为两部分:数据部分和指针部分(inode)。指针部分位于文件系统的元数据(meta-data)中,而实际的文件数据存储在磁盘上。当你执行删除操作(例如使用 rm 命令)时,文件的指针从元数据中删除,但是文件的数据部分并没有立即被删除,它的存储空间会被标记为可用以供后续写入新的内容。这意味着删除文件并不会立即释放磁盘空间,而是将文件标记为可覆盖。

进程与文件之间的交互涉及文件的锁定。当某个进程正在对文件执行操作时,该文件的状态会被锁定,其他进程无法同时对其进行修改或删除。

如果有进程持续向某个文件写入数据,即使执行了删除操作,该文件的指针并不会立即从元数据中删除。内核会认为该文件仍然存在,因为有进程锁定了它。这就导致了磁盘空间没有被释放,即使你删除了文件,直到所有打开的文件描述符关闭并进程释放文件锁定,才会真正释放磁盘空间。

然而对于这样问题怎样解决呢?

首先在删除文件前进行,查看该文件写入的进程有没有停止,另一个就是不要盲目的就和博主一样直接就不管rm掉,rm前先进行停止运行的进程。就算和博主一样粗心大意的rm掉了也没关系可以通过以下措施进行补救:

使用lsof命令查找占用问题文件的进程:在终端中输入以下命令:

lsof | grep delete

该命令会列出正在占用问题文件的进程及其相关信息,包括进程ID(PID)。

终止占用问题文件的进程:

kill -9 <PID>

就可以释放了。

另外推荐一种不删除可以清除数据方式更加人性化

在清理文件时不使用 rm 命令删除文件,而是使用 > 或 /dev/null 来清除文件中的数据,而不删除文件本身。这将允许你释放文件的磁盘空间,同时保留文件的元数据和指针,以避免文件锁定问题。例如:

> filename  # 使用空命令清除文件内容
# 或者
cat /dev/null > filename  # 使用/dev/null清除文件内容 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值