Parted
GNU Parted 是创建和处理分区表的程序。GParted 是 GUI 前端。
安装[编辑 | 编辑源代码]
安装下列任一软件包:
使用[编辑 | 编辑源代码]
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”等。
分区[编辑 | 编辑源代码]
创建新分区表[编辑 | 编辑源代码]
如果一个硬盘没有做过分区,或者是你想要修改分区表的类型,你需要为对应的设备创建/重建分区表。另外,对于分区方案要完全重建的设备来说,重建分区表也很有用。
用下面的命令打开要创建/重建分区表的设备:
# parted /dev/sdx
使用以下命令创建 GUID 分区表:
(parted) mklabel gpt
使用下列命令创建 MBR/MS-DOS 分区表:
(parted) mklabel msdos
分区方案[编辑 | 编辑源代码]
你可以决定磁盘分区的数量和各自的大小,以及分区应挂载到安装的系统上哪些文件夹(一般称为挂载点)。可以在分区#分区方案查看具体需要的分区。
创建分区将用到如下命令:
(parted) mkpart part-type-or-part-label fs-type start end
- 根据分区表的不同,
part-type-or-part-label
有不同的解释:- MBR:参数被用作为
分区类型
,可选值为primary
,extended
或logical
。 - GPT:参数被用作为
part-label
,即分区的 PARTLABEL 参数。如果想不设置分区标签,可以使用引上的空字符(""
)。注意: 网上的很多教程对 GPT 也使用了mkpart primary
开头的错误命令,这一命令会将分区标签设置为“primary”。
- MBR:参数被用作为
fs-type
是help mkpart
命令显示的标识符中最接近使用的文件系统的一项。mkpart 命令并不会创建文件系统:fs-type
参数只是简单地被 parted 用于为 GPT 分区设置分区类型 GUID 或是为 MBR 分区设置分区类型 ID。提示:parted 将 Linux 原生文件系统都映射为同一“Linux 文件系统”分区类型(GUID0FC63DAF-8483-4772-8E79-3D69D8477DE4
或是 ID0x83
),所以可以安全地进行例如为 ext4 格式的分区使用ext2
类型的操作。start
是相对于设备起始位置的分区开始位置,由一个数字加上单位组成,例如1MiB
值从 1 MiB 的位置开始。end
是相对于设备起始位置的分区结束位置(不是从start
的值开始)。它的格式与start
相同,例如100%
表示到设备的末端(使用所有剩余空间)。
- 对于使用 MBR 分区表的硬盘,建议在硬盘末端留下至少 33 个 512-byte 扇区(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]
UEFI/GPT 示例[编辑 | 编辑源代码]
在每一个实例上都需要一个特殊的 EFI 系统分区。
首先需要一个 EFI 系统分区.如果是和 Windows 双系统启动,此分区已经存在,不要重新创建。
使用如下命令创建新的 EFI 系统分区(建议至少 1 GiB):
(parted) mkpart "EFI system partition" fat32 1MiB 1025MiB (parted) set 1 esp on
剩下的空间可以随你决定,例如完全用在根分区上:
(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 的交换分区,然后使用所有剩余空间创建一个 /
分区:
(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 字节扇区的分区新大小。
已知问题[编辑 | 编辑源代码]
除非命令本身就具有危险性(例如rm,mklabel 和 mkpart),Parted 始终会在进行具有潜在危险性的操作前发出警告。
对齐[编辑 | 编辑源代码]
在创建分区时,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 验证单个分区是否对齐。例如,要验证 /dev/sda
上的分区 1,可以使用如下命令:
# parted /dev/sda (parted) align-check optimal 1 1 aligned