[Linux]文件系统

本文详细探讨了Linux文件系统的内在机制,包括inode的结构与作用,i节点表和数据区的组织,以及硬链接和软链接的工作原理。重点强调了文件系统中inode的重要性,以及如何通过inode管理文件和目录的关系。
摘要由CSDN通过智能技术生成

1.理解文件系统

  • Linux磁盘文件特性:内容加属性,内容大小是不确定的,但是属性大小是一定的,并且内容和属性是分开存储的。文件属性是用一个结构体来定义的,在Linux中,该结构体是固定128字节大小如下代码:
struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    ...
}
  • 而Linux中一个文件块是4KB,那么一块就可以存储4*1024/128=32个该结构体。其中,值得注意的是文件名是不属于文件属性的。
  • 系统中,表示一个文件,用的不直接是文件名,而是inode,用命令ls -i就可以查看文件的inode

2.刨析文件分组中的各个组成

在这里插入图片描述

  • i节点表(inode Table):存放文件属性 如 文件大小,所有者,最近修改时间等。假设我们这个group0大小是10GB,我们要在这10GB的大小的空间内存放一万个文件,也就说说有一万个inode,那么10000*128/4/1024=312。这意味着有312个block就能存储一万个inode。所以如果有一万个文件,那么这312个block包含的一万个inode组成的表就是inode Table

  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。比特位的位置代表:第几个inode;比特位的内容:表示该inode是否正在被使用。

  • 数据区:存放文件内容,里面有很多4kb的区域用来存放文件内容
    在这里插入图片描述

  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。比特位的位置代表第几个数据block,比特位的内容代表该block是否正在被使用。

struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    int block[15];
    ...
}
  • inode结构体中还有个成员变量是block的数组,这个数组里面的内容存放的是该文件存放block块的下标。其中存放15个元素,即[0, 14],其中[0, 11]就是存放该文件正常被使用的数据块的下标,[12, 13]不直接存放数据块下标,里面的内容指向的是数据块编号,即间接索引,14中存放的内容是指向12.13这样的索引数据块,即三级索引块。

  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息

  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。描述整个分区
    在这里插入图片描述

  • 格式化的本质就是向指定的分区写入全新的文件系统。上面说的文件系统叫Ext*(2)

3.详谈文件名和文件的增删查改

  • 首先,明确一个概念,目录是一个文件,那么目录肯定也是有内容+属性,其中目录的内容是很多对文件名和inode编号的映射关系。
  • 对于一个文件的增删查改,都和这个文件所处的目录有关系,查找一个文件,在内核中,都要逆向地递归般得到/,然后从根目录进行路径解析。
  • 一个被写入文件系统的分区,要被Linux使用,必须先将这个分区进行挂载,mount命令。
  • 一个文件系统所对应的分区,挂在对应的目录中。分区的访问,都是通过所挂在的路径访问的,所以访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下。

4.软硬链接

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 由上面的现象可以看出来,硬链接本质不是一个独立的文件,而软链接有自己的inode,是一个独立的文件。

  • 在这里插入图片描述

  • 硬链接肯定没有新建文件,而是新建了一个文件名,和目标文件的inode编号形成了映射关系,写入到指定目录的数据块中。前面的2代表的是硬链接数(也就是下图的引用计数),而删了test.c后,硬链接数就等于1了。所以,我们所说的删除文件,其中就是删除目录文件中的映射关系,当文件的inode中的引用计数为0时,才会把inode位图和block位图中对应文件的比特位置零,也就是删除磁盘中的文件。

  • 在这里插入图片描述

4.1软硬链接的原理
  • 硬链接的本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让inode的引用计数++
  • 软链接的本质就是一个独立文件,软链接内容里面放的是目标文件的路径,类似于windows下的快捷方式。(额外小知识:linux系统中删除的指令除了rm,还有unlink指令)
  • 在这里插入图片描述
  • linux中可以给目录创建软链接,但是不可以给目录创建硬链接。这样可以避免环路问题,避免陷入死递归。除非系统自己建立硬链接,例如.和…
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值