Parted

来自 Arch Linux 中文维基

GNU Parted 是创建和处理分区表的程序。GParted 是 GUI 前端。

安装[编辑 | 编辑源代码]

安装下列任一软件包:

  • parted – 仅命令行版本
  • gpartedparted 的图形化前端
注意:Wayland 下运行 GParted 同时需要安装 xorg-xhost 可选包。更多信息请参考 [1]

使用[编辑 | 编辑源代码]

Parted 有两种模式:命令行模式和交互模式,请用下面命令启动:

# parted device

其中 device 是要编辑的 块设备(例如 /dev/sda/dev/nvme0n1/dev/mmcblk0 等)。如果你缺省了 device 参数,parted 将尝试猜测要使用的设备。

命令行模式[编辑 | 编辑源代码]

在命令行模式下,可以同时执行一个或多个命令:

# parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB 
注意: --help 等参数只有在命令行中才能指定。

交互模式[编辑 | 编辑源代码]

交互模式简化了分区过程,并自动将所有命令应用到指定的设备上,无需反复指定目标设备。

In order to start operating on a device, execute:

# parted /dev/sdx

命令提示符会从 (#) 变成 (parted):这也意味着无需将新的命令提示符作为命令的一部分进行输入。

要查看可用的命令,输入:

(parted) help

完成操作后,或是要对另一个设备创建分区表或格式时,用下面命令退出:

(parted) quit

退出后命令提示符会变回到 #

如果命令没带参数,Parted 会进行询问:

(parted) mklabel
New disk label type? gpt

数值设定[编辑 | 编辑源代码]

很多分区系统有复杂的限制,Parted 可能会对输入的数值进行稍微的修改。例如设定了 10.4Mb,实际会使用 10.352Mb。如果修正后的数值差异太大,Parted 会进行提示确认。如果你有需要指定数值,或是想看看 Parted 所做的操作,可以用扇区值加上“s”后缀指定数值,并使用“unit s”命令让分区信息以扇区值为单位显示。

从 parted-2.4 开始,当使用 “MiB”, “GiB”, “TiB” 等 IEC 单位时,parted 会使用与对应的字节值(即“B”后缀)相同的精确数值,不进行任何修正。而使用“4GB”这样的值时,可能会落到最大前后相差 500MB 的位置上。因此,在创建分区时,建议使用字节(“B”),扇区(“s”)或是像“MiB”这样的 IEC 二进制单位,而不是“MB”,“GB”等。

分区[编辑 | 编辑源代码]

创建新分区表[编辑 | 编辑源代码]

警告: 如果你在存有数据的硬盘上创建新分区表,硬盘上所有数据都会被清楚。因此,在进行操作前请再次进行确认。
提示:在分区前,检查你的 NVMe 硬盘和先进格式硬盘是否使用了最佳逻辑扇区大小

如果一个硬盘没有做过分区,或者是你想要修改分区表的类型,你需要为对应的设备创建/重建分区表。另外,对于分区方案要完全重建的设备来说,重建分区表也很有用。

用下面的命令打开要创建/重建分区表的设备:

# parted /dev/sdx

使用以下命令创建 GUID 分区表

(parted) mklabel gpt

使用下列命令创建 MBR/MS-DOS 分区表:

(parted) mklabel msdos

分区方案[编辑 | 编辑源代码]

这篇文章的某些内容需要扩充。

原因: 将所有的百分数替换为已对齐的特定 MiB 值,以防止 对齐问题。同时也提醒这一问题。 (在 Talk:Installation guide#Remove parted 中讨论)

你可以决定磁盘分区的数量和各自的大小,以及分区应挂载到安装的系统上哪些文件夹(一般称为挂载点)。可以在分区#分区方案查看具体需要的分区。

创建分区将用到如下命令:

(parted) mkpart part-type-or-part-label fs-type start end
  • 根据分区表的不同,part-type-or-part-label 有不同的解释:
    • MBR:参数被用作为分区类型,可选值为 primaryextendedlogical
    • GPT:参数被用作为 part-label,即分区的 PARTLABEL 参数。如果想不设置分区标签,可以使用引上的空字符("")。
      注意: 网上的很多教程对 GPT 也使用了 mkpart primary 开头的错误命令,这一命令会将分区标签设置为“primary”。
  • fs-typehelp mkpart 命令显示的标识符中最接近使用的文件系统的一项。mkpart 命令并不会创建文件系统:fs-type 参数只是简单地被 parted 用于为 GPT 分区设置分区类型 GUID 或是为 MBR 分区设置分区类型 ID
    提示:parted 将 Linux 原生文件系统都映射为同一“Linux 文件系统”分区类型(GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4 或是 ID 0x83),所以可以安全地进行例如为 ext4 格式的分区使用 ext2 类型的操作。
  • start 是相对于设备起始位置的分区开始位置,由一个数字加上单位组成,例如 1MiB 值从 1 MiB 的位置开始。
  • end 是相对于设备起始位置的分区结束位置(不是start 的值开始)。它的格式与 start 相同,例如 100% 表示到设备的末端(使用所有剩余空间)。
提示:
  • 对于使用 MBR 分区表的硬盘,建议在硬盘末端留下至少 33 个 512-byte 扇区(16.5 KiB)的未分区空间,以保证 MBR 与 GPT 间转换的兼容性。
  • 为了不留空隙,分区的开始和结束应该首尾相连。
注意: 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]

这篇文章的某些内容需要扩充。

原因: 讲解 bootlegacy_bootesp 标记及它们在 MBR 和 GPT 上的不同用例。 (在 Talk:Parted 中讨论)

UEFI/GPT 示例[编辑 | 编辑源代码]

在每一个实例上都需要一个特殊的 EFI 系统分区

首先需要一个 EFI 系统分区.如果是和 Windows 双系统启动,此分区已经存在,不要重新创建。

使用如下命令创建新的 EFI 系统分区(建议至少 300 MiB):

(parted) mkpart "EFI system partition" fat32 1MiB 301MiB
(parted) set 1 esp on

剩下的空间可以随你决定,例如完全用在一个分区上:

(parted) mkpart "my partition label" ext4 301MiB 100%

如果要拆分为 /(20 GiB)和 /home(剩余所有空间)两个分区:

(parted) mkpart "root partition" ext4 301MiB 20.5GiB
(parted) mkpart "home partition" ext4 20.5GiB 100%

如果要拆分为 /(20 GiB),swap(4 GiB)和 /home(剩余所有空间)三个分区:

(parted) mkpart "root partition" ext4 301MiB 20.5GiB
(parted) mkpart "swap partition" linux-swap 20.5GiB 24.5GiB
(parted) mkpart "home partition" ext4 24.5GiB 100%

BIOS/MBR 示例[编辑 | 编辑源代码]

最简单的方案是使用如下命令创建使用所有空间的单一主分区:

(parted) mkpart primary ext4 1MiB 100%
(parted) set 1 boot on

In the following instance, a 20 GiB / partition will be created, followed by a /home partition using all the remaining space:

(parted) mkpart primary ext4 1MiB 20GiB
(parted) set 1 boot on
(parted) mkpart primary ext4 20GiB 100%

In the final example below, separate /boot (100 MiB), / (20 GiB), swap (4 GiB), and /home (all remaining space) partitions will be created:

(parted) mkpart primary ext3 1MiB 100MiB
(parted) set 1 boot on
(parted) mkpart primary ext3 100MiB 20GiB
(parted) mkpart primary linux-swap 20GiB 24GiB
(parted) mkpart primary ext3 24GiB 100%

调整分区[编辑 | 编辑源代码]

警告: ext2/3/4 分区在调整前需要先卸载并停止使用。编辑使用中的系统的根分区会非常困难和危险,建议使用安装介质/救援系统进行操作。
注意:
  • parted 只能移动分区的末端。
  • parted v3.2 resizepart 可能需要用到#交互模式[3]
  • 这些说明适用于使用 ext2,ext3 或 ext4 文件系统的分区。

如果要扩展分区,必须先调整分区的大小,然后调整其上文件系统的大小;如果要缩小分区,必须先调整文件系统的大小,再调整分区,以避免数据丢失。

扩展分区[编辑 | 编辑源代码]

在 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
注意: 与 parted 不同,resize2fs(8) 使用 K,M,G 和 T 指代 KiB,MiB,GiB 和 TiB。注意,e2fsprogs 文档错误地将 kibibytes,mebibytes,gibibytes 和 tebibytes 称为“kilobytes,megabytes,gigabytes,terabytes 的二次方"。

缩小 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 字节扇区的分区新大小。

警告[编辑 | 编辑源代码]

除非命令本身就具有危险性(例如rmmklabelmkpart),Parted 始终会在进行具有潜在危险性的操作前发出警告。

对齐[编辑 | 编辑源代码]

警告: parted 仅对齐分区起始端,不对齐大小。这一特性不符合 dm-crypt/LUKS 的需求,详细信息请参考 Advanced Format#Partition alignment

在创建分区时,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%

小技巧[编辑 | 编辑源代码]

Check alignment[编辑 | 编辑源代码]

警告: parted 仅验证分区起始端是否对齐,而不验证大小。这一特性不符合 dm-crypt/LUKS 的需求,详细信息请参考 Advanced Format#Partition alignment

在已分区的硬盘上,你可以用 parted 验证单个分区是否对齐。例如,要验证 /dev/sda 上的分区 1,可以使用如下命令:

# parted /dev/sda
(parted) align-check optimal 1
1 aligned

参考[编辑 | 编辑源代码]