全网最全linux文件存储原理(文件删除空间不释放排查)

背景:前段时间有业务反馈删除了部分文件后,磁盘空间没有释放。当时也是仓促解决,并没有深入了解linux文件删除过程经历了啥,所以借这次机会梳理下

首先我们现在了解下linux文件存储的原理:

Linux系统上的文件名是存储在父目录的Block里面的,并指向了这个文件的Inode节点,这个文件的Inode节点再标记指向存放这个文件的数据块
在这里插入图片描述
名称解释:
Block: 是指文件系统分配磁盘空间的最小单位。文件系统会将磁盘空间划分为多个block,每个block通常为4KB或更大的固定大小。当需要存储一个新文件或修改现有文件时,文件系统会分配一些连续的block来存储文件数据。

inode: 是指索引节点(index node)的缩写。每个文件和目录都有一个唯一的inode,用于存储与之相关的元数据信息。inode中存储的元数据信息包括:

文件类型:比如普通文件、目录、链接文件等。
文件权限:用于控制对文件的访问权限,包括读、写、执行等。
文件所有者和所属组:记录文件的所有者和所属用户组。
文件大小:记录文件的字节数。
时间戳:记录文件的创建时间、修改时间和访问时间。
文件链接数:记录指向该inode的硬链接数量。
文件数据块的物理地址:指向文件实际数据存储的磁盘块。

通过使用索引节点,文件系统可以减少寻址开销,快速定位和访问文件。

下面了解下文件删除的过程原理:

我们删除一个文件时,实际上并不会清除Inode节点和Block的数据。只是在这个文件的父目录中的Block里,删除这个文件的名字,从而使这个文件名消失,并且无法指向这个文件的Inode节点。当没有文件名指向这个Inode节点的时候,释放Inode节点和存放这个文件数据的Block块会同时进行,并且会更新Inode MAP和Block MAP,以便让这些位置用于放置其他文件数据。

Linux系统是通过Link的数量来控制文件是否被删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。一般来说,每个文件都有2个Link计数器,既i_count和i_nlink。 i_nlink的意义就是硬链接的数量,i_nlink可以理解为磁盘的引用计数器;i_count的意义就是当前文件使用者(例如,被进程调用)的数量,i_count可以理解为内存的引用计数器。当为文件创建硬链接的时候,对应i_nlink的数量就会增加,而当一个文件被某个进程调用时,对应i_count的数量就会增加。

通过rm删除命令删除文件,实际上就是减少文件的磁盘引用计数i_nlink的数量(及硬链接的数量)。如果在执行rm删除命令之前有程序调用了该文件,调用还没有结束;此时执行rm命令后,i_nlink=0(硬链接数为0),但是i_count不为0,因为此时还有程序在调用该文件,该文件会继续占用磁盘空间。只能i_nlink和i_count同时为0时,该文件才是被成功删除。
在这里插入图片描述
总结,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到Inode的链接删除了,此时,并没有删除文件的实体即Block数据块,如果及时停止机器工作,数据还是可以找回的,但如果此时继续写入数据,那么新的数据可能就会被分配到被删除数据的Block数据块了,此时,文件就是被真正地回收了。

看到这里是不是恍然大悟,处理的过程也很简单:如果文件删除无法释放空间,只需要删除文件调用进程即可。如果是生产环境,可以尝试低峰期重启应用。

#该命令的作用是列出所有包含"delete"字符串的打开文件。这些文件可能是被删除但仍然被某个进程占用的文件,也有可能是正在被删除的文件。
lsof |grep delete

# 关闭相应进程
kill -9 [进程id]

本文参考:
https://www.cnblogs.com/yaokaka/p/13731531.html

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值