磁盘物理结构
几个重要概念:
-
柱面(Cylinder):
硬盘由多个叠加的盘片组成,每个盘片都有两面,每面包含很多磁道。同一位置的磁道叠加在一起形成一个柱面。也就是说,柱面是通过多个盘片上相同半径的磁道组成的一个圆柱形结构。在硬盘读写数据时,磁头移动到一个柱面位置,可以访问该柱面上所有磁道的数据。 -
磁道(Track):
磁道是硬盘盘面上的一个圆形环。每个磁道可以存储一定量的数据。在早期的硬盘设计中,每个磁道的数据容量是相同的,但在现代硬盘中,外侧磁道因为周长较长,通常会存储更多数据。 -
扇区(Sector):
扇区是磁道上的一小段,每个扇区通常存储512字节或更多的数据。一个磁道被分割成多个扇区,这是硬盘数据存取的基本单位。当计算机读写硬盘时,它会指定扇区的地址,这包括柱面号、磁头号(盘面的一面)和扇区号。
在硬盘中,数据是通过定位到特定的柱面、选择正确的磁头(即确定盘面和磁道),然后读写特定扇区中的数据来存取的。这种结构使得硬盘能够快速准确地定位数据,但也导致了硬盘操作的复杂性,尤其是在处理大量数据时。
磁盘寻址
磁盘寻址是指定位和访问磁盘上数据的方法。对于硬盘来说,有几种常见的寻址方式:
-
CHS(柱面-磁头-扇区)寻址:
这是早期硬盘使用的传统寻址方式。在这种模式下,每个扇区的位置由其柱面号、磁头号(即盘面号)和扇区号确定。随着硬盘容量的增加,CHS寻址因其地址范围限制而逐渐被新技术所替代。 -
逻辑块寻址(LBA):
逻辑块寻址是现代硬盘最常用的寻址方式。在LBA模式中,磁盘上的扇区被顺序编号,从0开始。这种方式简化了接口设计,使得操作系统无需关心磁盘的几何结构(如柱面、磁头和扇区的具体数量)。
这两种寻址方式其实是可以转化的,例如总共有6个盘面,一个盘面有100个磁道,一个磁道有400个扇区。如果要访问编号为20074的扇区,对应的CHS就是0号盘面/Header (20074/(100*400) = 0),50号磁道/Cylinder(20074/400=50),74号扇区(20074%400)
磁盘逻辑结构
操作系统如何管理?
首先磁盘的空间是很大的,第一步就是对空间进行分区。但是每个分区依旧很大,就将每个区继续划分,划分成很多group
Boot Block:这是文件系统的启动块,包含了启动计算机所需的引导加载程序。它是文件系统的第一部分,通常在磁盘的最开始位置。
每个group又会细分很多块:
-
Super Block:
超级块包含了整个文件系统的关键信息,如文件系统的大小、块大小、空闲块和inode的数量、块组的数量等。它是文件系统管理的核心部分。 -
Group Descriptor Table:
组描述符表包含了每个块组的信息,例如其中的块和inode表的起始位置、空闲块和空闲inode的数量等。这有助于文件系统快速定位和管理各个块组。 -
Block Bitmap:
块位图用于跟踪每个块组中哪些块是空闲的哪些是已使用的。通过块位图,文件系统可以有效地分配新的数据块。 -
inode Bitmap:
inode位图类似于块位图,但它用于跟踪inode的使用情况。每个位代表一个inode,该位图帮助文件系统管理inode的分配。 -
inode Table:
inode表存储了文件系统中所有文件和目录的元数据。每个inode包含了文件的权限、大小、创建和修改时间、以及数据块的位置等信息。 -
Data Blocks:
数据块是文件系统存储文件数据的基本单位。每个文件的数据都被分割到一个或多个数据块中。
inode和data block的对应关系
inode 结构
inode
是文件系统中的一个数据结构,用于存储文件的元数据。这些元数据包括:
- 文件类型(如普通文件、目录等)
- 权限(读、写、执行权限)
- 所有者和组信息
- 文件大小
- 时间戳(如创建时间、最后修改时间、最后访问时间)
- 指向文件数据块的指针
2. 文件数据的定位
inode
中包含了几种类型的指针,这些指针直接或间接指向存储文件内容的数据块。这些指针通常分为几个级别:
-
直接指针:这些指针直接指向存储文件数据的数据块。通常,一个
inode
会有多个直接指针(例如,在某些UNIX系统中,可能有12个直接指针)。 -
间接指针:当文件较大,直接指针不足以指向所有数据时,
inode
会使用间接指针。间接指针指向一个数据块,而这个数据块内部存储的是指向其他数据块的更多指针。这些间接指针可以是单级间接、双级间接,甚至三级间接:- 单级间接指针(一次间接)指向一个块,该块内含有指向实际数据块的指针。
- 双级间接指针(二次间接)指向一个块,该块内含有指向其他块的指针,而这些块再指向实际数据块。
- 三级间接指针(三次间接)则更进一层,可以让
inode
定位到更大量的数据。
3. 数据存储
每个文件的内容被分割成块大小的片段存储在这些数据块中。文件系统根据文件大小和inode
中记录的指针来读取或写入数据到正确的数据块中。
4. 效率与管理
这种结构允许文件系统有效地管理大文件和小文件。小文件可能只需要一个或几个直接指针就足够了,而大文件则需要更复杂的间接指针结构。通过这种方式,文件系统可以在保持高效数据访问的同时,优化存储空间的使用。
简单示意图:
谈几个问题
什么是磁盘格式化
磁盘格式化并不是将磁盘的每个数据块的数据都抹除,不仅会降低效率而且会降低硬件的使用寿命。一般就是将分区的属性删除,将inode和数据块的位图都清除。因此,格式化不会将磁盘的数据都抹除只是修改了属性,如果误删了重要数据,最好的解决方法就是什么都不做,找专业的人使用专业的软件来恢复数据。
新建一个文件,系统要做什么
找到当前路径确定分区,在这个分区的inode位图寻找一个未使用的inode,将文件属性写入inode,通过数据块位图为inode分配可使用的数据块,将文件内容写入数据块
删除一个文件,系统要做什么
找到当前文件的路径确定所在分区(不同分区的inode不共用),在inode Table找到文件inode,通过inode中的数据块指针,将数据块位图对应的位标记为无效位(让它可以再被分配,并没有抹除数据块的数据),最后将inode位图对应的位也标记为无效位
修改一个文件,系统要做什么
找到当前文件的路径确定所在分区,在inode Table找到文件inode,通过inode中的数据块指针,找到对应数据块,修改数据。如果写入数据很多,就会再分配数据块。
查找一个文件,系统要做什么
根据所给路径确定所在分区,根据所给的inode在inode位图中寻找,如果对应的位是有效的就说明该文件存在。
symbolic link&hard link
如何理解目录
目录也是文件也有自己的inode,当然也有自己的数据即使是一个空目录,因为每个目录都有.和..
目录的数据是什么?
文件名和对应文件的inode,这也是为什么一个目录下不能有同名文件的底层原理
计数也是inode中的一个文件属性,表示有多少个目录条目指向该inode,后面会提到
symbolic link
特点:
- 软连接是一个指向目标文件或目录的快捷方式。
- 软连接可以跨文件系统。
- 删除软连接不会影响目标文件,但删除目标文件会导致软连接变为无效链接(dangling link)。
- 软连接可以指向不存在的文件或目录。
- 软连接是一个独立的文件,具有自己的inode。
创建命令:
ln -s <目标文件或目录> <软连接名称>
删除链接:
unlink <软连接名称>
原理:
symbolic link文件是一个新创建的文件,分配自己独有的inode,但是数据块存储的是被链接文件的绝对路径
hard link
特点:
- 硬连接是一个文件的另一种引用,同一个文件有多个硬连接。
- 硬连接不能跨文件系统。
- 删除硬连接或目标文件不会影响文件本身,只要至少还有一个硬连接存在,文件内容就不会被删除。
- 硬连接不能指向目录,只能指向文件(在大多数文件系统中)。硬链接指向目录可能出现闭环:
- 硬连接共享同一个inode,因此它们指向同一数据块。
创建命令:
ln <目标文件> <硬连接名称>
原理:
hard link并没有创建新的文件,而是在目录中为被链接的文件的inode新增一个新的映射。同时让inode的引用计数器+1
总结:
- 软连接类似于Windows中的快捷方式,删除目标文件会导致软连接失效。
- 硬连接是文件的等价副本,删除硬连接不影响文件内容,只有当所有硬连接都被删除时,文件内容才会被删除。