文件系统(二):分区、格式化数据结构
liwen01 2024.01.28
前言
生活中,我们买回来的SD卡、TF卡、硬盘等存储设备一般是可以直接使用,如果要改变存储设备上的文件系统格式,我们一般直接在电脑上右键格式化就可以实现。
买回来能直接用,是因为存储设备在出厂前厂家就已经做了分区和格式化操作。
为什么存储设备需要分区格式化之后才能被使用?分区与格式化各的目的又是什么?
分区是为了给硬盘提供逻辑结构,格式化是为了给分区提供可以用于存储数据的格式。
(a)分区 (Partitioning):
分区是将硬盘划分成一个或多个逻辑区域的过程。每个分区被视为独立的存储设备,有自己的文件系统和存储空间。
这样做的目的有:
- 方便数据组织和管理
- 减少文件碎片,提升访问速度
- 提高系统安全和稳定
- 支持多操作系统
- 可以简化备份和恢复过程
(b)格式化 (Formatting):
格式化是在分区上创建文件系统的过程。格式化过程,主要是创建文件系统的结构和元数据信息。
格式化为分区提供了一个可读写的文件系统,使操作系统能够有效地与硬盘交互。
(c)嵌入式设备分区方式
在不同的设备上,分区方式是不一样的,在PC机上,主要有MBR、GPT、动态磁盘卷三总方式
在嵌入式设备上,一般它们并没有明显的分区数据结构,比如在嵌入式Linux系统上, 一般是通过boot的CONFIG_BOOTARGS参数配置定义:
#define CONFIG_BOOTARGS BOOTARGS_COMMON "mtdparts=jz_sfc:256K(boot),352K(tag),5M(kernel),6M(rootfs),2560K(recovery),1140K(system),512k(config),16M@0(all)"
它将一个16M的flash分成boot、tag、kernel、rootfs、recovery、system、config 七个分区,通过各分区的大小定位到各分区的绝对位置。
相比较而言,PC的分区方式会复杂很多,这里我们主要介绍PC上的MBR和GPT分区方式,下面是几个会用到的英文缩写。
缩写 | 英文 | 中文 |
---|---|---|
MBR | Master Boot Record | 主引导记录 |
GPT | GUID Partition Table | 全局唯一标识符分区表 |
DPT | Disk Partition Table | 磁盘分区表 |
MBL | Master Boot Loader | 主引导加载程序 |
UEFI | Unified Extensible Firmware Interface | 统一可扩展固件接口 |
EBR | Extended Boot Record | 扩展引导记录 |
(一)MBR分区数据结构
PC机上的分区方式主要有MBR、GPT和动态磁盘卷三种,用得比较多的是MBR和GPT分区方式。
关于MBR 和 GPT 的分区介绍,网上已经有很多很详细的介绍,这里我尽量用比较简单的方式来介绍一些比较重要的概念。
(1)MBR 分区方式
MBR分区的数据信息是存储在磁盘的第一个扇区,也就是第0扇区,存储设备一个扇区大小一般为512Byte。
实际使用MBR方式分区,在没有扩展分区的条件下,分区只需要操作存储设备的第0扇区512个字节就可以了。
通过winhex我们可以看到第0扇区的详细信息,它主要分为4部分:
- MBL 主引导程序代码
- 磁盘签名
- DPT 分区表
- 结束标志
(2)MBL主引导程序代码
引导程序占用其中的前440字节,其地址在偏移0~0x1B7
首先需要清楚的一点是:这440个字节是一段程序
这段程序的功能是:
- 先将第0扇区的512字节复制到内存的一个安全区域去执行
- 判断第0扇区的最后两个字节是否为"55 AA",如果不是,提示出错
- 查找分区表中是否有活动分区
- 如果有活动分区,判断活动分区所在的扇区位置
- 将活动分区的引导扇区读入内存中,并判断数据是否合法
- 如果活动扇区数据合法,就将引导权交给活动扇区
- 活动扇区去引导操作系统启动,MBR引导程序退出
活动分区
一个磁盘中只能有一个活动扇区,活动分区中包含引导加载程序,它负责引导计算机启动操作系统。
活动分区是通过分区表项的第一字节来判断,分区表项的第一个字节,只能是0x00或者0x80,,0x00 表示不可引导的非活动分区,0x80表示为可以引导的活动分区
(3)磁盘签名
它是磁盘格式化时写入的标签,如果把这个位置的数据清除,系统会提示磁盘未初始化
(4)DPT磁盘分区表
分区表结构:
- MBR磁盘分区表的结构是固定的,总共包含4个表项,每个表项16个字节。
- 每个表项对应一个主分区,其中可以存储主分区或者扩展分区的信息。
- 如果不使用扩展分区,一个磁盘最多就只能支持4个分区
主分区和扩展分区:
- MBR分区表最多支持4个主分区。如果需要更多的分区,可以使用其中一个主分区作为扩展分区,然后在扩展分区内创建逻辑分区。逻辑分区的信息存储在扩展分区的扩展分区记录中。
分区表项格式:
- 每个分区表项包含了有关分区的信息,包括分区的起始位置、大小、文件系统类型等。此外,每个分区表项还包含一个用于标识分区状态(活动/非活动)的标志。
活动分区:
- 活动分区是一个特殊的主分区,被标记为活动。只有活动分区上的引导加载程序才会被计算机BIOS或UEFI加载,从而启动操作系统。
(5)结束标志
当计算机引导时,BIOS或UEFI会检查这个结束标志,以确认MBR分区表的有效性。如果这个标志不存在或不等于0x55AA,计算机可能无法正确识别和引导操作系统。
(6)扩展分区
扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个用来定义分区的参数的指针,这种指针结构形成一个单向链表。通过MBR上的扩展分区,逐个遍历就可以找到磁盘上的所有扩展分区。
我将一个16G的U盘分成4个分区,两个主分区,两个扩展分区,分区参数如下:
它的在磁盘中的数据结构如下:
有几个比较重要的点:
- MBR理论可以放置4个分区表项,实际只使用了3个
- MBR的第三分区表项为逻辑分区,它指向第一扩展分区的位置
- 扩展分区的分区表里只有两个有效分区表项,一个指向自己,另外一个指向下一个扩展分区
- 如果是最后一个扩展分区,它可以只有一个分区表项
- 在逻辑分区中,它们使用的是相对地址,相对于第一扩展分区的地址,而不是使用绝对地址
我们可以查看第0扇区数据进行核对,第4分区表项位置数据全是空,另外第一二分区类型为0x0B为FAT32分区,第三分区类型为0x0F,表示为扩展分区
(7)MBR分区的局限性
MBR 是一种比较老旧的分区格式,它有比较多的局限性:
- 最多支持4个主分区: MBR分区表最多支持4个主分区,其中一个可以是扩展分区
- 扩展分区和逻辑分区结构复杂: MBR通过扩展分区来克服主分区数量的限制,但使用扩展分区和逻辑分区引入了一些复杂性。
- 2TB以上硬盘的限制: MBR使用32位的逻辑块地址(LBA)来表示分区的起始位置和大小,因此存在2TB(2^41字节)的硬盘大小限制
- 不支持UEFI启动: MBR是基于传统BIOS引导的,不支持新一代的UEFI(Unified Extensible Firmware Interface)引导方式
- 不具备数据完整性校验: MBR分区表中没有内置的数据完整性校验机制,因此在一些情况下,分区表损坏或错误可能导致数据丢失或系统启动问题
(二)GPT分区
我们通过电脑的磁盘管理查看一个系统盘的分区情况,可以看到系统盘被分成了很多分区,除了C盘,其它的分区都没有被分配盘符。
那么这里的EFI系统、恢复分区具体又是些什么分区呢?我们再通过DiskGenius来查看
可以看到实际上是被分为ESP、MSR、OS、WINRETOOLS、Image、DELLSUPPORT分区
为什么需要分这么多个不同的分区?它们的作用是什么?
(1)与GPT相关的分区类型
(a)EFI System Partition (ESP):
- 用途:ESP 是用于存储 EFI(Extensible Firmware Interface)引导加载程序和相关引导文件的分区。它是启动过程中的重要组成部分,包含操作系统引导加载程序、配置文件和其他与引导相关的文件。
- 特点:ESP 是 GPT 分区表中的一种类型,通常具有 FAT32 文件系统。它是 UEFI 启动所需的,允许系统在引导时使用 UEFI 标准。
(b)Microsoft Reserved Partition (MSR):
- 用途:MSR 是为 Windows 操作系统保留的分区,用于将未来可能用到的一些信息存储在磁盘上。它是一种保留分区,实际上并未存储用户数据或系统文件。
- 特点:MSR 分区是 GPT 分区表中的一种类型,通常没有文件系统,也没有分配给任何驱动器号。它主要用于未来系统扩展和维护。
(c)OS 分区:
- 作用: 这通常是操作系统的主要分区,包含 Windows 的安装文件和系统文件。用户的程序和数据通常也存储在此分区中。
(d)WINRETOOLS 分区:
- 作用:WINRETOOLS 分区通常包含 Windows 恢复工具。这是用于系统还原和修复的工具集,可帮助在系统问题发生时修复系统。
(e)Image 分区:
- 作用:Image 分区可能包含用于系统还原的备份映像。一些厂商可能在此分区中存储系统的完整备份,以便用户在需要时可以还原整个系统。
(f)DELLSUPPORT 分区:
- 作用: DELL SUPPORT 分区通常包含 Dell 品牌计算机的支持和恢复工具。这可以是用于访问 Dell 技术支持或执行系统还原的工具。
通过上面的介绍可以知道,这个磁盘所在的电脑是一台使用GPT分区格式的DELL电脑,它的操作系统是Windows
(2)GPT分区的数据结构
GPT 磁盘由6个部分结构组成:保护MBR、GPT头、分区表、分区区域、备份分区表、备份GPT头
(a)保护MBR(Protective MBR):
- 作用: 为了与使用 MBR 分区表的旧系统保持兼容,GPT 分区表的开头部分包含了一个保护性的 MBR。这个 MBR 的目的是避免旧系统错误地识别 GPT 磁盘。
- 位置: 位于磁盘的第0号扇区,占用一个扇区的空间。
(b)GPT头(GPT Header):
- 作用: GPT 头包含了整个 GPT 分区表的基本信息,如分区表的位置、大小、磁盘 GUID 等。它是整个 GPT 结构的元数据。
- 位置: 位于磁盘的第1号扇区,占用一个扇区的空间
(c)分区表(Partition Table):
- 作用: GPT 分区表记录了磁盘上所有分区的信息,包括分区的起始位置、大小、类型、GUID 等。
- 位置: 位于磁盘的第2~33号扇区,占用32个扇区的空间
(d)分区区域(Partition Entries):
- 作用: 分区区域包含了实际的分区条目,每个分区一个条目位置: 位于分区表和备份分区表之间
(e)备份分区表(Backup Partition Table):
- 作用: 是分区表的一个备份,在主分区表损坏时用于恢复。
- 位置: 位于磁盘最后第2扇区到最后第34号扇区之间
(f)备份GPT头(Backup GPT Header):
- 作用: 是GPT头的一个备份,用于在主GPT头损坏时进行恢复。
- 位置: 位于磁盘的最后一个扇区
我们查看位于第3号扇区上的分区表,可以看到一个分区表项的大小为128字节
一个分区表项可以管理一个分区,而整个分区表的大小为32个扇区,所以理论上GPT支持创建128个分区
(3)GPT分区的优势
GPT(GUID 分区表)和 MBR(主引导记录)是两种不同的分区方案,GPT 在许多方面相较于 MBR 具有一些优势。以下是 GPT 分区相对于 MBR 分区的一些主要优势:
与MBR分区相比,GPT分区有下面几个优势:
- 支持更大的寻址能力,而MBR只能寻址到2TB空间
- 支持更多的分区数量,MBR值支持4主分区或是使用扩展分区
- 有更强的容错机制,有备份分区表和备份GPT头
- 支持更多的文件系统类型
- GPT使用UEFI(统一可扩展固件接口)来引导,相比 MBR + BIOS 更安全
- 有更灵活的分区布局,没有主扩展分区限制
(三)格式化
我们常说的格式化有两种,一种是低级格式化,另外一个是快速格式化。
(1)低级格式化
低级格式化在不同的应用场景有不同的含义,正常用户使用的时候,低级格式化一般是指将磁盘的数据全部擦除,再进行快速格式化,将文件系统写入到存储设备的过程。
但是在生产环境下,低级格式化有时候是指对磁盘进行划分柱面、磁道、扇区的操作。
(2)快速格式化
快速格式化一般分两个步骤:清除文件系统元数据和写入新的文件系统数据。
文件系统的元数据,是指文件系统中用于管理文件和目录信息的数据,它包括文件的属性、位置、大小、创建时间、修改时间、权限等等。
不同的文件系统,它们元数据类型是不一样的。
一般快速格式化后,磁盘中的文件数据是可以被恢复出来的,因为快速格式化是对元数据进行的操作,并不会影响实际文件的数据,除非是格式化前后文件系统类型不一样,会导致部分文件区域数据被覆盖。
关于更加详细的格式化过程,这里不展开介绍,会在后面的文件系统类型介绍中在说明。
预留两个问题:
- 如果一个磁盘中有多个分区,是否会存在一个分区写满数据后,数据被覆盖到了下一个分区?
- 如果一个分区,它所在分区空间都被全部写满了,它还能被正常挂载上么?
结尾
这里主要介绍的是磁盘的分区数据结构,以及一小部分格式化内容。那么,放置在存储设备上的文件系统,又是如何的被加载运行起来的呢?
接下将要介绍的是系统的启动,包括嵌入式系统和PC机系统的启动。