Linux 分区工具之 parted

parted 命令格式

parted [option]... [device [command [parameters]...]...]

parted 选项

选项 解释
-h 帮助
-l 所有块设备(硬盘)的分区布局信息
-m 显示机器可解析的输出
-j 显示 json 的输出
-s 脚本形式执行(不提示用户干预)
-f 在脚本执行的时候,询问时使用修复方式代替中断
-v 显示 parted 版本信息
-a 分区对其方式 none(不对齐)cyl(对齐磁盘柱面)opt(自动最优对齐)min(对齐扇区边缘)

parted 命令

如果直接输入 parted 回车会进入 交互模式

分区对齐检测

1
2
3
4
5
align-check TYPE N 
> TYPE 为对齐方式 min|opt (minimum | optimal)
> N 为设备分区编号在 linux 上,ms-dos 上 1 - 4 为主分区,逻辑分区 5 或 5 以上
> 如下检查硬盘 sda 的 1 号分区的对齐方式是否为自动最优对齐
# parted /dev/sda align-check opt 1

查看命令帮助

1
2
3
4
help [COMMAND]
> 如果没有 COMMAND 则会显示所以可提供帮助的命令
> 如下查看 mktable 分区表的帮助命令
# parted /dev/sda help mktable

创建分区表(重要)

1
2
3
4
mklabel,mktable LABEL-TYPE
> 根据指定的 LABEL-TYPE 创建分区表,分区表类型为 gpt | msdos(mbr)等
> 如下为 sda 硬盘创建 gpt 分区表
# parted /dev/sda mktable gpt

创建分区(重要)

‌主分区‌:直接在硬盘上创建,可以存储数据。
‌扩展分区‌:主分区的一种特殊形式,用于容纳更多的逻辑分区,但不直接存储数据。[1]
‌逻辑分区‌:在扩展分区内创建,用于存储数据。

1
2
3
4
5
6
mkpart PART-TYPE [FS-TYPE] START END
> 根据指定的 PART-TYPE 创建分区,分区类型为 primary, logical, extended (GPT 分区表中设置该参数会变成 NAME 字段,GPT 创建的都是 primary 分区所以不用写 primary)
> FS-TYPE 只是设置一个合适的分区 ID(但不创建文件系统),文件系统如 ext4,xfs,btrfs,ntfs,hfs,linux-swap 等
> START END 设置分区开始和结束位置,如果 4GB,10%,如果是负数表示从硬盘尾部开始计算,如 -1s 表示最后一个扇区。
> 如下为硬盘 sda 创建名称为 ESP 大小从 2MB 到 629MB 的分区,并标记文件系统为 FAT32
# parted /dev/sda ESP fat32 2MB 629MB

分区命名

1
2
3
4
5
name NUMBER NAME
> NUMBER 为当前硬盘的分区编号
> NAME 设置对应分区编号磁盘的名称
> 如下为硬盘 sda 编号为 1 的分区名称设为 ESP
# parted /dev/sda name 1 ESP

打印信息

1
2
3
4
5
6
7
print [devices|free|list,all]
> devices 只显示可用硬盘信息
> free 显示当前硬盘的分区信息和空闲区域
> list,all 显示分区表和分区信息(分区表包含多个设备),同 parted -l
> 不填参数,不显示分区表信息(分区表信息会显示不同硬盘的信息),只显示当前硬盘的分区信息
> 如下打印所有分区表和分区信息
# parted /dev/sda print all

退出交互模式

1
2
quit
> 在使用命令时进入了交互模式,可以在交互完成后使用该命令退出程序

恢复丢失的分区

1
2
3
4
rescue START END
> START END 设置分区开始和结束位置,如果 4GB,10%,如果是负数表示从硬盘尾部开始计算,如 -1s 表示最后一个扇区。
> 如下恢复硬盘上的所有分区
# parted /dev/sda rescue 0MB 100%

重新分配分区大小

1
2
3
4
5
resizepart NUMBER END
> NUMBER 为当前硬盘的分区编号
> END 设置分区结束位置,如果 4GB,10%,如果是负数表示从硬盘尾部开始计算,如 -1s 表示最后一个扇区。
> 如下为硬盘 sda 编号为 1 的分区结束位置调整到 700MB
# parted /dev/sda resizepart 1 700MB

删除分区(重要)

1
2
3
4
rm NUMBER
> NUMBER 为当前硬盘的分区编号
> 如下为硬盘 sda 删除编号为 1 的分区
# parted /dev/sda rm 1

选择指定硬盘(交互模式下)

1
2
select DEVICE
> DEVICE 为硬盘设备,如 /dev/sda,/dev/hda

设置硬盘标签和状态

1
2
3
4
5
disk_set FLAG STATE
> FLAG 两者之一 cylinder_alignment(对齐方式)、pmbr_boot(MBR 引导硬盘)
> STATE 两者之一 on,off (针对 FLAG 设置启用或屏蔽)
> 如下为硬盘 sda 设为 mbr 引导盘
# parted /dev/sda disk_set pmbr_boot on

切换硬盘标签的状态

1
2
3
4
disk_toggle [FLAG]
> FLAG 两者之一 cylinder_alignment(对齐方式)、pmbr_boot(MBR 引导硬盘)
> 如下为硬盘 sda 的 mbr 引导盘状态反转一下(state 为 on 转为 off)
# parted /dev/sda disk_toggle pmbr_boot

设置分区标签和状态(重要)

1
2
3
4
5
6
set NUMBER FLAG STATE
> NUMBER 为当前硬盘的分区编号
> FLAG 分区标签如:boot,root,swap,legacy_boot,esp,lvm,linux-home,bios_grub 等(标签只是为了标准化,其实不一定需要打标签)
> STATE 两者之一 on,off (针对 FLAG 设置启用或屏蔽)
> 如下为硬盘 sda 编号为 1 的分区设为 esp 分区
# parted /dev/sda set 1 esp on

切换分区标签的状态

1
2
3
4
5
toggle [NUMBER [FLAG]]
> NUMBER 为当前硬盘的分区编号
> FLAG 分区标签如:boot,root,swap,legacy_boot,esp,lvm,linux-home,bios_grub 等
> 如下为硬盘 sda 编号为 1 的分区的 esp 状态反转一下(state 为 on 转为 off)
# parted /dev/sda toggle 1 esp

设置分区的文件系统或分区 UUID

1
2
3
4
5
6
type NUMBER TYPE-ID or TYPE-UUID
> NUMBER 为当前硬盘的分区编号
> TYPE-ID 为文件系统的 ID,从 0x01 到 0xff (MS-DOS 分区表中 0x01 表示 FAT12,0x83 表示 Linux 文件系统)
> TYPE-UUID 为分区的类型,如 0fc63daf-8483-4772-8e79-3d69d8477de4(通常在 GPT 分区表中更为细分)
> 如下为硬盘 sda 编号为 1 的分区类型设为 FAT12
# parted /dev/sda type 1 0x01

设置默认单位(交互模式下)

1
2
unit UNIT
> UNIT 为 s(扇区),B(字节),kB,MB(1000 的幂次),kiB,MiB(2 的幂次) 等

查看 Parted 的版本信息和版权

1
2
3
version
> 如下查看 parted 的版本(同 parted -v)
# parted /dev/sda version

  1. 扩展分区的大小一般会略大于所有逻辑分区的总和,以便包含逻辑分区间的必要元数据(EBR:Extended Boot Record)。 ↩︎