第77课 - parted 与 GPT 分区
学习目标
完成本课学习后,你将能够:
- 理解 GPT 分区表相对于传统 MBR 的优势。
- 掌握使用
parted工具的交互模式和命令行模式进行磁盘分区。 - 了解在什么场景下应该选择
parted而不是fdisk。 - 完成一个使用
parted创建 GPT 分区方案的完整操作。
核心概念
1. 为什么需要 GPT 和 parted?
上一课我们学习了使用 fdisk 进行 MBR 分区。MBR 是一种古老的标准,存在两个主要限制:
- 容量限制:最大只能管理 2TB 的硬盘。想象一下,现在一块 4TB 的硬盘很常见,用 MBR 就会浪费一半空间。
- 分区数量限制:主分区最多只能有 4个(可以通过创建扩展分区来解决,但操作复杂)。
GPT (GUID Partition Table) 是现代的分区标准,它突破了这些限制:
- 支持最大 8ZB (1ZB = 10亿TB) 的磁盘,未来几十年都够用。
- 默认支持 128个 主分区(可通过工具调整),无需区分主分区和扩展分区。
- 提供冗余备份(主分区表+备份分区表),数据更安全。
fdisk 工具主要用于 MBR 分区。要创建和管理 GPT 分区,我们通常使用更强大的 parted 工具。
2. parted 的两种使用模式
- 交互模式:输入
parted /dev/sdX进入,然后输入命令逐步操作。适合学习和单次手动操作。 - 命令行模式:直接在命令行参数中传递所有指令,一步完成操作。适合编写自动化脚本。
3. 核心操作流程
使用 parted 进行 GPT 分区的基本流程如下:
- 启动
parted并指定目标磁盘。 - 创建新的分区表(如果需要)。类型指定为
gpt。 - 创建分区,指定起始点、结束点(或大小)和类型。
- 设置分区标志(如
msftdata或lvm),这通常是为了兼容性或特定用途。 - 退出并保存。
代码示例
以下示例将在虚拟磁盘 /dev/sdb 上演示如何使用 parted 创建一个包含两个分区的 GPT 方案。
重要提示:请勿在包含重要数据的磁盘上练习!请使用虚拟机或空白磁盘。
# 1. 启动parted的交互模式,并指定操作的磁盘为 /dev/sdb
sudo parted /dev/sdb
进入 parted 交互环境后,你会看到 (parted) 提示符,接下来输入以下命令:
# 2. 查看当前磁盘信息(如果有旧分区,你会看到它们)
(parted) print
# 3. 创建一个新的GPT分区表。这会清除磁盘上所有现有数据!
(parted) mklabel gpt
# 4. 创建第一个分区:从默认起点开始,大小为512MB,类型为 “msftdata” (相当于常见的数据分区)
(parted) mkpart primary 0MB 512MB
# 5. 创建第二个分区:紧接着第一个分区,直到磁盘末尾,类型为 “lvm” (逻辑卷管理)
(parted) mkpart primary 512MB 100%
# 6. 为第二个分区设置 “lvm” 标志(这是一个可选的常见操作)
(parted) set 2 lvm on
# 7. 再次打印分区表,查看我们的操作结果
(parted) print
# 8. 退出parted,更改会自动保存
(parted) quit
在退出交互模式后,我们可以验证操作结果:
# 使用lsblk或fdisk -l查看新创建的分区
lsblk /dev/sdb
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sdb 8:16 0 20G 0 disk
# ├─sdb1 8:17 0 512M 0 part
# └─sdb2 8:18 0 19.5G 0 part
# 使用parted的命令行模式查看分区信息
sudo parted /dev/sdb print
实践练习
练习 1:基础创建
使用 parted 在 /dev/sdc(假设为新虚拟磁盘)上创建一个 GPT 分区表,并创建一个占用整个磁盘的主分区。
要求:
- 进入交互模式操作。
- 分区标签类型设为
gpt。 - 创建一个分区,起始点为 1MiB(为对齐保留),结束点为 100%。
- 打印最终的分区表信息。
练习 2:分区调整
假设练习 1 中的 /dev/sdc 只有一个分区 sdc1。现在你想将它缩小,并在其后面创建第二个 5GB 的分区。
提示:使用 resize 命令。resize NUMBER START END。
要求:
- 将
sdc1缩小到只占用前 5GB 空间。 - 在空出的空间里创建
sdc2,大小为 5GB。 - 验证最终结果。
练习 3:自动化脚本
使用 parted 的命令行模式,在 /dev/sdd 上完成以下任务,所有操作通过一行命令(或一个简短脚本)完成:
- 创建 GPT 分区表。
- 创建两个分区:
part1(1GB)和part2(剩余空间)。 - 打印结果。
参考命令结构:
sudo parted /dev/sdd mklabel gpt mkpart primary 1MiB 1024MiB mkpart primary 1024MiB 100% print
常见错误
-
“Error: /dev/sdx: unrecognised disk label”:
- 原因:磁盘没有有效的分区表(例如新盘)。
- 解决:这通常是正常的,只需用
mklabel命令创建新表即可。
-
在已有MBR分区表的磁盘上直接创建GPT分区:
- 错误做法:不先
mklabel就直接mkpart。 - 正确做法:必须先用
mklabel gpt切换到GPT表,这会销毁所有现有数据。
- 错误做法:不先
-
单位混淆:
parted支持多种单位:MB、MiB、GB、GiB、%等。- 注意:
MiB(Mebibyte, 2^20 bytes) 通常比MB(Megabyte, 10^6 bytes) 大约多4.8%。为了更好的对齐和性能,建议统一使用MiB、GiB或%。
-
忘记对齐分区:
- 现代硬盘(尤其是SSD)对分区对齐有要求。不正确的对齐会降低性能。
- 建议:起始点不要设为
0MB,使用1MiB或0%是更好的选择,它们通常能自动对齐到磁盘的物理扇区边界。
-
误操作后无法恢复:
parted的很多操作(如mklabel、rm)是即时生效的,没有类似fdisk中“最后不写入就退出”的安全机制。- 重要:操作前务必用
print确认目标磁盘,并确保备份重要数据。
小结
- GPT 是现在和未来:当你的硬盘大于2TB,或者需要超过4个主分区时,必须使用 GPT。
parted是管理 GPT 分区的标准工具。 parted功能强大:它既可以交互式使用,也可以通过命令行参数用于脚本自动化,比fdisk更灵活。- 操作流程关键:
mklabel gpt->mkpart-> (可选)set->quit。 - 安全第一:
parted的操作大多不可逆,对磁盘操作前务必再三确认目标设备,并做好数据备份。
下一步:有了分区之后,就像有了一个房间的隔断。下一步(第78课),我们需要为每个分区创建“文件系统”(相当于给房间铺上地板、刷上油漆),然后才能“挂载”到目录树中使用。我们将学习 mkfs 命令。