2-1-文件系统:存储设计
一、磁盘组成:
- 圆形的碟片: 数据记录位置
- 机械手臂: 磁头,擦写数据
- 主轴马达: 转动碟片
- 分区(早期柱面,现在扇区)
- 扇区,最小物理存储单位,512B或者4KB
- 柱面,扇区组成的一个圆
- 磁盘分区表
- MBR分区表(第一个扇区最重要,包含主要信息)
- 主引导记录 446b
- 分区表 64b
- GPT
- MBR分区表(第一个扇区最重要,包含主要信息)
二、文件系统
索引式文件系统
超级区块: 整个文件系统整体信息,包括inode和数据区块的总量,使用量,剩余量
inode: 记录文件属性及数据实际存储的区块编号,一个文件对应一个inode
数据区块: 记录数据的内容,一个inode对应一个或者多个数据区块
FAT
链式存储
三、linux ext2文件系统
1、整体结构
Boot Sector: 一个,启动引导程序
区块群组: 多个
2、 区块群组中各部分存储数据
3、目录树&目录&文件
目录树
1、文件系统挂载时,系统会分配一个固定的inode给根目录 / 2、所有的目录及文件操作从根目录出发,根据目录层次链接出来一颗目录树
1、上图中,蓝色圈中标识目录,红色标识文件,橘黄色标识数块 2、每一个目录与文件对对应唯一的inode节点
3、目录inode:
存储当前目录下所有目录及文件的inode 编号
存储当前inode,即 ./ 目录
存储父节点inode,即 ../ 目录
4、常用操作
查看目录&文件 ls /tmp/
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息 2、从 inode-1 找到目录 tmp/ 的 inode-2 信息 3、从 inode-2 中取出所有子节点的文件及目录名 4、遍历子节点显示名称,并从子节点inode取出相关信息显示
新建目录 mkdir /tmp/test_dir
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息
2、从 inode-1 找到目录 tmp/ 的 inode-2 信息
3、从inode对照表中找到一个未使用的 inode-3, 填充inode节点信息
4、将 inode-3 放置到 inode-2 子节点列表(存储到数据区块)中,关联目录名 test_dir/
新建文件 touch /tmp/+
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息 2、从 inode-1 找到目录 tmp/ 的 inode-2 信息 3、从inode对照表中找到一个未使用的 inode-4, 填充inode节点信息 4、将 inode-4 放置到 inode-2 子节点列表(存储到数据区块)中,关联文件名 test_file.txt
写数据 echo 'this is a test.' >> /tmp/test_file.txt
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息 2、从 inode-1 找到目录 tmp/ 的 inode-2 信息 3、从 inode-1 找到文件 test_file.txt 的 inode-4 信息 3、根据数据大小,从区块对照表中找到未使用的数据区块,并写入数据 4、将数据区块编号写入 inode-4节点区块信息(存储到数据区块)
删除文件&目录 rm -r /tmp/test_dir/
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息 2、从 inode-1 找到目录 tmp/ 的 inode-2 信息 3、从 inode-2 找到目录 test_dir/ 的 inode-3 信息 4、从 inode-2 子节点列表中,删除目录名 test_dir/及节点 inode-3
硬链接
软链接
2021-07-10