前言
本文将会向你介绍文件系统与软硬链接
文章重点
本文将会先向你介绍文件是如何在磁盘上进行管理的,关于文件的管理将会从管理属性和管理内容两方面来谈,最后会向你介绍软硬链接的概念
文件在磁盘中的管理
首先,假设一个磁盘200GB,我们首要做的事情就是对它进行区域划分,方便管理(类似于国家治理,我们也需要划分为 一个个省来进行管理)
我们通常说的电脑上的CDEF盘,实际上在物理上只有一个盘,为了便于用户使用才分为了CDEF盘
假设:那么我们将200GB分为两个组,一个组BLOCK group100GB
Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了
GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下
块位图(Blockitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。 i节点表:存放文件属性如文件大小,所有者,最近修改时间等 数据区:存放文件内容
关于此图中的Super Block,Group Descriptor table,block Bitmap,inode Bitmap inode Table Data blocks后续都会介绍,管理一个块组,也就是管理好这些信息
接着我们再将100GB分为2GB一个组,那么管理200GB的磁盘,我们只需要管理好这2GB就行了,毕竟管理方法是可以借鉴的
这也体现了分治(大事化小)的思想
那么问题来了:如何管理这2GB一个组呢?
那么我们就需要将这些信息管理好
管理属性
引入inode编号
第一列数字叫做文件的inode编号,一般情况,一个文件只有一个inode编号,每个文件都要有inode编号,并且在整个分区具有唯一性
inode块包含文件的属性(如文件大小,所有者,最近修改时间等),可抽象为一个结构体A(注意和inode编号区别,inode块是一个属性的集合)
struct inode { 大小,权限,拥有者,所属组,ACM时间 inode编号 int ref_count //引用计数 后续会介绍 int block[N] //后续会介绍 }
每一个inode结构体有一个inode编号,并且inode结构体的大小固定,这样一来,inode就很好被定位
inode_Table是一个元素为一个个inode块的数组,每一个组block group都会有一个起始组的inode编号,用当前文件inode编号减去起始组的inode编号就可以得到在inode_Table表中的下标
这样一来属性就很好地被一个抽象数组管理起来了
管理内容
DATA block数据区:
每一个数据块是文件的所有内容数据,大小固定(4KB的数据块) 定位:每一个块都应该有块号的概念(编号,偏移量)
这个块号存在inode块中,比如一个文件的inode块中存储的int block[1,2,4]
那么该文件所有的数据内容存储在块号为1,2,4的数据区Data Block中
结论:只要知道inode编号(起始编号),就能根据inode定位是哪一个组区间(根据起始组inode编号),就能根据inode
Table查询inode块(属性),得知了inode块就知道了block[N],就可以定位DataBlock拿到文件的数据内容
可是怎么知道哪一个inode块没被使用,哪一个数据块datablock没被使用?
就需要根据块位图(Block_Bitmap)与 inode位图(inode_Bitmap) 块位图(Block_Bitmap):Block Bitmap中记录着Data
Block中哪个数据块已经被占用,哪个数据块没有被占用。比特位的位置表示块block编号,比特位的内容(0/1)表示是否被使用
inode位图(inode_Bitmap):每个bit表示一个inode是否空闲可用。比特位的位置表示inode编号,比特位的内容(0/1)表示是否被使用
软硬链接
软连接
可以观察到软连接形成了一个新inode,这说明文件经软链接后会形成了一个新的独立文件
连接的作用:快速定位文件
当安装的程序路径很深的时候,有了链接文件,就可以在桌面上放置快捷方式
另外地未来在公司中做项目,并不是把裸的exe可执行程序暴露出来交付,可能会把所有的项目(日志、配置文件等等)以目录的形式进行交付
这样一来,如果一个可执行程序或者配置文件隐藏的路径比较深,如果我们直接想要在外部访问它,那么可以用软连接快速定位这个文件
硬链接
软连接是一个独立的文件,硬链接不是,因为它没有独立的inode编号,本质上就是指在文件系统中创建一个文件的副本,这个副本与原始文件共享相同的inode。硬链接可以让一个文件拥有多个文件名,但它们实际上指向同一个数据块。当原始文件或者硬链接文件中的任何一个被修改时,修改会立即反映到所有的硬链接文件上
观察一个现象
为什么新创建的目录默认引用计数(硬链接数)为2呢?
.表示当前目录,. .表示上级目录
那是因为任何一个空目录都会隐藏两个文件,在dir下,.与inode也是一组文件名映射关系,以.为命名的文件也是dir1文件的副本,观察到它们的inode相同,.和dir1文件名(目录也可看作文件,linux下一切皆文件)都与inode有着映射关系,有两组映射,因此硬链接数为2
小结
今日的分享就到这里啦,如果本文存在疏漏或错误的地方还请您能够指出