为什么一块硬盘还要分区?MBR 和 GPT 是什么
前言
给 Linux 机器加一块新硬盘,是很常见的操作。不管是虚拟机扩容、服务器加数据盘,还是拿个 U 盘做启动盘,你大概率都经历过这个过程。
加完硬盘后,用 lsblk 一看,系统确实认到了新设备:
1 | lsblk |
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
sdb 就是新加的那块 200G 硬盘。系统能看到它,说明内核已经识别了这个块设备。
但是,如果你现在就想把它挂载到 /data 目录,会发现做不到。试一下:
1 | sudo mount /dev/sdb /data |
大概率会报错:mount: /data: special device /dev/sdb does not exist. 或者提示找不到文件系统。
问题出在哪里?一块硬盘能被系统识别,不等于它已经可以存文件。
从裸盘到能用,中间至少要经过这么几步:
1 | /dev/sdb 整块硬盘 |
这篇是系列文章的第一篇,我们只讲最前面这一层:分区表。分区表是什么?MBR 和 GPT 又是什么?它们各自解决了什么问题?
先不用急着看命令。先把这几层关系捋清楚。
先把几个词分开
在正式讲分区表之前,有必要先把几个经常混在一起的概念拆开。很多人在刚接触 Linux 磁盘管理时,会把下面这些词搞混:
/dev/sdb/dev/sdb1- MBR、GPT
- ext4、xfs、btrfs
- mount
它们分别是什么?
/dev/sdb—— 通常表示整块磁盘。SATA、SCSI、USB 接口的盘,在 Linux 里都是/dev/sdX这样的名字。NVMe 盘则是/dev/nvmeXnY。/dev/sdb1—— 通常表示这块磁盘上的第一个分区。后面的数字是分区编号。- MBR、GPT —— 这是分区表的格式。它记录的是”这块硬盘被切成了几段,每段从哪里开始、到哪里结束”。
- ext4、xfs、btrfs —— 这是文件系统。它负责”文件怎么放进去、又怎么找回来”。
- mount(挂载) —— 只是给分区一个访问入口,让你能通过某个目录路径读写里面的文件。
这个地方很容易混淆,因为日常说话时我们经常把”分区”和”文件系统”当同义词用。但在底层,它们是不同的东西:
分区表解决的是”这块硬盘被切成了几段”。
文件系统解决的是”文件怎么放进去,又怎么找回来”。
这两件事由不同的机制负责。分区表在更底层,文件系统在它上面。搞反了顺序,就会出现”为什么 mount 不上”这类困惑。
分区表到底是什么
好,现在来正式说分区表。
一块硬盘在底层可以理解成一长串编号的存储空间。操作系统需要知道一些基本信息:
- 第一个分区从哪个位置开始
- 到哪个位置结束
- 第二个分区从哪里开始
- 到哪里结束
- 每个分区大概是什么类型
记录这些信息的结构,就是分区表。
分区表有点像硬盘开头的一张”目录”。它不负责保存你的文件,只负责告诉系统:这块盘被怎么切开了。
这张”目录”通常很小,只占磁盘最前面的几百字节到几十 KB。但它的作用非常关键:
- 分区表如果坏了,数据未必立刻消失。 文件还在盘上,但系统不知道分区在哪里,也就找不到数据。
- 重建分区表(比如
parted mklabel)是高风险操作。 如果操作对象搞错了,整块盘的分区信息可能瞬间丢失。
所以虽然分区表很小,但它决定了整块盘的”地图”。地图没了,东西还在,但你找不到了。
MBR:老方案为什么能用到现在
分区表不是只有一种格式。最常见的两种是 MBR 和 GPT。先说老的。
MBR(Master Boot Record,主引导记录)是很老的分区表方案,1983 年随 IBM PC DOS 2.0 一起出现。那时候的硬盘容量小得可怜,几十 MB 就算大了。
但就是因为简单、兼容性强,MBR 到今天还能见到。老机器、老系统、一些小容量盘、U 盘镜像里,经常还是 MBR 格式。
MBR 的结构长这样:
1 | MBR 磁盘 |
MBR 位于磁盘最开头,只占一个扇区(通常是 512 字节)。这里面既包含一小段启动相关的代码(BIOS 启动时会读这段代码),也包含分区记录。
为什么 MBR 只有 4 个主分区
这是 MBR 最常被问到的问题之一。
答案其实很简单:空间不够。
MBR 固定只有 512 字节。其中 446 字节给了启动代码,2 字节给了结束标志,剩下 64 字节留给分区记录。每条分区记录 16 字节,所以只能放 4 条。
1 | 446 字节(启动代码)+ 4 × 16 字节(分区记录)+ 2 字节(标志)= 512 字节 |
4 条记录,就意味着最多描述 4 个分区。这就是主分区(Primary Partition),编号 1 到 4。
4 个分区在早期够用了。但随着硬盘变大、需求变多,4 个就不够了。于是后来发明了一个补丁方案:
- 扩展分区(Extended Partition):从 4 个主分区里拿出一个,标记为”扩展分区”。它本身不直接存数据,而是一个容器。
- 逻辑分区(Logical Partition):在扩展分区内部,再切出多个逻辑分区。编号从 5 开始。
扩展分区本身更像一个容器。
它里面再放逻辑分区。
这是一种兼容旧结构的补丁方案。
所以你可能会看到一个 MBR 磁盘上有 /dev/sdb1、/dev/sdb2、/dev/sdb3、/dev/sdb5、/dev/sdb6 这样的分区。注意没有 /dev/sdb4?可能 4 号被用作扩展分区了,也可能 4 号就是第四个主分区,5 号开始才是逻辑分区。具体情况取决于你的分区布局。
逻辑分区背后还有一种叫 EBR(Extended Boot Record)的链式结构,每个逻辑分区前面都有一个 EBR 指向下一个。不过普通使用者不需要一开始就记住它。知道”扩展分区是容器、逻辑分区在里面”就够了。
MBR 的 2TiB 限制从哪里来
除了分区数量限制,MBR 在大容量磁盘上还会遇到另一个问题:2TiB 上限。
这个问题也来自 MBR 的结构。分区记录里用来描述”分区从哪里开始”和”分区有多大”的字段,都是 32 位的。
1 | 2^32 × 512 bytes = 4,294,967,296 × 512 = 2,199,023,255,552 bytes ≈ 2 TiB |
日常大家经常说”2TB 限制”,其实更准确是 2TiB(tebibyte)左右。TiB 和 TB 有细微差别,但这里不用纠结单位。只要知道:如果磁盘容量超过 2TiB,MBR 就管不过来了。 超出的部分要么无法使用,要么会出现各种奇怪的问题。
今天的硬盘动辄 4TB、8TB、16TB,2TiB 的天花板早就不够看了。这也是 GPT 诞生的主要原因之一。
GPT:现代硬盘更常见的方案
GPT(GUID Partition Table,GUID 分区表)是为了解决 MBR 的各种限制而设计的。它最初是 UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)规范的一部分。
GPT 相比 MBR,主要解决了这几个问题:
- 分区数量限制:GPT 没有 4 个主分区的限制。虽然很多工具默认支持 128 个分区,但规范本身并没有硬性上限。
- 大容量磁盘限制:GPT 使用 64 位地址,理论上可寻址的空间远超当前任何硬盘容量。按 512 字节扇区算,上限大约是 8 ZiB。这个数字大到基本可以忽略。
- 分区表可靠性:GPT 有校验机制(CRC32),分区表头和分区条目都有校验值。如果数据损坏,可以检测出来。
- 分区类型表达能力:GPT 使用 GUID(全局唯一标识符)来标识分区类型,比 MBR 的单字节类型码丰富得多。
GPT 的结构比 MBR 复杂一些,但逻辑很清晰:
1 | GPT 磁盘 |
几个要点:
- Primary GPT Header(LBA 1):记录了磁盘的基本信息、分区条目的位置和数量、校验值等。
- Partition Entry Array(LBA 2 起):每个分区条目 128 字节,包含分区类型 GUID、分区唯一 GUID、起始和结束地址、属性标志、分区名等。UEFI 规范要求至少分配 16,384 字节给这个区域,所以按 512 字节扇区算,至少占 32 个扇区。
- Backup GPT Header 和 Backup Partition Entry Array:这是 GPT 的一个重要设计——主表和备份表。主表在磁盘开头,备份表在磁盘末尾。如果主表损坏,可以用备份表恢复。
GPT 为什么有备份表?
因为分区表太重要了。如果只有一份,一旦开头那几个扇区出问题,整块盘的分区信息就全没了。有了备份表,至少还有一道保险。
GPT 还有一个有趣的地方:每个分区条目里可以存一个分区名(最多 36 个 UTF-16 字符)。你可以给分区起个有意义的名字,比如 “Data”、”Backup”,而不是只能靠编号区分。
为什么 GPT 磁盘上还有一个 MBR
这里有一个容易让人困惑的地方:GPT 磁盘上,为什么还能看到 MBR?
用 fdisk -l 查看一块 GPT 磁盘时,你可能会注意到它仍然显示了 MBR 相关的信息。这不是 bug,而是故意设计的。
GPT 规范要求:磁盘的 LBA 0(最开头的 512 字节)仍然保留一个 MBR 结构。这个 MBR 叫做 Protective MBR(保护性 MBR)。
Protective MBR 不是用来正常分区的。它的作用是保护 GPT 数据不被老工具误删。
具体原理是这样的:Protective MBR 里有一个特殊的分区记录,类型码是 0xEE,覆盖了整块磁盘(或者 MBR 能表示的最大范围)。当一个不认识 GPT 的老工具读到这块盘时,它会看到”这块盘已经被一个分区占满了”,就不会把它当成空盘来操作。
Protective MBR 的作用不是管理分区,而是告诉老工具:别碰这块盘。
如果没有这个保护,一个只认识 MBR 的老工具可能会把 GPT 磁盘当成未分区的空盘,然后写入新的 MBR 分区表——GPT 数据就没了。
所以 GPT 磁盘上那个 MBR,不是”残留”,而是安全措施。
BIOS、UEFI、MBR、GPT 之间到底是什么关系
这四个词经常一起出现,很容易混为一谈。但它们其实不是同一类东西。
- BIOS 和 UEFI:是固件启动方式。它们解决的是”机器通电后,怎么找到并启动操作系统”。
- MBR 和 GPT:是磁盘分区表格式。它们解决的是”硬盘上的分区信息怎么记录”。
更准确地说:
BIOS 和 UEFI 解决的是”机器怎么启动操作系统”。
MBR 和 GPT 解决的是”硬盘怎么记录分区”。
它们经常一起出现,但不是一个层面的概念。
传统的搭配是 BIOS + MBR,现代的搭配是 UEFI + GPT。但这不是绝对的:
- 有些 BIOS 固件也能识别 GPT 磁盘(虽然不一定能从 GPT 磁盘启动)。
- 有些 Linux 发行版可以通过 GRUB 在 BIOS 模式下从 GPT 磁盘启动。
- Windows 方面,64 位版本从 Vista 开始支持读写 GPT,但从 GPT 启动通常需要 UEFI 固件。
所以不要写成”BIOS 只能用 MBR,UEFI 只能用 GPT”。现实比这复杂,兼容模式、引导器支持、发行版差异都会影响实际表现。
如果你是今天新装一台机器,除非有明确的兼容性需求(比如要装很老的系统),通常直接选 UEFI + GPT 就行了。
Linux 下怎么查看一块盘是 MBR 还是 GPT
说了这么多概念,来看点实际的。怎么在 Linux 下查看一块磁盘用的是哪种分区表?
方法一:用 lsblk 看大概
1 | lsblk -o NAME,SIZE,TYPE,FSTYPE,PARTTYPENAME,MOUNTPOINTS |
这个命令会列出所有块设备及其分区类型。PARTTYPENAME 列会显示分区表类型信息,但不一定很直观。
方法二:用 fdisk -l 看详情
1 | sudo fdisk -l /dev/sdX |
把 /dev/sdX 换成你要查看的设备名。输出里会有一行:
1 | Disklabel type: gpt |
或者:
1 | Disklabel type: dos |
注意:dos 就是 MBR。 Linux 的 fdisk 用 dos 来表示传统 MBR 分区表。这个命名可能让人困惑,但历史原因就是如此——MBR 最早是 DOS 时代的东西。
方法三:用 parted 查看
1 | sudo parted /dev/sdX print |
输出里会有一行:
1 | Partition Table: gpt |
或者:
1 | Partition Table: msdos |
同样,msdos 就是 MBR。
在 Linux 工具里,
dos和msdos都是指传统 MBR 分区表。
看到这两个名字,不要以为是别的东西。
几个注意事项:
/dev/sdX是占位符,不要直接复制执行。SATA/SCSI/USB 磁盘常见是/dev/sda、/dev/sdb;NVMe 磁盘常见是/dev/nvme0n1、/dev/nvme0n2。- 执行前先用
lsblk确认目标盘,不要看错设备名。真正危险的不是命令本身,而是你把对象搞错了。 - 这里只是查看,不修改磁盘。放心用。
这篇文章真正要记住什么
到这里,我们知道了硬盘上”怎么记录分区”这件事。总结一下核心要点:
- MBR 和 GPT 是分区表,不是文件系统。 分区表负责记录硬盘怎么切分,文件系统负责管理文件的存储和读取。
- MBR 是老方案,结构简单、兼容性强,但有 4 个主分区限制和 2TiB 容量限制。通过扩展分区和逻辑分区可以绕过分区数量限制,但容量限制绕不过去。
- GPT 是现代方案,支持更多分区、更大磁盘、有校验机制和备份表。如果是今天新装系统、新加数据盘,除非有明确兼容性要求,通常直接选 GPT 就可以了。
- GPT 磁盘上的 Protective MBR 是安全措施,不是残留,目的是防止老工具误操作。
- BIOS/UEFI 和 MBR/GPT 不是同一类东西。 前者是固件启动方式,后者是分区表格式。
到这里,我们只知道了硬盘上”怎么记录分区”。但真正在 Linux 里操作磁盘时,还会遇到很多实际问题:/dev/sda 和 /dev/sda1 是什么关系?fdisk 和 parted 怎么用?什么时候该用哪个?
下一篇再看这些。
参考资料
- 标题: 为什么一块硬盘还要分区?MBR 和 GPT 是什么
- 作者: Kaku
- 创建于 : 2026-06-09 12:00:00
- 更新于 : 2026-06-09 11:43:59
- 链接: https://www.kakunet.top/2026/06/09/为什么一块硬盘还要分区?MBR和GPT是什么/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。