77·存储管理进阶

parted 与 GPT 分区

partedgpt

第77课 - parted 与 GPT 分区

学习目标

完成本课学习后,你将能够:

  1. 理解 GPT 分区表相对于传统 MBR 的优势。
  2. 掌握使用 parted 工具的交互模式和命令行模式进行磁盘分区。
  3. 了解在什么场景下应该选择 parted 而不是 fdisk
  4. 完成一个使用 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 分区的基本流程如下:

  1. 启动 parted 并指定目标磁盘。
  2. 创建新的分区表(如果需要)。类型指定为 gpt
  3. 创建分区,指定起始点、结束点(或大小)和类型。
  4. 设置分区标志(如 msftdatalvm),这通常是为了兼容性或特定用途。
  5. 退出并保存

代码示例

以下示例将在虚拟磁盘 /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 分区表,并创建一个占用整个磁盘的主分区。

要求

  1. 进入交互模式操作。
  2. 分区标签类型设为 gpt
  3. 创建一个分区,起始点为 1MiB(为对齐保留),结束点为 100%。
  4. 打印最终的分区表信息。

练习 2:分区调整

假设练习 1 中的 /dev/sdc 只有一个分区 sdc1。现在你想将它缩小,并在其后面创建第二个 5GB 的分区。 提示:使用 resize 命令。resize NUMBER START END要求

  1. sdc1 缩小到只占用前 5GB 空间。
  2. 在空出的空间里创建 sdc2,大小为 5GB。
  3. 验证最终结果。

练习 3:自动化脚本

使用 parted命令行模式,在 /dev/sdd 上完成以下任务,所有操作通过一行命令(或一个简短脚本)完成:

  1. 创建 GPT 分区表。
  2. 创建两个分区:part1(1GB)和 part2(剩余空间)。
  3. 打印结果。

参考命令结构

sudo parted /dev/sdd mklabel gpt mkpart primary 1MiB 1024MiB mkpart primary 1024MiB 100% print

常见错误

  1. “Error: /dev/sdx: unrecognised disk label”

    • 原因:磁盘没有有效的分区表(例如新盘)。
    • 解决:这通常是正常的,只需用 mklabel 命令创建新表即可。
  2. 在已有MBR分区表的磁盘上直接创建GPT分区

    • 错误做法:不先 mklabel 就直接 mkpart
    • 正确做法:必须先用 mklabel gpt 切换到GPT表,这会销毁所有现有数据
  3. 单位混淆

    • parted 支持多种单位:MBMiBGBGiB% 等。
    • 注意MiB (Mebibyte, 2^20 bytes) 通常比 MB (Megabyte, 10^6 bytes) 大约多4.8%。为了更好的对齐和性能,建议统一使用 MiBGiB%
  4. 忘记对齐分区

    • 现代硬盘(尤其是SSD)对分区对齐有要求。不正确的对齐会降低性能。
    • 建议:起始点不要设为 0MB,使用 1MiB0% 是更好的选择,它们通常能自动对齐到磁盘的物理扇区边界。
  5. 误操作后无法恢复

    • parted 的很多操作(如 mklabelrm)是即时生效的,没有类似 fdisk 中“最后不写入就退出”的安全机制。
    • 重要:操作前务必用 print 确认目标磁盘,并确保备份重要数据。

小结

  • GPT 是现在和未来:当你的硬盘大于2TB,或者需要超过4个主分区时,必须使用 GPT。parted 是管理 GPT 分区的标准工具。
  • parted 功能强大:它既可以交互式使用,也可以通过命令行参数用于脚本自动化,比 fdisk 更灵活。
  • 操作流程关键mklabel gpt -> mkpart -> (可选) set -> quit
  • 安全第一parted 的操作大多不可逆,对磁盘操作前务必再三确认目标设备,并做好数据备份。

下一步:有了分区之后,就像有了一个房间的隔断。下一步(第78课),我们需要为每个分区创建“文件系统”(相当于给房间铺上地板、刷上油漆),然后才能“挂载”到目录树中使用。我们将学习 mkfs 命令。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「创建文件系统与挂载」 以巩固所学知识。