硬盘分区和文件系统格式化介绍
作者:rosy_dawn 链接:https://www.jianshu.com/p/670a22556868
全新硬盘装系统之前,必须对其进行分区,硬盘分区初始化的格式主要有两种:传统的 MBR(Master Boot Record ,即主引导记录) 和新的 GPT( GUID Partition Table)。后者功能更强大,解决了 MBR 的许多限制。
MBR 早在 1983 年 IBM PC DOS 2.0 中就已经提出。之所以叫“主引导记录”,是因为它位于驱动器开始部分的主引导扇区,是硬盘的第一扇区。它由三个部分组成:Boot loader、硬盘分区表 DPT 和结束标志字。
-
第一部分为 Boot loader,位于主引导扇区的前 446 个字节,偏移地址为 0000H–0088H,是一小段代码,用于加载硬盘上其他分区上更大的加载器(如操作系统的启动加载器)。如果你安装了 Windows,Windows 启动加载器的初始信息就放在这个区域里。如果 MBR 的信息被覆盖导致 Windows不能启动,你就需要使用启动优盘中 DiskGenius 软件提供的重建 MBR 功能来使其恢复正常。如果你安装了 Linux,则这里通常存储的是 GRUB 启动加载器的初始信息。该区域主要提供以下三个功能:
- 提供启动引导菜单:使用者可以在该菜单中选择启动不同的开机项。在系统未加载前按下主板快速启动的快捷键就可以看到该菜单;
- 指向开机所需的核心文件来启动操作系统;
- 还可将开机引导权交给其它 loader。每个分区也拥有自己的启动扇区(Boot sector),开机引导程序除了可以装在这里外,还可装在各分区的启动扇区。
-
第二部分为 Disk partition table 区(DPT 分区表),占 64 个字节,偏移地址为 01BEH–01FDH,记录整个磁盘分区的状态,每 16 个字节标记一个分区,因此最多可记录 4 个分区。分区的单位是柱面,每个 16 字节的记录区记录了该分区从开始到结束的柱面号。所谓的分区操作即是对分区表进行设置,当文件系统要写入磁盘时,首先会参考分区表。在 MBR 分区表中,逻辑块地址采用 32 位二进制数表示,因此一共可表示 2 的 32 次方个逻辑块地址,所以,MBR 硬盘最大分区容量仅为 2.2 TB = 2^32 × 512 bytes;
-
第三部分是结束标志字,占 2 个字节,偏移地址为 01FEH–01FFH。固定为 55AA,是检验主引导记录是否有效的标志。该标志错误将导致系统不能启动。
上面所说的分区为主分区(primary partition)。一个磁盘或者 RAID 卷上只能有 4 个可启动的主分区。如果 MBR 分区方案需要使用 4 个以上的分区,那就需将至少一个主分区作为扩展分区(extend partition),然后在该扩展分区上面建立若干个逻辑分区(logic partition)。扩展分区可以被看作是容纳逻辑分区的容器。硬盘上最多只能有 1 个扩展分区(操作系统的限制)且其本身不能格式化,必须划分逻辑分区后才能使用,但扩展分区中的逻辑分区没有数量限制。扩展分区也被看作是一个主分区,因此,在存在扩展分区的情况下最多只能再建 3 个主分区(3 个主分区加 1 个可包含多个逻辑分区的扩展分区)。
扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和 MBR 结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的 EBR,分区表第三、第四项没有用到。简而言之,扩展分区严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个 逻辑分区的指针,这种指针结构是一个单向链表。
BIOS(Basic Input Output System)即基本输入输出系统 ,它是个人电脑启动时加载的第一个软件。其实,它是一个存储在计算机内主板 BOIS 芯片上的程序,它保存着计算机最重要的基本输入输出的程序、加电自检程序(Power On Self Test,简称 POST 自检)和系统启动程序等。
一般在计算机启动时按 F2 或者 Delete 即可进入 BIOS 程序进行设置(一些特殊机型按 F1、Esc、F12 等进行设置)。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
UEFI 的全称是 Unified Extensible Firmware Interface,意即统一可扩展固件接口,它是基于 EFI 1.10 标准为基础发展而来,值得注意的是在 UEFI 正式确立之前,Intel 就开始积极推进传统 BIOS 的升级方案,并最终确立了过渡方案 EFI 标准,直到 2007 年 Intel 将 EFI 标准的改进与完善工作交给 Unified EFI Form 进行全权负责,EFI 标准则正式更名为 UEFI。UEFI 其实和 BIOS 是同一类程序,是随着硬件发展而出现的 BIOS 升级版,被看做是有近20多年历史的传统的(Legacy)BIOS 的继任者。UEFI 一般就是指 UEFI BIOS 环境,而和 UEFI 比较时的所说的 BOIS 则是指传统的 BIOS 环境。
相比 BIOS,UEFI 的一些优点在于:
- 高效开发。BIOS 开发一般采用汇编语言,代码多是硬件相关的代码。而在 UEFI 中,绝大部分代码采用 C 语言编写,UEFI 应用程序和驱动甚至可以使用 C++ 编写。UEFI通过固件操作系统接口(BS 和 RT 服务)为 OS 和 OS 加载器屏蔽了底层硬件细节,使得 UEFI 上层应用可以方便重用。
- 可扩展性。UEFI 的模块化设计在逻辑上分为硬件控制与 OS(操作系统)软件管理两部分,硬件控制为所有 UEFI 版本所共有,而 OS 软件管理其实是一个可编程的开放接口。借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过 UEFI 加以实现,主板或固件厂商可以将它们作为自身产品的一大卖点。UEFI 也提供了强大的联网功能,其他用户可以对你的主机进行可靠的远程故障诊断,而这一切并不需要进入操作系统。
- 缩短启动和休眠恢复时间。UEFI 可运行于 32 位或 64 位模式,突破了传统 16 位代码的寻址能力,达到处理器的最大寻址,此举克服了 BIOS 代码运行缓慢的弊端。
- 启动的安全性。当系统的安全启动功能被打开后,UEFI 在执行应用程序和驱动前会先检测程序和驱动的证书,仅当证书被信任时才会执行这个应用程序或驱动。UEFI 应用程序和驱动采用 PE/COFF 格式,其签名放在签名块中。
- 更大的磁盘容量和分区数量。传统 MBR 分区最大只能支持 2.2 TB 的硬盘和 4 个主分区,而 UEFI 规范之一的 GPT 分区格式,则可以支持过百 TB 大小的硬盘和 100 个主分区。
- 兼容性。与 BIOS 不同的是,UEFI 体系的驱动并不是由直接运行在 CPU 上的代码组成的,而是用 EFI Byte Code(EFI字节代码)编写而成的。EFI Byte Code 是一组类似于 Java 类文件的虚拟机器指令,必须在 UEFI 驱动运行环境下被解释运行,由此保证了充分的向下兼容性。
- 鼠标操作。UEFI 内置图形驱动功能,可以提供一个高分辨率的彩色图形环境,用户进入后能用鼠标点击调整配置,一切就像操作 Windows 系统下的应用软件一样简单。
相比传统的 BIOS,UEFI 还提供了文件系统的支持,它能够直接读取 FAT、FAT32 分区中的文件,例如华硕、华擎等主板在 UEFI 环境下更新 BIOS 就可以直接读取 U 盘中的 BIOS 及其他文件,另外新的 UEFI 主板基本都提供了截屏功能,这些截屏图片都可以存储在U盘当中。
UEFI 还有一个重要特性就是在 UEFI 下运行应用程序,这类程序文件通常以 efi 结尾。利用 UEFI 可以直接识别 FAT 分区中的文件,又可直接在其中运行应用程序。我们就可以将 Windows 安装程序做成 efi 类型应用程序,然后把它放到任意 FAT 分区中直接运行即可。
当然由于 UEFI 主要由高级语言编写(C语言),相比于传统 BIOS 的汇编语言,UEFI BIOS 在安全防护性方面相比传统 BIOS 要弱,比较容易遭到病毒的攻击,安全性有待进一步提升。不过在图形化界面、应用程序扩展面前,UEFI BIOS 还是非常成功的。
现在,多数主板为了兼容 MBR 分区表,一般会提供 Legacy BIOS 和 UEFI BIOS 启动模式选项,如果要使用 UEFI 模式安装操作系统,就必须开启 UEFI 模式。UEFI 模式可切换回 BIOS 模式,而仅有 BIOS 模式时无法切换为 UEFI 模式。
目前 64bit Windows Vista、7、8、8.1、10 都已经支持 GPT 分区表,而 Windows 8、8.1、10 都已经原生支持 UEFI,安装这些系统的时候:只要硬盘设置为 GPT 分区表 主板设置为 UEFI 启动后,就可以直接开始安装操作系统了。自 Win8 发布以来,新出厂的预装 Win8/Win8.1 的电脑都默认在 UEFI 式下启动操作系统。
而对于 Windows Vista、7 系统,就需要手动添加 UEFI 支持,我们可以找一份 Windows 8 或者 10 安装镜像,从安装文件中提取 Bootmgfw.efi 文件,重命名为 BOOTX64.EFI,拷贝到 Win7 安装文件的 \EFI\Boot\ 下,如果没有 BOOT 文件夹就新建一个。
GPT 的全称是 Globally Unique Identifier Partition Table,意即 GUID 分区表。UEFI BOIS 将逐渐取代 Legacy BOIS ,而 GPT 也将逐渐取代 MBR。UEFI 和 GPT 是相辅相成的,二者缺一不可,要想使用 GPT 分区表则必须是 UEFI BIOS 环境。
与支持最大 2T 磁盘和 RAID 卷且至多有 4 个主分区的 MBR 分区表相比, GPT 分区表能支持最大 18 EB(Exabytes)磁盘和 RAID 卷。并且磁盘和 RAID 卷的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区)。比如,在 Windows 系统上,由于系统的限制 GPT 最多只能支持 128个 磁盘分区,基本可以满足所有用户的存储需求。在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个 GPT 分区都分配完全唯一的标识符。
在安全性方面,GPT 分区表也进行了全方位改进。在早期的 MBR 磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT 在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT 还为这些信息保存了循环冗余校验码(CRC)以保证其完整性和正确性——如果数据被破坏,GPT 会发觉这些破坏,并从磁盘上的其他地方进行恢复。
高版本的 Windows 系统。按 Win+R 打开运行,输入 msinfo32,回车查看系统信息。在 BIOS 模式中如果显示“传统”,表示系统启动方式为 Legacy BIOS;如果为 UEFI,则显示 UEFI。
分区建立后,在将数据存储到分区之前,还必须要用某种文件系统对其进行格式化,这样操作系统才能使用它。创建文件系统的操作就是平时我们所说的格式化。格式化是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。
**文件系统(File System)**是操作系统中负责管理和存储文件信息的软件机构,用于向用户提供底层数据访问。它将设备中的空间划分为特定大小的块(或称为簇),一般每块 512 字节,一个块可能由若干个扇区组成。数据存储在这些块中,大小被修正为占用整数个块,由文件系统软件来负责将这些块组织为文件和树形目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备实际使用数据块的概念,用户使用文件系统来保存数据时不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。
文件系统是数据的组织者和提供者,并不一定只在特定存储设备上出现,实际上文件系统可能仅仅是一种访问数据的界面而已,实际的数据是通过网络协议(如 NFS、SMB、9P 等)提供的或者在内存上,甚至可能根本没有对应的文件(如 PROC 文件系统)。严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。
格式化通常分为低格(低级格式化)和高格(高级格式化)。
- 低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。大多数的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建硬盘扇区使硬盘具备存储能力的操作。
- 高级格式化又称逻辑格式化,即创建文件系统的过程。高格是根据用户选定的文件系统在磁盘的特定区域写入特定数据,以初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包括对主引导记录(MBR)中分区表相应区域的重写,根据用户选定的文件系统在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间以便用户使用该分区管理文件。
- 低格在硬盘出厂时已经完成。如果没有特别指明,对硬盘的格式化通常是指高格
下图为一个全新的、未使用的磁盘驱动器的一种形象表示。
要在磁盘驱动器中保存数据,则首先需要格式化该磁盘驱动器。格式化(通常称“ 生成文件系统” )是向驱动器中写入信息,在未格式化驱动器中为空白空间建立顺序。下图表示一个有文件系统的磁盘驱动器。
如上图所示,文件系统所指派的顺序涉及了一些折衷方案:
- 驱动器中的一小部分可用空间被用来存储与文件系统有关的数据,这可以被视作额外部分。
- 文件系统将剩余的空间分成小的一定大小的片段。在 Linux 中,这些片段就是块。
注:没有单一、通用的文件系统。不同的文件系统会彼此不兼容,也就是说,支持某一文件系统(或者相关的文件系统类型)的操作系统可能不支持另外一种文件系统。比如 Windows 不支持 ext4 等日志文件系统,而 Red Hat Enterprise Linux 就支持很多文件系统(包括许多被其他操作系统使用的文件系统),这就使得在不同文件系统之间的数据交换变得容易了。
在磁盘中写入文件系统只是第一步。这个进程的目的实际上是要保存和检索数据。下图显示了写入数据后的磁盘驱动器:
某些之前的空数据块现在也存放着数据。然而,只看这个框图,我们不能确认这个磁盘中有多少个文件系统。这有可能是一个,也有可能是多个,因为所有的文件都使用至少一个数据块,而有些文件则使用多个块。另外一个值得注意的地方是,已经被使用的块不一定组成连续的空间;未使用的和已使用的块可以散布排列。这被称作碎片。当尝试调整现存分区的大小时,碎片会对其产生影响。
和大多数与计算机相关的技术一样,与磁盘驱动器刚发明时相比,文件系统已经有了很大的变化。特别是保存信息的容量变得越来越大。同时额外的容量让使用磁盘驱动器的方法发生了根本改变。
生活中我们所说的磁盘格式就是指文件系统。不同的操作系统所使用的文件系统也不同。
驱动器:在计算机领域,驱动器指的是磁盘驱动器。通过某个文件系统格式化并带有一个驱动器号的存储区域。
硬盘驱动器(hard disk drive,HDD)指的是个人计算机中控制硬盘寻址以及存取数据的装置。通过硬盘驱动器,计算机才能存储数据。尽管硬盘驱动器和硬盘(hard disk)是两个概念,但是由于两者通常被封装在一起,所以无论是硬盘还是硬盘驱动器通常都是指二者结合在一起所形成的设备。
主引导扇区:硬盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁头0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。硬盘主引导扇区= 硬盘主引导记录(MBR) + 硬盘分区表(DPT)
- 物理位置:0柱面0磁头1扇区(Cylinder 0,Head 0,Sector 1)
- 系统扇区(System Sectors):0C-0H-2S,0C-0H-63S,共 62 Sectors
- 大小:512字节
- 其中:MBR 446字节(0000–01BD),DPT 64字节(01BE–01FD),结束标志2字节(55 AA)
- 功能:MBR通过检查DPT分区信息引导系统跳转至DBR
硬盘分区表(DPT)
DPT 总共64字节(01BE–01FD),如上所示每个分区占16个字节,所以可以表示四个分区,这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因.
MBR下的硬盘分区有三种,主磁盘分区、扩展磁盘分区、逻辑分区。
一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
分出主分区后,其余的部分可以分成扩展分区,一般是剩下的部分全部分成扩展分区,也可以不全分,那剩的部分就浪费了。
扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,所以说扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。
激活的主分区是硬盘的启动分区,他是独立的,也是硬盘的第一个分区,正常分的话就是C驱。
主分区也可成为“引导分区”,会被操作系统和主板认定为这个硬盘的第一个分区。所以C盘永远都是排在所有磁盘分区的第一的位置上。
主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。早期MBR模式分区只能划分四个分区,现在的GPT分区至少可以划分128个主分区,未来很有可能将不存在扩展分区和逻辑分区的概念。
硬盘的主分区包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则硬盘必须有一个主分区。
主引导程序是它的一部分,此段程序主要用于检测硬盘分区的正确性,并确定活动分区,负责把引导权移交给活动分区的DOS或其他操作系统。此段程序损坏将无法从硬盘引导,但从软驱或光驱引导之后可对硬盘进行读写。
在MBR分区模式中,硬盘只能分4个分区,而4个分区肯定不够用,所以就催生了扩展分区和逻辑分区的概念,而之前的分区类型便起名为主分区了。实际上在早期的硬盘分区中并没有主分区、扩展分区和逻辑分区的概念,每个分区的类型都是现在所称的主分区。
GPT,即 Globally Unique Identifier Partition Table Format,全局唯一标识符的分区表的格式,它至少可以分出128个分区,完全不需要扩展分区和逻辑分区来帮忙就可以分出任何想要的分区来。
MBR(主引导记录)的分区表(主分区表)只能存放4个分区,如果要分更多的分区的话就要一个扩展分区表(EBR),扩展分区表放在一个系统ID为0x05的主分区上,这个主分区就是扩展分区,扩展分区能可以分若干个分区,每个分区都是个逻辑分区。
逻辑分区的信息都被保存在扩展分区内,而主分区和扩展分区的信息被保存在硬盘的MBR内。这也就是说无论硬盘有多少个分区,其MBR(主引导记录)中只包含主分区(也就是启动分区)和扩展分区两个分区的信息。
扩展分区是硬盘磁盘分区的一种。
一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘
扩展分区不能直接使用,必须分成若干逻辑分区。所有的逻辑分区都是扩展分区的一部分。
由主分区和逻辑分区构成的逻辑磁盘称为驱动器(Drive)或卷(Volume)。
系统分区与启动分区的区别:激活的主分区会成为“系统分区”,系统分区包含硬件相关文件和 Boot 文件夹,通过这个文件夹计算机可以获取启动 Windows 的位置,该分区大小为 100 MB。启动分区是包含 Windows 操作系统文件的分区。系统分区和启动分区是硬盘上的分区(或卷)的名称,Windows 在启动时将使用该硬盘。这两个术语很容易混淆,这是因为系统分区实际上包含的是用于启动 Windows 的文件,而启动分区包含的则是系统文件。
逻辑分区是硬盘上一块连续的区域,不同之处在于,每个主分区只能分成一个驱动器,每个主分区都有各自独立的引导块,可以用fdisk设定为启动区。一个硬盘上最多可以有4个主分区,而扩展分区上可以划分出多个逻辑驱动器。这些逻辑驱动器没有独立的引导块,不能用fdisk设定为启动区。主分区和扩展分区都是dos分区。
理论上可以划分为无数个逻辑分区。
扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。
硬盘DBR(Dos Boot Record):分区引导扇区也称DBR,是由FORMAT高级格式化命令写到该扇区的内容,DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区的DBR才会被MBR装入内存运行。
- DBR位于柱面0、磁头1、扇区1,其逻辑扇区号为0
- DBR包含DOS引导程序和BPB。
- BPB十分重要,由此可算出逻辑地址与物理地址。
- 准确地说,DBR应该改称为OBR(OS Boot Record)即操作系统引导扇区.
- OBR(DBR)是高级格式化程序产生的,如FORMAT、PM、DM、DISKPART、WINXP磁盘管理器。
- DBR(DOS BOOT RECORD,DOS引导记录),位于柱面0,磁头1,扇区1,即逻辑扇区0。DBR分为两部分:DOS引导程序和BPB(BIOS参数块)。其中DOS引导程序完成DOS系统文件(IO.SYS,MSDOS.SYS)的定位与装载,而BPB用来描述本DOS分区的磁盘信息,BPB位于DBR偏移0BH处,共13字节。 它包含逻辑格式化时使用的参数,可供DOS计算磁盘上的文件分配表,目录区和数据区的起始地址,BPB之后三个字提供物理格式化(低格)时采用的一些参数。引导程序或设备驱动程序根据这些信息将磁盘逻辑地址(DOS扇区号)转换成物理地址(绝对扇区号)。