15.[文件]文件系统
一,文件是如何在磁盘中进行创建的呢?
首先提出一个概念:什么是inode?
系统会进行分区,分区之后的结构如下图所示:
我们会注意到有inode table的存在,inode table就会对inode进行管理,那么其实一个文件就对应一个inode,inode中存储了文件的所有属性,例如后面的数据块信息(Data Blocks)。并且文件名是唯一的不能重复,这也是因为inode和文件名互为映射关系(互为key值)
现在我们进一步来思考分组还有什么以便继续进行我们的讲解map:
inode table中包含了很多inode编号。
怎么确定inode究竟有没有被分配过呢,这就需要查召inodemap来进行确定。
文件=内容+属性
**inode中存储了文件的所有属性,**那么内容呢?
block bitmap来进行表示哪些数据款被使用了,哪些没有被使用。
所以文件系统整体是怎么被管理的呢?
这就上图红色的来进行管理了
Super Block
用于存放文件系统本身的结构信息,存储了整个文件系统的inode的数量,数据块的数量等
GDT
描述了各个区域的起始位置,以及当前分组的总体状态
Boot Block
用于计算机开机时告知磁盘的分区情况,帮助计算机加载操作系统等。Boot Block
不仅仅是一个分区只有一个,而是整个硬盘中只有一个,放在整个硬盘的第一个分区头部。
总结:
inode Table:存储当前分组所有文件的inode
inode Bitmap:标识当前分组的inode的使用情况
Data Blocks:管理当前分组的数据块
Block Bitmap:标识当前分组的数据块的使用情况
GDT:宏观描述一个分组
Super Block:描述一个分区,文件系统的核心
Boot Block:描述整个硬盘的分区情况,帮助计算机加载操作系统
所以文件创建的步骤是:
-
申请一个空闲的inode,将文件信息(文件类型、所有者、权限、时间戳等)记录在inode属性中
-
寻找空闲的Data Block,将数据块的地址(通常是块号)填入inode中。
-
文件系统将新文件的名字和inode添加到父目录中,作为一个目录项,这个目录项记录了新文件的名字和inode号码(对应起来的)
-
初始化数据块(如清零)
-
更新map
这前面的数字就是inode
二,文件访问和修改
比如说现在通过路径/usr/bin/ls
来访问一个文件,其过程为:
1.先在根目录中找到文件名usr
对应的inode编号
2.访问文件usr
,在文件usr
中找到文件名bin
对应的inode编号
3.访问文件bin
,在文件bin
中找到文件名ls
对应的inode编号
4.访问文件ls
三,软硬链接
软链接
ln -s 源文件/目录 软链接名称
-
在不同文件系统或分区之间创建快捷方式
-
链接到可能会被移动或删除的文件或目录
-
创建指向目录的快捷方式
硬链接
ln -s 源文件/目录 软链接名称
-
为同一个文件创建多个名称
-
提高文件访问效率,因为硬链接直接指向文件数据块
-
备份或归档文件时保留文件的硬链接关系
取消链接操作:
practice1:
practice2: