Linux-parted命令
创作背景Gkit部署环境的时候遇到一个报错管理域准备环节报错内容如下[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命令创建逻辑分区的时候报错了。正确的流程应该是先创建好扩展分区例如# 在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 100GiBparted -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%正常的过程如下[rootkwephis74925617 ~]# parted -s /dev/vdb unit s print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 419430400s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2048s 209717247s 209715200s primary ext4 [rootkwephis74925617 ~]# parted -s /dev/vdb mkpart extend 50% 100% [rootkwephis74925617 ~]# parted -s /dev/vdb mkpart logic 50% 100% [rootkwephis74925617 ~]# parted -s /dev/vdb unit s print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 419430400s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2048s 209717247s 209715200s primary ext4 2 209717248s 419430399s 209713152s extended lba 5 209719296s 419430399s 209711104s logicalparted命令语法[rootpaas-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 Partedparted常用命令参数mklabel命令mklabel是parted工具中的一个重要命令用于创建或更改磁盘的分区表类型。这个操作会删除磁盘上的所有数据使用前必须确保已备份重要信息。基本的语法如下parted -s 设备路径 mklabel 分区表类型支持的分区表类型如下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系列操作系统使用的分区表下面介绍一下常见用法的示例# 示例1将磁盘更改为GPT分区表 parted -s /dev/sdb mklabel gpt # 示例2将磁盘更改为MBR分区表 parted -s /dev/sdb mklabel msdos # 示例3交互式模式下更改分区表 parted /dev/sdb (parted) mklabel gpt (parted) quitmkpart命令mkpart命令是parted工具中的一个核心功能用于在磁盘上创建新分区。下面我们详细解析这个命令的各种用法和参数。基本语法parted -s 设备路径 mkpart [分区类型] [文件系统类型] 起始位置 结束位置参数详解1. 设备路径指定要操作的磁盘设备 格式/dev/sdb、/dev/nvme0n1等 必须是存在的块设备2. 分区类型可选参数具体取决于分区表类型 对于MBR分区表(msdos) primary - 主分区最多4个 logical - 逻辑分区只能在扩展分区内部创建 extended - 扩展分区一个磁盘只能有一个 对于GPT分区表(gpt) 这里是定义一个Name分区类型这个参数工作实践中还是经常看到有人用的。如果是gpt分区的话也都是带上一个primary参数的。3. 文件系统类型可选参数用于标识分区将使用的文件系统类型常见选项有 ext2、ext3、ext4 fat16、fat32 ntfs hfs、hfs linux-swap xfs btrfs nilfs2 …等等 也可以使用空值或不指定此参数稍后使用mkfs命令单独格式化分区。这个参数就很少看到有人使用了因为创建好分区格式化的时候还是要执行mkfs.ext4这样的命令后分区才能真正使用的。所以创建分区的时候这个参数可以不要填写。4. 起始位置和结束位置指定分区在磁盘上的位置范围 可以使用多种单位表示 绝对大小1MiB、100MB、2GiB、10GB 百分比%25磁盘的25%、%50、%100 扇区号2048、1048576等用法示例如下示例1创建主分区 # 创建50GB的主分区从1MiB开始 parted -s /dev/sdb mkpart primary ext4 1MiB 50GiB示例2创建扩展分区和逻辑分区 # 先创建扩展分区 parted -s /dev/sdb mkpart extended 50GiB 100GiB # 在扩展分区内部创建逻辑分区 parted -s /dev/sdb mkpart logical ext4 50GiB 75GiB示例3使用百分比分配空间 # 创建使用前50%空间的主分区 parted -s /dev/sdb mkpart primary ext4 0% 50% # 创建使用后50%空间的主分区 parted -s /dev/sdb mkpart primary xfs 50% 100%示例4GPT分区表下创建分区 # 在GPT磁盘上创建分区不指定分区类型 # 使用所有剩余空间 parted -s /dev/sdc mkpart xfs 1MiB 100%注意开始位置和结束位置的单位为了对其考量也可以这样使用不同的单位# 从对齐点开始创建分区提高SSD性能 parted -s /dev/sdb mkpart primary ext4 2048s 50GiB # 或使用MiB单位 parted -s /dev/sdb mkpart primary ext4 1MiB 50GiBprint命令print命令是parted工具中最常用的命令之一用于显示磁盘分区信息。无论是交互模式还是脚本模式print命令都是查看当前磁盘状态的重要工具。基本用法1. 交互式模式使用 bash parted /dev/sdb (parted) print (parted) quit 2. 脚本模式使用 bash parted -s /dev/sdb printprint命令输出详解如下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输出的字段分析如下# 磁盘信息区域 Model: 磁盘型号 Disk /dev/sdb: 设备路径和总容量 Unit: 单位设置 Sector size: 逻辑和物理扇区大小 I/O size: 最优和最小I/O大小 Disklabel type: 分区表类型(msdos/gpt等) Disk identifier: 分区表标识符(GPT中为UUIDMBR中为十六进制标识)# 分区信息区域 Device: 分区设备路径 Start: 起始扇区号 End: 结束扇区号 Size: 分区大小 Type: 分区类型 File system: 文件系统类型(如果已创建) Flags: 分区标志位常用用法示例如下# 显示不同单位的信息 parted -s /dev/sdb unit MiB print # 以MiB为单位 parted -s /dev/sdb unit GB print # 以GB为单位 parted -s /dev/sdb unit s print # 以扇区为单位 注意unit 一定要在print前面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过滤关键信息# 只显示分区信息区域 parted -s /dev/sdb print | tail -n 7 # 查看特定的分区类型 parted -s /dev/sdb print | grep ext4 # 查看包含特殊标志的分区 parted -s /dev/sdb print | grep boot脚本中获取分区信息#!/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_TYPEtype命令type命令是parted工具中的一个重要功能用于修改分区的类型标识符。这个命令在MBR和GPT分区表中都有不同的应用场景和功能。基本语法如下parted -s 设备路径 type 分区编号 分区类型MBR分区表中的类型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系统分区示例如下# 将第一个分区类型设置为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 primaryGPT分区表中的类型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恢复环境示例如下# 将第一个分区设置为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 Environmentunit命令在parted命令中unit选项支持以下单位s - 扇区(sector)这是默认显示单位 B - 字节(byte) kB - 千字节(kilobyte)1kB 1000字节 MB - 兆字节(megabyte)1MB 1000²字节 MiB - 兆二进制字节(mebibyte)1MiB 1024²字节 GB - 吉字节(gigabyte)1GB 1000³字节 GiB - 吉二进制字节(gibibyte)1GiB 1024³字节 TB - 太字节(terabyte)1TB 1000⁴字节 TiB - 太二进制字节(tebibyte)1TiB 1024⁴字节 % - 百分比相对于磁盘总大小的百分比示例如下# 设置显示单位为MiB parted -s /dev/vdb unit mib print # 设置显示单位为百分比 parted -s /dev/vdb unit % print # 设置显示单位为扇区 parted -s /dev/vdb unit s print [rootcollector01 ~]# 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 [rootcollector01 ~]# 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 [rootcollector01 ~]# 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注意parted命令会在你输入命令时自动补全单位缩写例如输入mib或mi都可以被识别为MiB单位。FAQ1、为什么创建第一个分区的时候开始位置是1MiB或者2MiB不管是使用fdisk命令还是parted命令创建第一个分区的其实位置都是从1MiB这个位置开始的。这个就有点疑问查询了一下主要由一下几个方面的原因1. 保留引导扇区空间现代硬盘的前几个扇区通常用于存储以下重要信息主引导记录(MBR)GUID分区表(GPT)的保护扇区磁盘对齐信息从0MiB开始可能会覆盖这些重要信息导致系统无法正常启动或识别磁盘。2. 磁盘对齐考虑性能优化现代存储设备(如SSD)在读写数据时最佳性能通常是按照特定块大小对齐的从1MiB(2048扇区)开始可以确保分区与设备的物理块大小对齐这种对齐可以显著提高I/O性能避免访问问题有些存储控制器在访问未对齐的分区时性能会显著下降从1MiB开始可以避免这种性能瓶颈3. 分区表保护对于GPT格式开头和结尾都有保护区从1MiB开始可以避免破坏这些保护区保留空间可以防止分区表被意外覆盖4. 兼容性考虑确保分区在各种操作系统和硬件平台上都能正确识别避免与某些固件或启动管理器产生冲突Gkit工具在磁盘划分分区的时候默认先将磁盘创建为gpt格式的分区表然后再创建一个分区将所有的磁盘空间划分给第一个分区并给这个分区打上一个标签名称Namelogic[rootcollector01 ~]# fdisk -l /dev/vdb Disk /dev/vdb: 220 GiB, 236223201280 bytes, 461373440 sectors Units: 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: 4D78F7C8-AA5C-460B-A0D6-9F3CC903D738 Device Start End Sectors Size Type /dev/vdb1 4096 419430399 419426304 200G Linux filesystem /dev/vdb2 419432448 461371391 41938944 20G Linux filesystem [rootcollector01 ~]# parted -s /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 [rootcollector01 ~]#2、空间大小和扇区的换算2048KiB等于多少扇区取决于磁盘的扇区大小。在你的系统信息中我们看到扇区大小是Sector size (logical/physical): 512B/512B这意味着每个扇区是512字节。所以计算过程如下先将KB转换为字节2048KB 2048 × 1024 2,097,152字节然后除以扇区大小2,097,152字节 ÷ 512字节/扇区 4,096扇区因此在你的系统上2048KB等于4,096个扇区。这个计算在你的parted命令输出中得到了验证可以看到第一个分区的起始位置就是2097kB(约等于2048KB)对应的是4096扇区。[rootcollector01 ~]# parted -s /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再通过mib单位查看起始位置是多少[rootcollector01 ~]# parted -s /dev/vdb unit mi 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接下来我们来计算一下每个扇区的大小是多少每个扇区包含多少字节2MiB2*1024*1024个字节byte4096个扇区每个扇区的大小2*1024*1024/4096512字节byte