Parted
GNU Parted 是一个用于创建和操作分区表的程序。 GParted 是一个图形化前端。
安装
安装 以下软件包之一
用法
Parted 有两种模式:命令行和交互式。 Parted 应该始终使用以下命令启动
# parted device
其中 device
是 块设备 名称,例如 /dev/sda
、/dev/nvme0n1
、/dev/mmcblk0
等。 如果您省略 device
参数,parted 将尝试猜测您想要的设备。
命令行模式
在命令行模式下,此命令后跟一个或多个命令。 例如
# parted /dev/sda --script mklabel gpt mkpart P1 ext3 1MiB 8MiB
--help
)只能在命令行中指定。交互模式
交互模式简化了分区过程,并通过自动将所有分区命令应用于指定设备来减少不必要的重复操作。
为了开始在设备上操作,请执行
# parted /dev/sdx
您会注意到命令行提示符从井号 (#
) 变为 (parted)
:这也意味着新提示符不是在示例中运行命令时要手动输入的命令。
要查看可用命令列表,请输入
(parted) help
完成后,或者如果希望为另一个设备实现分区表或方案,请使用以下命令退出 parted
(parted) quit
退出后,命令行提示符将更改回 #
。
如果您没有为命令提供参数,Parted 将提示您输入。 例如
(parted) mklabel New disk label type? gpt
舍入
由于许多分区系统都有复杂的约束,Parted 通常会做一些与您要求略有不同的事情。 (例如,创建一个从 10.352Mb 而不是 10.4Mb 开始的分区)如果计算值相差太大,Parted 会要求您确认。 如果您确切知道自己想要什么,或者想确切地了解 Parted 在做什么,那么以扇区(带有“s”后缀)指定分区端点并给出“unit s”命令会很有帮助,以便分区端点以扇区显示。
从 parted-2.4 开始,当您使用 IEC 二进制单位(如 “MiB”、“GiB”、“TiB” 等)指定起始值和/或结束值时,parted 将这些值视为精确值,并且等效于以字节为单位(即带有 “B” 后缀)指定的相同数字,因为它不提供“有帮助”的草率范围。 与之形成对比的是,分区起始请求 “4GB” 实际上可能会解析为该点前后高达 500MB 的某个扇区。 因此,在创建分区时,您应该首选指定字节单位(“B”)、扇区单位(“s”)或 IEC 二进制单位(如 “MiB”),但不要使用 “MB”、“GB” 等。
分区
创建新的分区表
- 在分区之前,检查您的 NVMe 驱动器和高级格式硬盘驱动器是否正在使用最佳逻辑扇区大小。
- 考虑在分区 SSD 之前执行SSD 内存单元清除。
当设备以前从未分区过,或者当您想要更改其分区表的类型时,您需要(重新)创建设备的分区表。 当分区方案需要从头开始重组时,重新创建设备的分区表也很有用。
使用以下命令打开每个必须(重新)创建分区表的设备
# parted /dev/sdx
然后,要创建新的 GUID 分区表,请使用以下命令
(parted) mklabel gpt
要创建新的 主引导记录/MS-DOS 分区表,请改用
(parted) mklabel msdos
分区方案
您可以决定设备应拆分成的分区数量和大小,以及哪些目录将用于挂载已安装系统中的分区(也称为挂载点)。 有关所需分区,请参阅分区#分区方案。
以下命令将用于创建分区
(parted) mkpart part-type-or-part-label fs-type start end
part-type-or-part-label
根据分区表以不同的方式解释- MBR:该参数被解释为
part-type
,可以是primary
、extended
或logical
之一。 - GPT:该参数被解释为
part-label
,它设置分区的 PARTLABEL 属性。 要避免设置分区标签,请传递一个空引号字符串 (""
)。注意: Web 上的许多教程都使用以mkpart primary
开头的命令,即使对于 GPT 也是如此。 它们是错误的,这会将 “primary” 设置为分区标签。
- MBR:该参数被解释为
fs-type
是从输入help mkpart
列出的标识符中选择的,作为与您将使用的文件系统最接近的匹配项。 mkpart 命令实际上并不创建文件系统:parted 将仅使用fs-type
参数来设置 GPT 分区的分区类型 GUID 或 MBR 分区的分区类型 ID。提示- parted 将以 Linux 本地文件系统命名的类型映射到相同的 “Linux filesystem” 分区类型(GUID
0FC63DAF-8483-4772-8E79-3D69D8477DE4
或 ID0x83
),因此例如为 ext4 格式的分区使用ext2
是完全安全的。 - 当使用 GPT 时,建议遵循可发现分区规范,因为systemd-gpt-auto-generator 可以自动挂载它们。 EFI 系统分区、XBOOTLDR 分区、交换分区和 home 分区类型可以使用set 命令更改,而对于根分区和其他分区,您将需要使用
type
命令手动指定分区类型 UUID。
- parted 将以 Linux 本地文件系统命名的类型映射到相同的 “Linux filesystem” 分区类型(GUID
start
是分区从设备开头开始的位置。 它由一个数字后跟一个单位组成,例如1MiB
表示从 1 MiB 开始。end
是分区从设备开头结束的位置(不是从start
值开始)。 它具有与start
相同的语法,例如100%
表示在设备末尾结束(使用所有剩余空间)。
- 在具有 MBR 分区表的磁盘上,在磁盘末尾至少保留 33 个 512 字节的扇区(16.5 KiB)的空闲未分区空间,以允许在 MBR 和 GPT 之间转换。
- 如果您不想在设备中留下未使用的空间,请确保每个分区都从上一个分区结束的位置开始。
- parted 不支持指定相对于上一个分区的分区的开始和结束位置。 请参阅bug #59176 和 bug #55841。
- parted 可能会发出类似如下的警告
Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel?在这种情况下,请阅读分区#分区对齐并按照#对齐进行修复。
以下命令将用于标记包含 /boot
目录的分区为可引导
(parted) set partition boot on
partition
是要标记的分区的编号(请参阅print
命令的输出)。esp
是 GPT 上boot
的别名。 [2]legacy_boot
设置旧版 BIOS 可引导属性。 此属性由 syslinux[3] 和其他具有传统 PC-AT BIOS 固件实现的软件使用。[4]
UEFI/GPT 示例
在每个实例中,都需要一个特殊的可引导EFI 系统分区。
如果创建新的 EFI 系统分区,请使用以下命令(建议大小至少为 1 GiB)
(parted) mkpart "EFI system partition" fat32 1MiB 1025MiB (parted) set 1 esp on
剩余的分区方案完全取决于您。 对于使用 100% 剩余空间的一个根分区
(parted) mkpart "root partition" ext4 1025MiB 100% (parted) type 2 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
对于单独的交换分区 (4 GiB) 和 /
分区(所有剩余空间)
(parted) mkpart "swap partition" linux-swap 1025MiB 5121MiB (parted) mkpart "root partition" ext4 5121MiB 100% (parted) type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
以及对于单独的交换分区 (4 GiB)、/
分区 (32 GiB) 和 /home
分区(所有剩余空间)
(parted) mkpart "swap partition" linux-swap 1025MiB 5121MiB (parted) mkpart "root partition" ext4 5121MiB 37889MiB (parted) type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 (parted) mkpart "home partition" ext4 37889MiB 100% (parted) set 4 linux-home on
BIOS/MBR 示例
对于使用所有可用磁盘空间的最小单个主分区,将使用以下命令
(parted) mkpart primary ext4 1MiB 100% (parted) set 1 boot on
在以下实例中,将创建一个 4 GiB 的交换分区,后跟一个使用所有剩余空间的 /
分区
(parted) mkpart primary linux-swap 1MiB 4097MiB (parted) mkpart primary ext4 4097MiB 100% (parted) set 2 boot on
在下面的最后一个示例中,将创建单独的 /boot
分区 (1 GiB)、交换分区 (4 GiB)、/
分区 (32 GiB) 和 /home
分区(所有剩余空间)
(parted) mkpart primary ext4 1MiB 1025MiB (parted) set 1 boot on (parted) set 1 bls_boot on (parted) mkpart primary linux-swap 1025MiB 5121MiB (parted) mkpart primary ext4 5121MiB 37889MiB (parted) mkpart primary ext4 37889MiB 100%
调整分区大小
如果您要扩大分区,则必须先调整分区大小,然后再调整其上的文件系统大小,而对于缩小分区,必须在分区之前调整文件系统大小,以避免数据丢失。
扩大分区
要扩大分区(在 parted 交互模式下)
(parted) resizepart number end
其中 number
是您要扩大的分区的编号,而 end
是分区的新末尾(需要大于旧末尾)。
然后,要扩大分区上的 (ext2/3/4) 文件系统(如果未指定 size
,则默认大小为分区的大小)
# resize2fs /dev/sdaX size
或扩大 Btrfs 文件系统
# btrfs filesystem resize size /path/to/mount/point
其中 /path/to/mount/point
代表您要扩大的分区的挂载点,而 size
采用 16G
或 +1G
形式,是分区的新大小或修改量。 使用 max
填充分区上的剩余空间。
缩小分区
要缩小分区上的 ext2/3/4 文件系统
# resize2fs /dev/sdaX size
要缩小 Btrfs 文件系统
# btrfs filesystem resize size /path/to/mount/point
其中 /path/to/mount/point
代表您要缩小的分区的挂载点,而 size
是分区的新大小。
然后缩小分区(在 parted 交互模式下)
(parted) resizepart number end
其中 number
是您要缩小的分区的编号,而 end
是分区的新末尾(需要小于旧末尾)。
完成后,使用 util-linux 中的 resizepart 命令来告知内核新的大小
# resizepart device number size
其中 device
是保存分区的设备,number
是分区的编号,size
是分区的新大小,以 512 字节扇区为单位。
已知问题
Parted 总是会在执行可能危险的操作之前警告您,除非该命令是那些本质上危险的命令之一(例如 rm、mklabel 和 mkpart)。
对齐
创建分区时,parted 可能会警告分区对齐不正确,但不会提示正确的对齐方式。 例如
(parted) mkpart primary fat16 0 32M Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel?
该警告意味着分区起始位置未对齐。 输入 “Ignore” 以继续,以扇区打印分区表以查看其起始位置,并删除/重新创建分区,并将起始扇区向上舍入为 2 的递增幂,直到警告停止。 例如,在具有 512B 扇区的闪存驱动器上,Parted 希望分区从 2048 的倍数的扇区开始,即 1 MiB 对齐。
如果您希望 parted 尝试为您计算正确的对齐方式,请将起始位置指定为 0% 而不是某个具体值。 要创建一个大的 ext4 分区,您的命令将如下所示
(parted) mkpart primary ext4 0% 100%
技巧与诀窍
检查对齐
在已分区的磁盘上,您可以使用 parted 验证设备上分区的对齐情况。 例如,要验证 /dev/sda
上分区 1 的对齐情况
# parted /dev/sda (parted) align-check optimal 1 1 aligned