1.了解硬件 -- 磁盘
硬盘有机械硬盘(HDD)和固态硬盘(SDD)
接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块)
1.盘片(Platter) - 存储数据: 是硬盘的存储介质,通常由铝合金或玻璃材料制成,并且涂有一层薄薄的磁性材料。硬盘的每个盘片都是圆形的,并且水平堆叠在一起(多盘结构)。每个盘片的表面都有两面都能用来存储数据,顶部和底部都配有读写磁头。
2.磁道 (Track)- 数据的物理组织方式: 是硬盘盘片表面的一圈圈同心圆,它们是数据存储的物理路径。每个盘片都被划分为多个磁道,这些磁道从盘片的内圈向外圈辐射排列。磁头在读取或写入数据时,会定位到特定的磁道。
3.扇区(Sector)- 数据存储的最小单位: 是硬盘磁道上的最小数据存储单元。每个扇区通常包含 512 字节或 4KB 的数据。硬盘在每个磁道上将数据划分成多个扇区,所有的数据都是通过这些扇区进行管理和存储的。
4.磁头(Read/Write Head)- 读取和写入数据: 是硬盘的关键部件,负责在盘片的表面读取和写入数据。硬盘通常每个盘片都有两个磁头(一个用于盘片的上面,另一个用于盘片的下面),这些磁头通过 悬臂臂(actuator arm) 安装在盘片上方或下方的轨道上。
5.主轴(Spindle)- 驱动磁盘旋转: 是硬盘的旋转轴,用于支撑所有的盘片,并使它们按一定速度旋转。硬盘的盘片通过主轴连接在一起,并由主轴电机驱动旋转。硬盘的转速(通常以 RPM(每分钟转数)为单位)直接影响磁盘的性能。常见的转速有 5400 RPM、7200 RPM、10000 RPM 和 15000 RPM。转速越高,数据读取速度也越快。
6.磁头定位器 (Actuator) - 精确控制磁头的位置: 是一种驱动机制,用于精确控制磁头在盘片上的位置。它通过一个电磁装置,移动磁头在盘片上方和下方的不同磁道之间。磁头定位器通常由一个 磁臂(actuator arm) 和一个 伺服电机(voice coil motor, VCM) 组成。
2.CHS寻址
CHS(Cylinder-Head-Sector) 寻址方式通过柱面(磁道)、磁头和扇区的组合来定位硬盘上的数据。
CHS 寻址方式的工作原理:
-
柱面(Cylinder):硬盘通常有多个盘片,每个盘片都有上面和下面两个磁头。一个柱面由相同位置的多个磁头组成。例如,如果硬盘有 4 个盘片,则每个柱面上会有 4 个磁道(一个磁头对应一个磁道)。
-
磁头(Head):每个盘片面上有一个磁头,磁头定位器(Actuator)控制磁头的位置。当需要访问某个特定的磁道时,磁头定位器将磁头移动到目标磁道。
-
扇区(Sector):每个磁道上被划分为若干个扇区,通常每个扇区的大小是 512 字节。扇区是数据的最小存储单元。
CHS 寻址的具体示例:
假设我们有一个硬盘,分成以下结构:
- 磁盘有 4 个磁盘面(即 4 个磁头)。
- 每个磁道上有 20 个扇区。
- 硬盘共有 200 个磁道。
在 CHS 寻址 下,如果我们需要访问第 5 个柱面、使用第 2 个磁头,并且访问第 10 个扇区,那么我们需要的参数就是:
- Cylinder:第 5 个柱面(第 5 个磁道组),表示硬盘中相同位置的所有磁头(例如,磁头 1, 磁头 2, ...)。
- Head:第 2 个磁头,指向第二个盘片。
- Sector:第 10 个扇区。
因此,C=5, H=2, S=10 对应于硬盘中的具体数据位置。
3.LBA寻址
CHS 寻址的局限性:
- 寻址空间有限:由于硬盘物理结构的限制,CHS 寻址方式能够支持的最大磁道数、磁头数和扇区数是有限的。例如,某些早期硬盘的 CHS 地址空间有限制,不能超出某个值(例如最大 1024 柱面,16 个磁头和 63 个扇区),这限制了硬盘的最大容量。
- 不适应大容量硬盘 :随着硬盘容量的增加,CHS 寻址方式无法满足更大硬盘的寻址需求,因此它逐渐被 LBA(Logical Block Addressing) 取代。LBA 采用线性地址模式,不依赖于物理结构,支持更大的硬盘容量。
CHS 寻址方式的替代方式:
由于 CHS 寻址方式存在局限性,LBA(Logical Block Addressing) 寻址方式被广泛采用。LBA 使用单一的逻辑块编号来表示硬盘上的每个数据块,消除了柱面、磁头、扇区之间的物理结构映射,使得硬盘可以支持更大的存储容量。
我们可以将磁头进行编号(0.1.2.3......),将盘片想象成磁带的卷起来的样子,磁带是可以拉直,盘片我们虽然无法物理将其拉成直线,但是将其抽象成一条直线。多个盘片,可以根据磁头编号,依次将其排列。为了管理这条直线,可以用线性数组的形式将其管理,而每个数组的大小就是扇区的大小。
LBA(Logical Block Addressing,逻辑块寻址)是一种硬盘存储设备的数据寻址方式,它将硬盘的数据视为一个逻辑上的连续块,而不是依赖于物理位置(如柱面、磁道和扇区)。在LBA方式下,硬盘上的每个数据块都有一个唯一的逻辑地址(LBA),这一地址用于标识存储数据的物理位置。
主要特点:
- 逻辑地址:LBA采用的是一个单一的连续数字地址,这个地址从0开始,表示硬盘上的第一个数据块。
- 简化管理:LBA隐藏了磁盘的物理结构(柱面、磁道、扇区),操作系统和应用程序通过LBA进行存取,简化了磁盘管理和数据存取。
- 扇区为基本单位:LBA通常是以扇区为单位进行寻址,通常一个扇区为512字节。
工作原理:
在LBA寻址中,操作系统或应用程序通过LBA地址指定某个数据块,硬盘控制器则负责将逻辑地址转换为物理位置。硬盘内部有一个映射表,负责将LBA地址映射到具体的磁道和扇区。
优点:
- 透明性:用户和操作系统不需要关心硬盘的物理结构,LBA将硬盘视为一个大块存储区域。
- 简化操作:硬盘控制器负责管理物理结构的转换,简化了数据读写操作。
LBA方式常见于现代硬盘(HDD)和固态硬盘(SSD)中,是硬盘与操作系统之间最常用的数据寻址方式
照上图,如果我们想找第28888扇区在那个磁头的那个柱面
每个盘片有1w扇区:28888 / 10000 = 2 在2号磁头
每个盘片有20磁道:8888 % 20 = 8 第8磁道
每个磁道有500扇区:8888 / 20 = 444 第444扇区
通过LBA将磁盘抽象为很长的线性数组,以特定算法将(如上)将LBA转换为我们的CHS进行我们物理寻址。
4.文件系统
了解了硬件和寻址方式,那么这么大的物理内存,我们应该怎么管理呢,四个字"分而治之"。
假设我们有1T内存,我们如何管理呢。
4.1 分区
假设硬盘分为 C盘 、D盘 和 E盘,具体的分区方式根据操作系统、用途、数据存储需求等因素而有所不同。下面是一种常见的分区方式:
- C盘(系统盘)
- 大小:通常分配硬盘的前几十GB(例如:100GB - 200GB),以确保操作系统和基础应用有足够的空间。
- 内容 :
- 操作系统 :包括操作系统本身(如Windows、Linux等),操作系统的核心文件和系统目录(如Windows中的
C:\Windows
)。 - 系统文件:包括系统启动所需的引导加载程序(例如MBR/GPT分区表)和其他低级别的操作系统文件。
- 系统应用:包括操作系统自带的应用程序,如Windows自带的计算器、资源管理器、控制面板等。
- 注册表(Windows)或配置文件(Linux):操作系统的配置信息。
- 用户配置文件:如操作系统用户的桌面配置、默认文档位置等。
- 操作系统 :包括操作系统本身(如Windows、Linux等),操作系统的核心文件和系统目录(如Windows中的
- D盘(数据盘)
- 大小:可以分配硬盘的剩余空间的中间部分,假设大约500GB(可以根据需求调整)。
- 内容 :
- 用户数据:包括所有用户生成的数据,如文档、图片、视频、音乐等。
- 应用程序数据:安装的第三方应用程序的支持文件、数据库文件、缓存文件等。比如,安装在D盘的软件可能会在该分区创建文件夹用于存储应用配置文件、用户数据、日志等。
- 游戏文件:如果用户在该盘安装游戏,游戏的数据和文件(例如安装包、游戏存档、DLC等)将存储在该分区中。
- 下载目录:通常会将浏览器下载的文件、临时安装包等存放在此分区。
- E盘(备份盘或媒体文件盘)
- 大小:剩余空间的最后一部分,假设为300GB(可以根据需求调整)。
- 内容 :
- 备份文件:包括操作系统的备份、个人文件的备份以及其他重要数据的备份文件。
- 媒体文件:包括大容量的文件,如视频、音频文件、图片库等。用户通常会将不常用但需要存档的文件存放在此分区。
- 镜像文件:操作系统或硬盘的镜像文件(例如系统恢复点、磁盘映像等)也可以存储在此分区。
- 隐藏分区(或系统恢复分区)
- 大小:通常为几十GB(如30GB - 100GB),该分区通常会被操作系统隐藏,不会直接显示在资源管理器中。
- 内容 :
- 操作系统恢复工具:存放系统恢复和重装所需的文件。Windows中通常会有一个恢复分区,其中包含Windows恢复环境(Windows RE)和一些系统修复工具。
- 制造商工具:一些厂商会预装特定的工具和恢复映像,用于恢复出厂设置。
- 其他可能的分区
-
Linux系统分区(如果使用Linux):
- 在Linux中,操作系统通常会有多个分区,如:
/
(根分区):包含所有操作系统文件。/home
:存储用户文件和个人数据。swap
:交换分区,用于虚拟内存。/boot
:存储启动文件。
- 这些分区可以根据需要进行划分。
- 在Linux中,操作系统通常会有多个分区,如:
-
磁盘加密分区:
- 如果使用加密(例如BitLocker、LUKS等),可能会有专门的加密分区或加密管理区域,用于存储加密的操作系统文件或用户数据。
总结:
在1TB的硬盘上,操作系统通常会将硬盘分为多个分区(如C盘、D盘、E盘等),每个分区根据不同的使用场景包含不同的内容:
- C盘:操作系统和系统应用程序。
- D盘:用户数据和第三方应用程序的文件。
- E盘:备份文件、媒体文件等。
- 隐藏分区:系统恢复文件和工具。
硬盘的具体分区方式可以根据用户的需求(如数据管理、操作系统使用等)进行调整。
4.2 BLock group
每个区里面又有许多BLock group,在文件系统的设计中,block group (块组)是文件系统的一种管理单位,主要用于高效组织和存储文件数据。块组(block group)是由若干个数据块(data blocks)和一些辅助数据结构(如inode表、超块等)组成的逻辑单元,用于管理文件的存储、访问和文件元数据的维护。
超级块(Superblock)
- 存储整个文件系统的信息,比如文件系统的大小、块大小、文件系统的状态等。通常,超级块在整个文件系统中有多个副本。
块位图(Block Bitmap)
- 用于跟踪哪些数据块已被分配,哪些是空闲的。每个块组都有一个块位图,通过它,操作系统能够快速查找可用的空闲块。
inode位图(Inode Bitmap)
- 用于管理inode(索引节点)的分配情况。inode包含文件的元数据,如文件的所有者、权限、时间戳、数据块的位置等。
inode表(Inode Table)
- 该表存储了该块组中所有文件的inode。每个文件都有一个对应的inode,其中存储着该文件的所有信息,但不包括文件的名称。文件的名称通常在目录结构中管理。
数据块(Data Blocks)
- 实际存储文件内容的数据块。每个数据块通常是固定大小(如4KB),文件内容存储在这些数据块中。
目录表(Directory Block)
- 用于存储目录结构。一个目录文件实际上是一个特殊类型的文件,它的内容是指向文件或子目录的链接。目录文件也存储在数据块中,包含文件名和其对应的inode编号
如何通过Block Group管理文件?
每个块组的作用是管理一部分磁盘空间,并保持与该部分相关的文件系统信息。具体来说,通过以下方式来管理文件:
-
分配块:当文件被创建或扩展时,操作系统会查找块组中未被使用的空闲数据块。如果一个块组中的数据块已满,文件系统会尝试在其他块组中找到空闲块。
-
分配inode:每当创建新文件时,操作系统会为该文件分配一个inode。在EXT4文件系统中,inode表存储在每个块组内,每个块组有自己的inode表,记录了该组内所有文件的inode信息。
-
优化局部性:块组的设计能够优化数据的局部性。即,相关文件(尤其是同一目录下的文件)通常会被分配到同一个块组中,这有助于减少磁盘寻址时的开销,从而提高文件系统的性能。
-
块组内的分配与回收:当文件删除时,相应的inode和数据块会被回收到块组的空闲区。操作系统会更新块位图和inode位图,以反映最新的磁盘空间状态。
-
平衡使用:通过块组管理,操作系统能够确保硬盘各个区域的空间得到均匀使用,避免某些区域过度分配,而其他区域则没有被有效利用。这也有助于提升文件系统的性能和可扩展性。
举个例子:EXT4文件系统
假设有一个1TB的硬盘,分配了一个EXT4文件系统。EXT4文件系统会将硬盘分割成多个块组,每个块组可能包含数千个数据块、inode以及其它辅助信息(如块位图、inode位图等)。
- 如果一个文件被创建,它的inode会被分配到一个块组中的inode表,并且文件的内容会被存储在该块组中的数据块中。
- 当一个文件扩展时,新的数据块可能会被分配到当前块组的空闲区域,也有可能被分配到另一个块组,具体取决于磁盘的空闲空间状态。
- 当文件被删除,inode和数据块会被回收,重新标记为可用,供新文件使用。
优点和挑战:
优点:
- 局部性优化:通过将相关文件存储在同一块组中,能够减少磁盘寻址的开销,提高读写性能。
- 高效的空间管理:块组内的位图帮助操作系统快速判断哪些块和inode是空闲的,从而高效地分配磁盘空间。
- 容错性:文件系统在每个块组内保留多个副本(如超级块的副本),如果某个块组出现损坏,文件系统仍可以恢复。
挑战:
- 块组大小和分配策略:块组的大小设置对文件系统的性能有重要影响。如果块组太小,可能会增加管理开销;如果块组太大,可能会导致磁盘碎片和性能下降。
- 块组间的负载不均衡:如果某些块组使用过度而其他块组空闲,可能会导致文件系统的性能不均衡。
总结
在现代的文件系统中,块组(Block Group)是一种重要的管理单位,尤其在EXT4等文件系统中。它通过将硬盘分成多个块组,管理文件数据的存储、访问以及元数据的组织。每个块组包含数据块、inode表、位图等信息,从而实现高效的空间管理和文件访问。通过这种设计,文件系统能够优化磁盘的使用,提高性能,并减少磁盘碎片。
注:在linux中文件属性和文件是分开存储的
如何通过文件属性找到文件?