目录
前言
一.磁盘的结构
磁盘数据定位方法
CHS定位法
LBA寻址法
二.Linux文件系统
1.文件系统结构
编辑
2.inode
通过inode找到文件内容
3.重新理解文件
新建/删除文件
目录文件
软硬链接
前言
Linux文件系统是操作系统中用来组织和管理文件与目录的结构, 它提供了存储、检索、管理和保护数据的方法, 在Linux下一切皆文件, 理解文件系统以及文件能让我们对Linux的学习有很大帮助
一.磁盘的结构
磁头(Magnetic Head)是用于读取和写入磁性介质上数据的核心组件。它利用电磁原理在磁性材料表面记录和检索数据, 磁盘高速旋转 , 磁头来回摆动, 就能访问到磁盘上的所有数据
磁盘的每个盘面,都会被为多个等宽的同心圆环,这样一个圆环叫做磁道。而一个磁道又会被划分为很多个小扇形,每个扇形叫做一个扇区, 一个扇区的大小通常是固定的, 在很长一段时间内,磁盘的大小是512byte, 这种是传统的512字节扇区, 现代还有4KB扇区
磁盘数据定位方法
CHS定位法
CHS定位法曾经是硬盘上数据定位的标准方法,通过柱面、磁头和扇区三者的组合来定位数据位置
- C(Cylinder,柱面):指示数据位于哪一个柱面。
- H(Head,磁头):指示数据位于该柱面的哪一个磁盘面(由哪个磁头访问)。
- S(Sector,扇区):指示数据位于该磁盘面的哪个扇区。
- 选择柱面:首先,硬盘的读写头会移动到指定的柱面。柱面由磁盘上的所有盘片的对应磁道组成。
- 选择磁头:然后选择特定的磁头,以读取指定磁盘面上的数据。
- 选择扇区:最后在选定的磁盘面上,磁头读取或写入指定的扇区。
LBA寻址法
LBA是现代大部分存储设备的标准寻址方式, 通过一个简单的整数来表示存储设备上的数据位置
-
逻辑块(Logical Block):LBA将整个存储设备视为一个线性连续的块序列,每个块对应一个唯一的LBA编号。这些逻辑块的大小通常是固定的,一个逻辑块通常对应一个扇区,在大多数情况下,逻辑块的大小为512字节或4KB。
-
线性寻址:LBA通过一个简单的整数值(LBA号)来表示存储设备上的数据位置,而不涉及柱面、磁头和扇区的复杂几何结构。LBA号从0开始,一直到存储设备的最大块数减1。
当需要访问某个数据块时,操作系统或硬盘控制器会生成一个LBA号,该LBA号直接映射到存储设备上的物理位置。硬盘控制器将LBA号转换为设备内部的实际地址,然后访问相应的数据块
二.Linux文件系统
1.文件系统结构
Linux Ext2文件系统结构
- 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的 时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
- GDT,Group Descriptor Table:块组描述符,描述块组属性信息,宏观描述块组的使用情况
- 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没 有被占用
- inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
- inode Table:存放文件属性如文件大小,所有者,最近修改时间等
- Data blocks:存放文件内容
2.inode
文件=内容和属性
在Linux中文件的内容和属性是分开储存的,文件的属性储存在inodeTable中,内容存储在Data Block中, struct inode 是 Linux 内核中用于描述文件系统中每个文件的核心数据结构, 里面包含了文件的各个属性, 比如文件的inode编号, 文件的修改时间, 文件的权限, 文件的数据块等, 其中inode编号用来标识唯一一个文件或目录, 文件属性中记录的这个文件的内容存储的块下标, 通过这个就能直接找到文件的内容,
使用 ls -i 选项查看文件的inode
注意 : 文件名不是文件的属性, 不存在struct inode中
通过inode找到文件内容
struct inode
{...int i_block[15];//记录文件内容存放的Data Block下标...
}
i_blick数组分为[0,11] [12] [13] [14]区域
其中[0,11]为直接映射, 当文件数据过大, 这些块不够, [12]为一级映射, 所指向的块存储的是直接映射的块下标, 这些才是文件的内容, [13]为二级映射同上, 所指向的是一级映射的块下标, 再从一级映射存储的块找, [14]为多级映射, 同理
3.重新理解文件
现在我们有了文件系统的理解, 再来重新理解一些文件
新建/删除文件
所谓新建文件, 就是再inode bitmap中找到一个没有被使用的inode, 初始化文件的属性, 分配block 块, 然后在当前目录文件建立新建的文件的文件名和inode编号的映射关系
所谓删除文件, 就是删除当前目录文件中文件名和inode的映射关系, 文件系统释放inode 和block
目录文件
目录也是一个文件, 目录文件也有自己的内容, 在目录文件会储存该目录下所有文件的文件名和inode编号的映射关系
文件名存在于目录中,而不存在于文件本身。我们通过目录来访问文件名,本质是去目录文件中,通过文件名找到对应的inode编号,然后通过inode编号找到文件的属性,再通过属性中的i_block就能访问到文件内容。所以我们通过一个个目录文件就能访问到各种文件, 根目录的inode是确定的, 从根目录开始就可以依次找到所有文件
软硬链接
使用 ln -s [指向文件名][文件名] 来建立软连接
直接使用 ln [指向文件名][文件名] 建立硬连接
看起来好像这两个差不多, 都相当于快捷方式, 但它们本质有区别
通过查看它们的inode编号
我们可以发现, 软连接创建了新文件, 而硬连接并没有
实际上, 软连接会创建一个新文件, 新文件的内容就是要连接的文件路径, 通过这个路径就能找到该文件, 而硬连接没有创建新的文件, 相当于引用计数, 只是多了一个新的文件名与该inode的映射关系, 因为inode编号在分区内有效, 所以硬连接也只在分区内有效