Linux-parted命令

创作背景

Gkit部署环境的时候遇到一个报错,管理域准备环节报错内容如下:

bash 复制代码
[2026-04-02 16:20:21] Error Log:Parted failed, result is 
[ parted: invalid token: logicError: Expecting a partition type. ] 
when exec: [ sudo parted -s /dev/vdb mkpart logic 51202MiB 148480MiB ]
[2026-04-02 16:20:21] Error Log:Disk partition and mount failure list: 
['paas-core(7.225.165.104)'] 
[2026-04-02 16:20:21] Error Log:Disk mount failed. 
[2026-04-02 16:20:41] Error Log:Task_GDE262RC1 task execution failed!

其中有一条信息很重要,是关于parted命令创建分区的时候的报错。排查发现/dev/vdb磁盘手动创建了一个主分区,是使用fdisk命令创建的,主要是用来给gkit挂盘。使用fdisk命令创建的分区默认是MBR分区格式,分区表类型是dos类型。查看分区详情,发现根本没有创建扩展分区,所以在执行parted命令创建逻辑分区的时候报错了。

正确的流程应该是先创建好扩展分区,例如:

bash 复制代码
# 在MBR磁盘上创建主分区
parted -s /dev/sdb mkpart primary ext4 1MiB 50GiB
# 在MBR磁盘上创建扩展分区
parted -s /dev/sdb mkpart extended 50GiB 100GiB
# 在扩展分区内部创建逻辑分区
parted -s /dev/sdb mkpart logical ext4 50GiB 100GiB
bash 复制代码
parted -s /dev/vdf mkpart extended 51202MiB 102400MiB
parted -s /dev/vdf mkpart logic 51202MiB 102400MiB
或者
parted -s /dev/vdf mkpart extended 51202MiB 100%
parted -s /dev/vdf mkpart logic 51202MiB 100%

parted命令语法

bash 复制代码
[root@paas-core ~]# parted --help
Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
Apply COMMANDs with PARAMETERS to DEVICE.  If no COMMAND(s) are given, run in
interactive mode.

OPTIONs:
  -h, --help        displays this help message
  -l, --list        lists partition layout on all block devices
  -m, --machine     displays machine parseable output
  -j, --json        displays JSON output
  -s, --script      never prompts for user intervention
  -f, --fix         in script mode, fix instead of abort when asked
  -v, --version     displays the version
  -a, --align=[none|cyl|min|opt]  alignment for new partitions

COMMANDs:
  align-check TYPE N                       check partition N for TYPE(min|opt)
        alignment
  help [COMMAND]                           print general help, or help on
        COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition
        table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all]            display the partition table, or
        available devices, or free space, or all found partitions
  quit                                     exit program
  rescue START END                         rescue a lost partition near START
        and END
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected
        device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition
        NUMBER
  type NUMBER TYPE-ID or TYPE-UUID         type set TYPE-ID or TYPE-UUID of
        partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and
        copyright information of GNU Parted

parted常用命令参数

mklabel命令

mklabel是parted工具中的一个重要命令,用于创建或更改磁盘的分区表类型。这个操作会删除磁盘上的所有数据,使用前必须确保已备份重要信息。

基本的语法如下:

bash 复制代码
parted -s 设备路径 mklabel 分区表类型

支持的分区表类型如下:

bash 复制代码
msdos
MBR(Master Boot Record)分区表
最多支持4个主分区或3个主分区+1个扩展分区
最大支持2TB磁盘容量
兼容性最好,适用于各种系统和启动方式

gpt
GPT(GUID Partition Table)分区表
支持最多128个分区
支持超过2TB的磁盘容量
提供更好的数据完整性和容错能力
适用于UEFI启动方式

# 下面这个分区表类型就不太常用
loop
循环设备分区表
用于磁盘映像文件的特殊分区表

mac
Apple Mac分区表
旧版苹果系统使用的格式

amiga
Amiga计算机系统使用的分区表

pc98
PC-98计算机系统使用的分区表

sun
Sun Solaris系统使用的分区表

bsd
BSD系列操作系统使用的分区表

下面介绍一下常见用法的示例:

bash 复制代码
# 示例1:将磁盘更改为GPT分区表
parted -s /dev/sdb mklabel gpt

# 示例2:将磁盘更改为MBR分区表
parted -s /dev/sdb mklabel msdos

# 示例3:交互式模式下更改分区表
parted /dev/sdb
(parted) mklabel gpt
(parted) quit

mkpart命令

mkpart命令是parted工具中的一个核心功能,用于在磁盘上创建新分区。下面我们详细解析这个命令的各种用法和参数。

基本语法:

bash 复制代码
parted -s 设备路径 mkpart [分区类型] [文件系统类型] 起始位置 结束位置

参数详解

  1. 设备路径
bash 复制代码
指定要操作的磁盘设备
格式:/dev/sdb、/dev/nvme0n1等
必须是存在的块设备
  1. 分区类型
bash 复制代码
可选参数,具体取决于分区表类型:

对于MBR分区表(msdos):

primary - 主分区(最多4个)
logical - 逻辑分区(只能在扩展分区内部创建)
extended - 扩展分区(一个磁盘只能有一个)
对于GPT分区表(gpt):

可以省略不写
或者指定为primary(虽然不影响结果)
省略分区类型时,parted会根据当前分区表类型自动选择合适的类型。
  1. 文件系统类型
bash 复制代码
可选参数,用于标识分区将使用的文件系统类型,常见选项有:

ext2、ext3、ext4
fat16、fat32
ntfs
hfs、hfs+
linux-swap
xfs
btrfs
nilfs2
...等等
也可以使用空值或不指定此参数,稍后使用mkfs命令单独格式化分区。
  1. 起始位置和结束位置
bash 复制代码
指定分区在磁盘上的位置范围
可以使用多种单位表示:
    绝对大小:1MiB、100MB、2GiB、10GB
    百分比:%25(磁盘的25%)、%50、%100
    扇区号:2048、1048576等

用法示例如下:

bash 复制代码
示例1:创建主分区
# 创建50GB的主分区,从1MiB开始
parted -s /dev/sdb mkpart primary ext4 1MiB 50GiB
bash 复制代码
示例2:创建扩展分区和逻辑分区
# 先创建扩展分区
parted -s /dev/sdb mkpart extended 50GiB 100GiB

# 在扩展分区内部创建逻辑分区
parted -s /dev/sdb mkpart logical ext4 50GiB 75GiB
bash 复制代码
示例3:使用百分比分配空间
# 创建使用前50%空间的主分区
parted -s /dev/sdb mkpart primary ext4 0% 50%
# 创建使用后50%空间的主分区
parted -s /dev/sdb mkpart primary xfs 50% 100%
bash 复制代码
示例4:GPT分区表下创建分区
# 在GPT磁盘上创建分区,不指定分区类型
# 使用所有剩余空间
parted -s /dev/sdc mkpart "" xfs 1MiB 100%

注意,开始位置和结束位置的单位,为了对其考量,也可以这样使用不同的单位

bash 复制代码
# 从对齐点开始创建分区(提高SSD性能)
parted -s /dev/sdb mkpart primary ext4 2048s 50GiB
# 或使用MiB单位
parted -s /dev/sdb mkpart primary ext4 1MiB 50GiB

print命令

print命令是parted工具中最常用的命令之一,用于显示磁盘分区信息。无论是交互模式还是脚本模式,print命令都是查看当前磁盘状态的重要工具。

基本用法

bash 复制代码
1. 交互式模式使用
bash
parted /dev/sdb
(parted) print
(parted) quit
2. 脚本模式使用
bash
parted -s /dev/sdb print

print命令输出详解如下:

bash 复制代码
Model: Virtio Block Device (virtblk)
Disk /dev/sdb: 200 GiB, 214748364800 bytes, 419430400 sectors
Unit: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A1B2C3D4-E5F6-7890-ABCD-EF1234567890

Device         Start      End   Size  Type                File system     Flags
/dev/sdb1      2048   1048575   512M  EFI System Partition fat16           boot,esp
/dev/sdb2   1048576 419430399   200G  Linux filesystem    ext4

输出的字段分析如下:

bash 复制代码
# 磁盘信息区域
Model: 磁盘型号
Disk /dev/sdb: 设备路径和总容量
Unit: 单位设置
Sector size: 逻辑和物理扇区大小
I/O size: 最优和最小I/O大小
Disklabel type: 分区表类型(msdos/gpt等)
Disk identifier: 分区表标识符(GPT中为UUID,MBR中为十六进制标识)
bash 复制代码
# 分区信息区域
Device: 分区设备路径
Start: 起始扇区号
End: 结束扇区号
Size: 分区大小
Type: 分区类型
File system: 文件系统类型(如果已创建)
Flags: 分区标志位

常用用法示例如下:

bash 复制代码
# 显示不同单位的信息
parted -s /dev/sdb print unit MiB    # 以MiB为单位
parted -s /dev/sdb print unit GB     # 以GB为单位
parted -s /dev/sdb print unit s # 以扇区为单位

[root@collector01 ~]# parted /dev/vdb unit s print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 461373440s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start       End         Size        File system  Name   Flags
 1      4096s       419430399s  419426304s               logic
 2      419432448s  461371391s  41938944s                logic

[root@collector01 ~]# parted /dev/vdb unit mib print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 225280MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start      End        Size       File system  Name   Flags
 1      2.00MiB    204800MiB  204798MiB               logic
 2      204801MiB  225279MiB  20478MiB                logic

[root@collector01 ~]# parted /dev/vdb unit MB print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 236223MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start     End       Size      File system  Name   Flags
 1      2.10MB    214748MB  214746MB               logic
 2      214749MB  236222MB  21473MB                logic
bash 复制代码
1. 快速查看磁盘状态
# 显示基本分区信息
parted -s /dev/sdb print

2. 查看特定分区信息
# 切换到交互模式后查看分区详情
parted /dev/sdb
(parted) print 1  # 查看第一个分区的详细信息

3. 查看磁盘对齐状态
# 检查分区是否正确对齐
parted -s /dev/sdb print
# 查看Start值是否为2048的倍数(1MiB对齐)

4. 查看分区标志
# 显示各分区的标志位
parted -s /dev/sdb print
# 特别关注boot、esp、lvm等标志位

5. 使用不同单位查看
# 以MB为单位查看
parted -s /dev/sdb print unit MB
# 以百分比形式显示
parted -s /dev/sdb print unit %

结合grep过滤关键信息

bash 复制代码
# 只显示分区信息区域
parted -s /dev/sdb print | tail -n +7

# 查看特定的分区类型
parted -s /dev/sdb print | grep "ext4"

# 查看包含特殊标志的分区
parted -s /dev/sdb print | grep "boot"

脚本中获取分区信息

bash 复制代码
#!/bin/bash

# 获取分区数量
PART_COUNT=$(parted -s /dev/sdb print | grep -c "^[ ]*[0-9]")

# 获取磁盘总大小
DISK_SIZE=$(parted -s /dev/sdb print | grep "Disk /dev/sdb" | awk '{print $3}')

# 获取文件系统类型
FS_TYPE=$(parted -s /dev/sdb print | awk '/\/dev\/sdb1/ {print $5}')

echo "分区数量:$PART_COUNT"
echo "磁盘大小: $DISK_SIZE"
echo "文件系统:$FS_TYPE"

type命令

type命令是parted工具中的一个重要功能,用于修改分区的类型标识符。这个命令在MBR和GPT分区表中都有不同的应用场景和功能。

基本语法如下:

bash 复制代码
parted -s 设备路径 type 分区编号 分区类型

MBR分区表中的类型

bash 复制代码
MBR分区表使用2字节的十六进制代码标识分区类型,常见类型包括:
primary - 主分区标识
extended - 扩展分区标识
logical - 逻辑分区标识
82 - Linux交换空间
83 - Linux原生分区(常用)
8e - Linux LVM分区
85 - Linux扩展分区
fd - Linux RAID自动检测
07 - NTFS/exFAT分区
0b/0c - FAT32分区
0e/0f - 扩展FAT32分区
06 - FAT16分区
17 - 隐藏的HPFS/NTFS分区
12 - Compaq诊断分区
ef - EFI系统分区

示例如下:

bash 复制代码
# 将第一个分区类型设置为Linux原生分区
parted -s /dev/sdb type 1 83

# 将第二个分区设置为Linux交换空间
parted -s /dev/sdb type 2 82

# 将第三个分区设置为Linux LVM
parted -s /dev/sdb type 3 8e

# 将分区类型设置为fat32
parted -s /dev/sdb type 1 0c

# 使用分区名称而非代码
parted -s /dev/sdb type 1 primary

GPT分区表中的类型

bash 复制代码
GPT分区表使用GUID(Globally Unique Identifier)标识分区类型,常见类型包括:

Linux filesystem - Linux文件系统
Linux swap - Linux交换空间
Linux RAID - Linux RAID阵列
Linux LVM - Linux LVM物理卷
EFI System Partition - EFI系统分区
Microsoft Reserved - Microsoft保留分区
Basic Data - 基本数据分区
Microsoft Reserved Partition - Microsoft保留分区
Microsoft Recovery Environment - Windows恢复环境

示例如下:

bash 复制代码
# 将第一个分区设置为Linux文件系统
parted -s /dev/sdc type 1 "Linux filesystem"

# 将第二个分区设置为EFI系统分区
parted -s /dev/sdc type 2 "EFI System Partition"

# 将第三个分区设置为Linux LVM
parted -s /dev/sdc type 3 "Linux LVM"

# 将分区类型设置为Microsoft恢复环境
parted -s /dev/sdc type 4 "Microsoft Recovery Environment"

操作示例

FAQ

1、为什么创建第一个分区的时候,开始位置是1MiB或者2MiB?

不管是使用fdisk命令,还是parted命令,创建第一个分区的其实位置都是从1MiB这个位置开始的。这个就有点疑问,查询了一下,主要由一下几个方面的原因

1. 保留引导扇区空间

现代硬盘的前几个扇区通常用于存储以下重要信息:

主引导记录(MBR)

GUID分区表(GPT)的保护扇区

磁盘对齐信息

从0MiB开始可能会覆盖这些重要信息,导致系统无法正常启动或识别磁盘。

2. 磁盘对齐考虑

性能优化

现代存储设备(如SSD)在读写数据时,最佳性能通常是按照特定块大小对齐的

从1MiB(2048扇区)开始可以确保分区与设备的物理块大小对齐

这种对齐可以显著提高I/O性能

避免访问问题

有些存储控制器在访问未对齐的分区时性能会显著下降

从1MiB开始可以避免这种性能瓶颈
3. 分区表保护

对于GPT格式,开头和结尾都有保护区

从1MiB开始可以避免破坏这些保护区

保留空间可以防止分区表被意外覆盖
4. 兼容性考虑

确保分区在各种操作系统和硬件平台上都能正确识别

避免与某些固件或启动管理器产生冲突

Gkit工具在磁盘划分分区的时候,默认先将磁盘创建为gpt格式的分区表,然后再创建一个分区,将所有的磁盘空间划分给第一个分区,并给这个分区打上一个标签名称Name=logic

相关推荐
xin_yao_xin2 小时前
Linux 下 Docker 安装教程(2026)
linux·运维·docker
不愿透露姓名的大鹏2 小时前
Linux环境下Node.js后台运行方式(实用版)
linux·运维·node.js
白露与泡影2 小时前
从 BIO 到 epoll:高并发 I/O 模型演进与本质分析
java·服务器·数据库
biubiubiu07062 小时前
Linux 与 Shell 自动化运维基础知识记录
linux·运维·自动化
Riu_Peter2 小时前
【技术】Docker 释放空间
运维·docker·容器
杨浦老苏2 小时前
可视化Docker Compose构建器VCompose
运维·docker·开发·可视化·群晖
爱学习的程序媛2 小时前
【Day2】WSL2+Docker配置全攻略
运维·docker·容器·wls2
KOYUELEC光与电子努力加油2 小时前
BROADCOM博通集成 Matter 1.5平台认证就绪、BK7239N等芯片助力智能家居无缝融合
服务器·科技·单片机·智能家居
默|笙2 小时前
【Linux】进程概念与控制(2)_进程控制
java·linux·策略模式