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 属性。要避免设置分区标签,请传递一个空的带引号的字符串 ("")。注意 网上许多教程使用的命令都以mkpart primary开头,即使是 GPT。它们是错误的,这会将“primary”设置为分区标签。
- MBR:该参数被解释为
fs-type是通过输入help mkpart列出的标识符中选择的最接近您将使用的文件系统的标识符。mkpart 命令实际上不会创建文件系统:fs-type 参数仅用于 parted 设置 GPT 分区的 分区类型 GUID 或 MBR 分区的 分区类型 ID。提示- parted 将以 Linux 原生文件系统命名的类型映射到相同的“Linux filesystem”分区类型(GUID
0FC63DAF-8483-4772-8E79-3D69D8477DE4或 ID0x83),因此例如使用ext2来格式化为 ext4 的分区是完全安全的。 - 使用 GPT 时,建议遵循 可发现分区规范,因为 systemd-gpt-auto-generator 可以自动挂载它们。EFI 系统分区、XBOOTLDR 分区、swap 分区和 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设置 Legacy 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
对于单独的 swap (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
对于单独的 swap (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 的 swap 分区,然后创建一个使用所有剩余空间的 / 分区
(parted) mkpart primary linux-swap 1MiB 4097MiB (parted) mkpart primary ext4 4097MiB 100% (parted) set 2 boot on
在下面的最后一个示例中,将创建单独的 /boot (1 GiB)、swap (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