parted 是一个强大的命令行磁盘分区和分区表管理工具,与 fdisk 相比,parted 更适合处理大容量磁盘(超过 2TB),并且支持多种分区表格式,操作也更为灵活。

核心概念
在开始使用 parted 之前,需要了解几个关键概念:
- 设备:指的是你的硬盘或块设备,
/dev/sda,/dev/nvme0n1。 - 分区表:定义了磁盘上分区布局的“蓝图”。
parted主要支持两种:- MBR (Master Boot Record):传统的分区表格式,最多支持 4 个主分区,或者 3 个主分区 + 1 个扩展分区(扩展分区里可以包含多个逻辑分区),最大支持 2TB 的磁盘。
- GPT (GUID Partition Table):现代分区表格式,没有数量和容量限制,支持分区唯一标识符,是 UEFI 启动的标准配置。
- 分区:在磁盘上划分出的逻辑区域,可以格式化并挂载使用。
- 单位:
parted默认使用 sectors (扇区) 作为单位,一个扇区通常是 512 字节或 4096 字节(对于高级格式化硬盘),你也可以使用更人性化的单位,如B(字节),KB,MB,GB,TB, (百分比),cyl(柱面) 等。
基本用法
parted 有两种使用模式:
- 交互式模式:直接输入
parted命令,进入一个提示符环境,适合进行一系列操作。 - 命令行模式:在命令后直接跟上子命令和参数,适合一次性执行简单任务。
强烈推荐使用交互式模式,因为它能提供更好的提示和反馈。
启动 parted
sudo parted /dev/sdX # 将 sdX 替换为你的设备名,sda, sdb, nvme0n1p1 等
注意:对磁盘进行分区操作需要管理员权限,因此必须使用 sudo。

进入交互式模式后,你会看到类似下面的提示符:
(parted)
查看帮助
在 (parted) 提示符下,输入 help 或 可以查看所有可用命令。
(parted) help
查看磁盘信息
这是使用 parted 的第一步,用来了解磁盘的当前状态。
(parted) print
或者使用缩写 p:

(parted) p
输出示例 (GPT 分区表):
Model: ATA SanDisk Ultra 3 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 boot, esp
2 538MB 1000GB 1000GB ext4
输出示例 (MBR 分区表):
Model: WDC WD10EZEX-60M2NA0 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 106MB 105MB primary fat16 boot, lba
2 106MB 1000GB 1000GB primary ext4
核心操作流程
下面是一个典型的分区操作流程,以一块全新的 20GB 磁盘 /dev/sdb 为例。
步骤 1:选择磁盘并查看状态
sudo parted /dev/sdb (parted) print
如果磁盘是全新的,输出可能显示 Partition Table: msdos 或 unknown。
步骤 2:设置分区表格式
对于现代系统,强烈推荐使用 GPT。
(parted) mklabel gpt
如果你确实需要使用 MBR,则使用:
(parted) mklabel msdos
警告:
mklabel命令会擦除磁盘上的所有数据!执行前请确保数据已备份或磁盘是全新的。
步骤 3:创建分区
交互式创建
使用 mkpart 命令,它会提示你输入文件系统和起始/结束位置。
(parted) mkpart Partition name? []? my_root_partition File system type? [ext4]? Start? [2048s]? 1MiB End? [20.5GB]? 10GiB
这里的 s 代表 sector(扇区)。1MiB 是一个很好的起始位置,可以避免一些 BIOS/UEFI 的对齐问题。
命令行参数创建
直接在命令中指定所有参数,更快捷。
# 创建一个 1GB 的 FAT32 分区,用于启动 (parted) mkpart primary fat32 1MiB 1GiB # 创建一个主分区,从 1GiB 到 20GiB,文件系统暂时未知 (parted) mkpart primary ext4 1GiB 20GiB
注意:在 GPT 下,
mkpart的第一个参数(分区类型)通常是primary或logical,但在 GPT 中这只是一个标签,实际意义不大,在 MBR 下,primary和logical是有区别的。
步骤 4:设置分区标志
分区标志用于指定分区的特殊用途,boot, esp, swap, lvm 等。
boot:用于 BIOS 启动。esp:用于 UEFI 系统的 EFI 系统分区。swap:用于交换分区。
# 假设第一个分区是 ESP (EFI System Partition) (parted) set 1 esp on # 假设第二个分区是启动分区 (parted) set 2 boot on # 假设第三个分区是交换分区 (parted) set 3 swap on
这里的 1, 2, 3 是分区的编号。
步骤 5:查看分区表
创建完分区后,务必再次使用 print 查看结果,确保一切正确。
(parted) print
输出示例:
Model: Virtual Disk (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB fat32 esp
2 1074MB 11.1GB 10.0GB my_root_partition
步骤 6:退出 parted
确认无误后,退出 parted。
(parted) quit
步骤 7:格式化分区
parted 只负责创建分区,不负责格式化,你需要使用 mkfs 系列命令来格式化分区。
# 格式化第一个分区为 FAT32 sudo mkfs.vfat -F 32 /dev/sdb1 # 格式化第二个分区为 ext4 sudo mkfs.ext4 /dev/sdb2 # 格式化第三个分区为 swap sudo mkswap /dev/sdb3
步骤 8:挂载分区
格式化完成后,就可以创建挂载点并挂载使用了。
# 创建挂载点 sudo mkdir /mnt/mydisk # 挂载 ext4 分区 sudo mount /dev/sdb2 /mnt/mydisk # 挂载 ESP 分区 sudo mkdir /boot/efi sudo mount /dev/sdb1 /boot/efi # 启用 swap 分区 sudo swapon /dev/sdb3
常用命令速查表
| 命令 | 描述 | 示例 |
|---|---|---|
print (或 p) |
打印当前设备的分区表信息 | (parted) print |
unit <unit> |
设置默认的显示单位 | (parted) unit GB |
mklabel <type> |
创建新的分区表 | (parted) mklabel gpt |
mkpart |
创建新分区 | (parted) mkpart primary ext4 1GiB 10GiB |
rm <num> |
删除分区 | (parted) rm 2 |
set <num> <flag> <on/off> |
设置或取消分区的标志 | (parted) set 1 boot on |
rescue <start> <end> |
尝试恢复一个可能丢失的分区 | (parted) rescue 100MiB 200MiB |
quit |
退出 parted | (parted) quit |
注意事项与最佳实践
- 数据备份:在操作任何包含重要数据的磁盘之前,务必备份!
parted的误操作可能会导致数据永久丢失。 - GPT 优先:对于新系统,尤其是 UEFI 启动的系统,始终使用 GPT 分区表。
- 对齐:现代硬盘(尤其是 SSD 和大容量 HDD)有扇区对齐的要求(通常是 4K 或 1M),从
1MiB开始创建分区通常是一个安全的选择,可以避免性能下降。 - 谨慎使用
rm:rm命令会立即删除分区,数据不会进入回收站,删除前请用print确认分区编号是否正确。 - 处理损坏的 GPT:有时 GPT 表可能损坏,但分区数据还在,可以使用
rescue命令尝试找回分区。
高级示例:调整分区大小
parted 也可以调整分区大小,但风险极高,同样需要备份。
假设我们要将 /dev/sdb2 分区从 10GB 扩展到 20GB。
-
确保文件系统可以在线调整大小:
ext4通常可以,但xfs或btrfs可能需要卸载或使用特定工具。 -
缩小文件系统:在扩大分区前,最好先缩小文件系统本身,以防数据损坏。
# 先卸载分区 sudo umount /dev/sdb2 # 检查文件系统 sudo e2fsck -f /dev/sdb2 # 缩小文件系统到 8GB sudo resize2fs /dev/sdb2 8G
-
使用 parted 调整分区大小:
sudo parted /dev/sdb (parted) print (parted) resizepart 2 20GiB # 将分区2调整为20GB结束 (parted) print (parted) quit
-
扩展文件系统:
# 检查文件系统 sudo e2fsck -f /dev/sdb2 # 将文件系统扩展到分区最大大小 sudo resize2fs /dev/sdb2 # 重新挂载 sudo mount /dev/sdb2 /mnt/mydisk
希望这份详细的指南能帮助你熟练掌握 parted 命令!
