文件系统-inode/软硬件连接(未完结)
首先我们了解一下文件简洁理解来说就是:文件内容+文件属性 ---> 磁盘上存储的文件=存文件的内容+存文件的属性;而文件的内容----存放在每个数据块 ;文件属性存放在iNode里面。
要明白:linux系统中的文件是存储在磁盘中的,它是将文件属性和文件内容分开存储的!
1.磁盘
磁盘由:盘片、主心轴、磁道、扇区、盘面、磁头、磁头停靠点、磁头臂、电机、控制电路
从上图要注意的是盘片的旋转搭是可以定位到扇区的过程,而磁头的左右摆动是定位磁道和柱面的过程。对于动态机械要知道运动越少,效率越高;运动越多,效率越低;换个方向思考这个句话就是当你运动太频繁了并不是好的,因为毕竟是机械装置所以运动的时间久了幅度太大也会影响到它的寿命;假如你磁头反复寻道,盘片持续高速运转,必然会增加故障风险,缩短磁盘风险是一方面,当你损坏到部件,是会造成数据丢失的!
磁盘写入的数据是以01形式写入的!
磁盘被访问的最基本单位是扇区---一个扇区存储是512字节/4KB;
对于磁盘的认识也可以把磁盘看做由若干个扇区构成的存储介质;
2.定位计算
要把数据存到磁盘要解决的问题就是确定磁盘定位扇区、定位盘面、定位磁道;
下面是一个手动计算的过程:
先确定那个盘面,再确定磁道、再确定那一个扇区!
3.内部构造
容易忽略的是我们常常认为寄存器只存在于cpu中其实磁盘中也存在。
控制寄存器是用来判断你是这次访问磁盘是要来读数据还是写入数据;
数据寄存器就是进行数据的存储;
地址寄存器存放LBA就是 Logical Block Addressing 的缩写,即逻辑块寻址;
状态寄存器就是判断你这次对磁盘的操作有没有成功;
LBA概念:它是一种对磁盘扇区进行编址的方式 。在传统磁盘寻址中,使用 CHS(Cylinder - Head - Sector,柱面 - 磁头 - 扇区) 方式,这种方式受磁盘物理结构限制。LBA 则将磁盘所有扇区从 0 开始连续编号,屏蔽了磁盘物理结构细节,操作系统和软件只需通过 LBA 编号就能访问扇区,无需关心实际物理位置。(上面的计算的扇区编号就是逻辑地址)
4.文件系统
磁盘虽然是圆形的,但是类比一下磁带,磁带是可以拉开的,所以可以看作它是线性的。磁盘其实也可以这样的理解。我们把连续的扇区拉开就成线性的了。
这里需要先了解两个概念:
- 扇区:是磁盘等存储设备的最小物理存储单元 ,是真实存在的物理结构。在传统硬盘中,每个扇区通常为 512 字节 ,部分新硬盘或特殊存储设备扇区大小为 4096 字节(4K)。扇区的大小由硬盘制造商在生产时确定,一般无法修改。
- 块:也叫逻辑块,是操作系统层面虚拟出来的概念,是操作系统与磁盘进行数据交互的最小单位 。它是文件系统存取数据的最小单元,大小通常由操作系统决定和配置,常见大小为 4KB ,且一般是扇区大小的整数倍(一个块大小 = 一个扇区大小 * 2 的 n 次方 ,n 可调整 ) 。
联系
- 组成关系:操作系统为了更高效地管理和操作磁盘,将相邻的若干个扇区组合成一个块 。例如在很多系统中,8 个 512 字节的扇区组成一个 4KB 的块 。
- 操作关联:磁盘的物理读写基本单位是扇区,磁盘控制器按扇区操作数据 ;而操作系统在读取或写入磁盘数据时,是以块为单位进行操作的 ,即一次读写一个或多个块,实际是读写相应数量的扇区 。
下图是一个连续的扇区被拉开的样子:
BOOT Block可以理解为开机键,它被分为多个Block group ;一个Block Group会分成上图各种模块;
块组内部构成
- Super Block(超级块):记录文件系统的整体信息,如文件系统类型、大小、空闲块数、inode 总数等 ,是文件系统挂载和管理的关键信息。
- Group Descriptor Table(组描述符表):描述每个块组的属性,如块组中 inode 表位置、数据块位置、空闲块数等 ,用于文件系统管理各个块组。
- Block Bitmap(块位图):用二进制位表示块组内数据块的使用情况,每一位对应一个数据块,0 表示空闲,1 表示已使用 ,方便快速查找空闲块。
- inode Bitmap(inode 位图):同样以二进制位表示块组内 inode 的使用状态 ,0 表示空闲 inode ,1 表示已使用 ,用于管理文件元数据存储单元。
- inode Table(inode 表):存储文件和目录的元数据,包括文件大小、权限、所有者、创建和修改时间等 ,每个文件或目录在 inode 表中都有对应的记录。
- Data blocks(数据块):实际存储文件内容的区域,以块的形式呈现,常见大小为 4KB ,文件数据按块存储在此处 。
在linux中标识文件用的其实是iNode编号!其中ACM时间就是Access(最后的访问时间 )、Modify(文件内容最后修改的时间 )、Change(文件属性最后修改的时间 )。
一个已经被删除的文件要想恢复只要知道它的inode编号然后通过inodebitmap里面把对应的比特位的0改为1就可以做到恢复。
在实际情况中也是存在一种是inode被用完,但是数据块还有,因为inode的分配是固定的!