文件系统的组织方式

这里介绍一下Block Group里的分区内容

  • 超级块(Super Block): 存放文件系统本身的结构信息。记录的信息主要有:bolck(数据块) 和 inode(属性块)的总量,
    未使用blockinode的数量,一个blockinode的大小,最近一次挂载的时间,最近一次写入数据的
    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
    文件系统结构就被破坏了
  • GDT(Group Descriptor Table): 块组描述符,描述块组属性信息。这里不作详细介绍
  • 块位图(Block Bitmap):位图中的比特位记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • inode位图(inode Bitmap):每个比特位表示一个inode是否空闲可用。
  • inode表(inode Table):每一个inode存放了各自文件的属性,如文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

Linux系统中文件的增删查改

Linux中,每一个文件都有自己的inode,而每一个inode有自己的inode编号(按分区为单位)

特别的:尽管inode储存了文件的属性,文件名并不属于inode

理解目录文件

目录也是文件!目录也有自己的inode和数据块

目录的数据块储存了该目录下,文件的文件名和文件inode的映射关系

创建文件的过程

创建文件主要有以下4个操作

  1. 存储属性:内核先找到一个空闲的inode(图中是263467)。内核把文件信息记录其中。
  2. 存储数据:该文件需要存储在三个数据块,内核找到了三个空闲块:300,600,800。然后将内核缓冲区的第一块数据复制到300,下一块复制到600,依次类推
  3. 记录分配情况:文件内容按顺序300,600,800存放。内核在inode上的磁盘分布区记录了上述块列表
  4. 添加文件名到目录:通过写入目录文件,将文件名和inode的建立映射关系(这里是将文件名cab与inode 263467建立联系)

Linux中的硬链接和软链接

Linux文件系统中特别重要*的一点是:文件系统使用inode管理文件,而不是文件名,所以使用inode唯一指定文件。也就是说找到了inode才是真正找到了文件

基于此理论,我们可以更好地理解软链接硬链接

软链接

使用ln -s <原文件名> <软链接文件名>指令可以建立软链接,-s参数就是指定创建软链接文件

例如在已有file.txt的情况下,使用ln -s file.txt soft-link在当前文件夹创建软链接文件soft-link,指向文件file.txt

然后我们输入ls -li查看这两个文件

可以看到软链接文件和原文件的inode是不同的,且两个文件的硬链接数(第二个框框)都是1,说明软链接是一个文件系统意义上的新文件

软链接文件可类比与Windows下的快捷方式

硬链接

使用ln <原文件名> <硬链接文件名>指令可以建立硬链接。

例如在已有file.txt的情况下,使用ln file.txt hard-link在当前文件夹创建软链接文件hard-link,与文件file.txt等价

然后我们输入ls -li查看这”两个”文件

可以看到它们的inode是完全一样的,那么基于上文文件系统对文件的视角,这”两个”文件完全就是同一个文件!,或者说hard-linkfile.txt别名,同时我们也能看到硬链接引用计数变成了2

在引入了硬链接引用计数的概念下,删除目录中的一个文件,只是删除该目录下文件名inode的映射关系,并使该文件的引用计数减去1,当其归零时,才会真正释放磁盘上的文件资源

目录的硬链接数

对于每一个普通目录(除了根目录),至少有父目录下自己的文件名和该目录下的.文件2硬链接,而在其内部创建的每个子目录又会储存一个名为..的硬连接,所以普通目录的硬连接数会>=2

因此为了防止文件系统结构混乱,操作系统不允许用户对目录建立硬链接

删除链接文件

rm不一定能删除链接文件,此时可以用unlink命令