2-1-文件系统设计

一、磁盘组成:

  • 圆形的碟片: 数据记录位置
  • 机械手臂: 磁头,擦写数据
  • 主轴马达: 转动碟片
  • 分区(早期柱面,现在扇区)
    • 扇区,最小物理存储单位,512B或者4KB
    • 柱面,扇区组成的一个圆
  • 磁盘分区表
    • MBR分区表(第一个扇区最重要,包含主要信息)
      • 主引导记录 446b
      • 分区表 64b
    • GPT

二、文件系统

索引式文件系统

超级区块: 整个文件系统整体信息,包括inode和数据区块的总量,使用量,剩余量
inode:   记录文件属性及数据实际存储的区块编号,一个文件对应一个inode
数据区块: 记录数据的内容,一个inode对应一个或者多个数据区块

FAT

链式存储

 

三、linux ext2文件系统

1、整体结构

Boot Sector: 一个,启动引导程序
区块群组: 多个

2-1-文件系统设计

2、 区块群组中各部分存储数据

2-1-文件系统设计

3、目录树&目录&文件

目录树
1、文件系统挂载时,系统会分配一个固定的inode给根目录 / 
2、所有的目录及文件操作从根目录出发,根据目录层次链接出来一颗目录树 

2-1-文件系统设计

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取出相关信息显示
2-1-文件系统设计
新建目录 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/
2-1-文件系统设计
新建文件 touch /tmp/+
1、从系统挂载点信息中,获取目录 / 的 inode-1 信息
2、从 inode-1 找到目录 tmp/ 的 inode-2 信息
3、从inode对照表中找到一个未使用的 inode-4, 填充inode节点信息
4、将 inode-4 放置到 inode-2 子节点列表(存储到数据区块)中,关联文件名 test_file.txt
2-1-文件系统设计
写数据  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节点区块信息(存储到数据区块)
2-1-文件系统设计
删除文件&目录 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
2-1-文件系统设计
硬链接

2-1-文件系统设计

软链接 

2-1-文件系统设计

 

 

2021-07-10

2-1-文件系统设计

上一篇:再次仿照django中间件的写法 写出初级功能的调用


下一篇:第五讲 String,StringBuffer,StringBuilder