基础I/O -- inode与软链接硬链接

Linux下的文件存储与inode

在这里插入图片描述
Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。

Block Group:

ext2文件系统会根据分区的大小划分为数个Block Group。 下面对block group进行分析。
从左往右:
超级块:存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,等等。
GDT:块组描述符,描述块组属性信息。
块位图:Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
有被占用
inode位图:每个bit表示一个inode是否空闲可用。
inode节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
数据区:存放文件内容

这里我们再来举个例子来看看一个文件是如何被存储在磁盘上的。
1.内核中先存储该文件的属性,先找到一个空闲的inode节点。将属性数据存储下来。
2.根据文件大小找到对应数量的block将文件分为许多块进行存储。
3.存储完数据之后,在inode节点上记录下来block的位置顺序信息。
4.添加文件名到目录,在目录文件中将文件名添加进去,通过文件名与inode的关系使得文件名和目录可以关联起来。

因此我们发现inode其实就是我们磁盘上进行文件存储的一种手段。磁盘中存储的inode记录了该文件的相关属性信息以及存储信息,而文件名存在目录中,两者并不相同,当我们想查看一个文件的时候,首先是通过文件名找到inode 然后i通过node得到这个文件的具体内容。
基于这种思想我们就有了软硬链接的概念。

软链接和硬链接与inode的关系

硬链接与inode

我们知道inode存储的才是一个文件的具体内容, 而文件名只是像一个标签一样在,指向这个inode,当我们是让不同的文件名指向同一个inode节点,这就是我们的硬链接。
一个inode被多少个不同的文件名所指向,那么这个文件的硬链接数就是几。
当我们对一个文件进行删除的时候我们删除的其实是硬链接数目。只有当硬链接数目为0 时候,我们再次对这个文件进行删除,才会在磁盘上彻底的删除掉这个文件。

软链接与inode

在这里插入图片描述
软链接不同与硬链接,软链接是创建了一个全新的文件, 在磁盘中开辟了一个新的inode节点存储当前文件, 但是当前文件指向的是我们所链接的目标文件。于是我们就可以通过我们所创建的软链接文件对目标文件进行访问。
当我们删除该文件的时候,如果硬链接数为0,那么这个文件会被我们在磁盘上删除掉。

猜你喜欢

转载自blog.csdn.net/ifwecande/article/details/106568241