1. 理解硬件
- 机械磁盘是计算机中唯一的一个机械设备
- 扇区:每个磁道被切分成很多扇形区域;磁盘存储数据的基本单位,512字节,块设备
- 磁头:每个盘片一般有上下两面,分别对应一个磁头,共两个磁头
- 磁道:从盘片外圈往内圈编号0,1...,靠近主轴的同心圆;用于停靠磁头,不存储数据
- 柱面:磁道构成柱面,数量上等于磁道个数
- 圆盘数:盘片的数量
- CHS地址定位
- 先确定磁头(header)
- 再确定柱面(磁道)(cylinder)
- 定位扇区(sector)
- LBA地址
- 把磁道展开就是一个数组,每个下标对应一块扇区;多个磁道就构成了一个二维数组;多个柱面就形成了三位数组
- LBA = 柱面号C * 单个柱面的扇区总数 +磁头号H*每磁道扇区数 + 扇区号S -1;
- LBA转CHS
- 柱⾯号C=LBA//(磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】
- 磁头号H=(LBA%(磁头数*每磁道扇区数))【每磁道扇区数】
- 扇区号S=(LBA%每磁道扇区数)+1【扇区号从1开始,在LBA中是从0开始】
2. 引入文件系统
2.1 引入"块"的概念
- 操作系统读取硬盘数据的时候,一次读取一个"块"
- "块"是文件存取的最小单位
- 8个扇区组成一个"块",通常为 4KB
2.2 引入"分区"的概念
- 柱面是分区的最小单位
- 柱面大小一致,扇区个位一直
2.3 引入"inode"概念

-
每行包括7列
- 模式,硬连接数,文件所有者,组,大小,最后修改时间,文件名

- 模式,硬连接数,文件所有者,组,大小,最后修改时间,文件名
-
每个文件都有对应的inode,里面包含了与该文件相关的一些信息
-
Linux下文件的存储时属性和内容分离存储的
-
Linux下,保存文件属性的集合叫inode
-
一个文件对应一个inode,inode内有唯一的标识符名叫作inode号
-
文件名不会作为属性,保存在inode中
-
inode的大小一般是128字节或者256字节,后面统一为128字节
-
任何文件的内容大小可以不同,但是属性大小一定是相同的
-
三个时间
- Access 最后访问时间
- Modify 文件内容最后修改时间
- Change 属性最后修改时间
3. ext2 文件系统

3.1 Block Group
- ext2 系统会根据分区的大小划分为多个Block Group,每个 Block Group 都有着相同的结构组成
3.2 块组内部构成
3.2.1 超级块(Super Block)
- Super Block存放文件系统本身的结构信息,描述整个分区的文件系统信息
- 不是所有分组都要包含 Super Block,只有个别对应分组需要,而且 Super Block里面的内容是完全一样的
- 每个块的第一个块组必须有,后面的块组可以没有
3.2.2 GDT
- 块组描述符表,描述块组属性信息,整个分区有多少个块组就对应多少个块组描述符
- 每个块组描述符存储一个块组的描述信息
- 这个块组是从哪里开始是 inode Table
- 从哪里开始时 Data Blocks
- 空闲的 inode 和 数据块 还有多少个等等
- 块描述符在每个块组的开头都有一份拷贝
3.2.3 块位图(Block Bitmap)
- 记录 Data Block 中哪个数据块已经被占用,哪个数据块没有被占用
3.2.4 inode位图(Inode Bitmap)
- 每个 bit 表示一个 inode 是否空闲可用
3.2.5 i节点表(Inode Table)
- 存放文件属性,文件名不会作为属性保存在 inode 中
- inode 编号以分区为单位,整体划分,不可划分区
3.2.6 Data Block
- 存数据时以 4KB 为单位存
- Block 号按照分区划分,不可跨分区
3.2.7 inode和datablock映射
- inode 内部可以和datablock可以进行映射

3.2.8 总结
- 分区之后的格式化操作,就是对分区进行分组,在每个分组中写入 SB、GDT、Block Bitmap、Inode Bitmap等管理信息,这些管理信息,统称为文件系统
- 只要知道文件的 inode 号,既能在指定分区中确定是哪一个分组,进而在哪一个分组确定 inode
- 拿到inode 文件属性和内容就全部都有了
3.3 目录和文件名
- 目录也是文件
- 内容保存的是:目录下文件名和inode的映射关系
- 访问文件,必须打开当前目录,根据文件名,获得对应的 inode 号,然后进行文件访问
- 访问文件必须知道文件所在目录 -》 必须能打开对应目录文件,查看文件内容
3.4 路径解析
- ==从根目录开始,依次打开每一个目录,根据目录名,依次访问每个目录下指定的目录,直到访问到 test.c,==这个过程叫做Linux路径解析
- 根目录固定文件名,固定inode号,无需查找,系统开机后就必须知道
3.5 路径缓存
- linux 会缓存历史路径结构
- 打开的文件是目录的话, 由 OS 自己在内存进行路径维护
- Linux中,在内核中维护树状路径结构的内核结构体叫做:struct dentry
- 每个文件都有对应的 dentry 结构,包括普通文件
- 整个树形节点同时会隶属于LRU(最近最少使用),进行节点淘汰
- 整个属性节点也同时会隶属于 Hash,方便快速查找
3.6 挂载分区
- 分区写入文件系统,无法直接使用,需要和指定目录关联,进行挂载才能使用
- 可以根据访问文件的"路径前缀",准确判断我在哪一个分区
4. 软硬链接
4.1 硬链接
- 硬链接只能给普通文件进行建立,Linux系统不支持给目录建立硬链接
- 硬链接本质不是一个独立的文件,没有自己的inode,本质是一组新的文件名和 inode number的映射关系
- ==ln 源文件 硬链接
linux
[root@localhost linux]# touch abc
[root@localhost linux]# ln abc def #给abc建立硬链接def
[root@localhost linux]# ls -li abc def
263466 abc
263466 def
#inode号相同
- 删除文件时
- 1.在目录中将对应的记录删除
- 2.硬链接数-1,如果为0,则将对应磁盘释放
4.2 软链接
- 软链接是通过 inode 引用另外一个文件,软连接是通过名字引用另外一个文件
- 软链接是一个独立的文件,新的文件和被引用的文件的 inode 不同
- 相当于 windows 下的快捷方式,删除不会影响源文件
- ln -s 源文件 软链接
linux
[root@localhost linux]# ln -s abc.s abc
[root@localhost linux]# ls -li
263563 -rw-r--r--. 2 root root 0 9 ⽉ 15 17:45 abc
261678 lrwxrwxrwx. 1 root root 3 9 ⽉ 15 17:53 abc.s -> abc 263563 -rw-r--r--. 2 root root 0 9 ⽉ 15 17:45 def
- 删除软链接(两种方式)
- rm abc.s
- unlink abc.s
4.3 软硬链接对比
- 软链接是独立文件
- 硬链接只是文件名和目标文件inode的映射关系
4.4 软硬连接的用途
- 硬链接:
- . 和 ... 就是硬链接 -》 创建的文件夹初始连接数就是2
- 父目录的文件名 + 自己的 .
- 虽然. 和 ... 就是硬链接,但是不支持给目录建立硬链接
- 防止出现路径环问题
- . 和 ... 是特殊目录,平时用到不会解析,方便操作
- 文件备份
- . 和 ... 就是硬链接 -》 创建的文件夹初始连接数就是2
- 软连接:
- 类似快捷方式