文件系统(二):分区、格式化数据结构

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)快速格式化

快速格式化一般分两个步骤:清除文件系统元数据和写入新的文件系统数据。

文件系统的元数据,是指文件系统中用于管理文件和目录信息的数据,它包括文件的属性、位置、大小、创建时间、修改时间、权限等等。

不同的文件系统,它们元数据类型是不一样的。

一般快速格式化后,磁盘中的文件数据是可以被恢复出来的,因为快速格式化是对元数据进行的操作,并不会影响实际文件的数据,除非是格式化前后文件系统类型不一样,会导致部分文件区域数据被覆盖。

关于更加详细的格式化过程,这里不展开介绍,会在后面的文件系统类型介绍中在说明。

预留两个问题:

  1. 如果一个磁盘中有多个分区,是否会存在一个分区写满数据后,数据被覆盖到了下一个分区?
  2. 如果一个分区,它所在分区空间都被全部写满了,它还能被正常挂载上么?

结尾

这里主要介绍的是磁盘的分区数据结构,以及一小部分格式化内容。那么,放置在存储设备上的文件系统,又是如何的被加载运行起来的呢?

接下将要介绍的是系统的启动,包括嵌入式系统和PC机系统的启动。

---------------------------End--------------------------- 如需获取更多内容 请关注 liwen01 公众号