前一阵帮公司运维一台存储服务器,要上一块16TB的机械盘做备份仓库。我习惯性地敲下 fdisk /dev/sdb,进交互界面以后突然反应过来:MBR分区表从设计上就撑不住 2TB 以上的容量,fdisk 在这种场景下根本没法把整块盘用起来。这才老老实实切到 parted,用 GPT 分区表重新规划。
如果你也遇到过"插上大容量磁盘、fdisk 却只能用到 2TB"的困境,这篇就是给你写的。文章会讲清楚 parted 为什么在大磁盘分区场景里几乎是必需品,MBR 和 GPT 到底差在哪,以及从分区、格式化到挂载、写 fstab 的完整实操流程。无论是给新盘做初始化,还是要调整已有分区,照着做基本不会踩坑。
1. 2TB这道坎:为什么大磁盘分区绕不开parted
1.1 MBR的先天限制
老牌的 fdisk 默认操作的是 MBR(Master Boot Record)分区表。这种分区表最早出现在 1980 年代初的 PC 环境里,我查过资料,它的磁盘寻址用的是 32 位 LBA 扇区编号。每个扇区按 512 字节计算,2 的 32 次方乘以 512 字节,容量上限大约是 2 TiB,换算成常见的十进制单位就是 2.2TB 左右。
这意味着什么?往一块 4TB、8TB、16TB 的盘上跑 fdisk,即使你强行把分区建出来,超过 2.2TB 的那部分空间也会被直接忽略或者产生不可预料的报错。MBR 还有另一个限制:整块磁盘最多只能有 4 个主分区。想用更多分区就只能靠扩展分区和逻辑分区绕,逻辑分区本身又多一层间接寻址,复杂不说,还容易踩容量边界。
我见过一台上古服务器,当时系统盘只有 500GB,运维用 fdisk 也够用。但今天随便一块监控盘或者下载盘都是 4TB 起步,继续守着 fdisk 就纯属自我设限。
1.2 GPT突破了什么
GPT(GUID Partition Table)是替代 MBR 的现代分区表方案。它使用 64 位 LBA 扇区编号,容量上限在很长一段时间里都不会成为瓶颈。除了容量,GPT 还有几个实打实的优势:
- 分区数量默认支持到 128 个,基本告别了"主分区不够用"的窘境。
- 分区表和备份分区表在磁盘开头和结尾各存一份,单点损坏时还有恢复机会。
- 每个分区有独立的 GUID 和名称,方便识别和管理。
- 对 UEFI 引导非常友好,现在新装系统基本都是 UEFI + GPT 组合。
关于"为什么这个场景首选 parted",核心原因其实很朴素:parted 原生支持 GPT,而且能把对 MBR 的理解很好地保留下来。GNU parted 项目的目的就是提供一个比 fdisk 更灵活的分区工具,交互逻辑直观,命令可脚本化,对 GPT 操作的支持也比传统 fdisk 完整。
可以看这张工具对比,理解一下为什么 fdisk 被很多人戏称为"古董工具":
| 特性 | fdisk | parted |
|---|---|---|
| MBR | 支持 | 支持 |
| GPT | 新版支持但提示繁琐 | 原生完整支持 |
| 分区大小上限 | 2TiB(MBR 模式下) | 受文件系统和磁盘限制 |
| 非交互 / 脚本 | 支持但写法绕 | 命令直接,天然适合脚本 |
| 分区对齐控制 | 需手动计算 | 支持百分比、MiB、扇区等多种单位 |
1.3 parted能做到的事情
先用一句话说清楚 parted 的角色:它是一个分区表管理工具,不是格式化工具。分区是"在磁盘上划定边界并记录元数据",格式化是"在划定好的边界里写入文件系统"。分工明确,后面实操时你就会体会到这种边界感。
parted 能做的事主要包括:
- 创建、删除、调整分区。
- 在 MBR 和 GPT 分区表之间切换。
- 查看磁盘整体布局和空闲空间。
- 检查分区是否对齐到最优边界。
- 以非交互模式执行单条命令,方便写自动化脚本。
它不能做的事也很明确:不能给你创建文件系统,像 ext4、xfs 这类文件系统必须用 mkfs 系列命令完成。
所以完整的磁盘使用流程应该是:parted 划分分区表 → 内核感知新分区 → mkfs 格式化 → mount 挂载 → 修改 fstab 实现开机自动挂载。后面我按这个链路一步步拆。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前的磁盘模型:parted的交互逻辑与输出解读
2.1 进入交互模式,先看懂print free
parted 支持两种使用方式:直接带参数执行单条命令,或者不带参数进入交互模式。对于还不熟悉命令的读者,建议第一次先进入交互模式操作,这样能实时看到反馈,心智负担小很多。
bash复制parted /dev/sdb
进入后提示符会变成类似 (parted) 。我先说最常用的查看命令:
bash复制(parted) print free
这条命令会列出磁盘信息、分区表和所有空闲空间。输出类似这样:
code复制Model: ATA WDC WD160EDGZ-11 (scsi)
Disk /dev/sdb: 16.0TB
Sector size (logical/physical): 512B / 4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
17.4kB 16.0TB 16.0TB Free Space
这个输出信息量很大。Partition Table: gpt 说明当前磁盘已经是 GPT 分区表;如果是 msdos 就说明还是 MBR。Sector size 里的 `512B / 40
