GNU Parted

由于常见的fdisk不支持GPT。所以Linux 命令行模式下,创建和修改GPT分区常常使用GNU Parted之类的工具来完成。

GNU Parted 具有丰富的功能,它除了能够进行分区的添加、删除等常见操作外,还可以进行移动分区、创建文件系统、调整文件系统大小、复制文件系统等操作。它可以处理最常见的分区格式,包括:ext2,ext3,fat16,fat32,NTFS,ReiserFS,JFS,XFS,UFS,HFS,以及Linux交换分区。

GNU parted的使用

以下示例在arch Linux环境下,使用GUN parted 3.2示例

parted 命令的常用格式是:

  1. parted [选项] <硬盘设备名>
  2. parted [选项] <硬盘设备名> <子命令> [<子命令参数>]

常用指令

在命令行模式下,输入parted /dev/sdx(其中/dev/sdx为硬盘设备名,如果以普通用户登陆,需要使用sudo或者切换用户为root)。

帮助

输入help

help指令输出了parted所有的可用指令。

Parted常用指令

命令说明
help [COMMAND]打印命令的帮助信息,或指定命令的帮助信息
print [freeNUMBER
mkpart PART-TYPE [FSTYPE] START END创建新分区。PART-TYPE 是以下类型之一:primary(主分 区)、extended(扩展分区)、logical(逻辑分区)。START 和 END 是新分区开始和结束的具体位置。
rm NUMBER删除指定编号 NUMBER 的分区。
set NUMBER FLAG STATE对指定编号 NUMBER 的分区设置分区标记 FLAG。对于 PC 常用的 msdos 分区表来说,分区标记 FLAG 可有如下值:”boot”(引导), “hidden”(隐藏), “raid”(软RAID磁盘阵), “lvm”(逻辑卷), “lba” (LBA,Logic Block Addressing模式)。 状态STATE 的取值是:on 或 off
unit UNIT设置默认输出时表示磁盘大小的单位为 UNIT,UNIT 的常用取值可以为:‘MB’、‘GB’、‘%’(占整个磁盘设备的百分之多少)、‘compact’(人类易读方式,类似于 df 命令中 -h 参数的用)、‘s’(扇区)、‘cyl’ (柱面)、‘chs’ (柱面cylinders:磁头 heads:扇区 sectors 的地址)
resizepart NUMBER END对指定编号 NUMBER 的分区调整大小。
rescue START END如果你不小心用Parted的rm命令删除了一个分区,那么这个命令可以帮你恢复。你需要给出所误删的分区的大概的开始和结束的位置。Parted 就会在你给出的磁盘区域内去寻找,如果找到这个分区,那么Parted 就会询问你是否重新建立这个分区。
mklabel,mktable LABELTYPE创建一个新的 LABEL-TYPE 类型的空磁盘分区表,对于PC而言 msdos 是常用的 LABELTYPE。 若是用 GUID 分区表,LABEL-TYPE 应该为 gpt
align-check TYPE NUMBER检查分区性能检查 TYPE取值为minimal,optimal,其中常用的是optimal

分区信息

输入print

创建分区表

输入mklabel gpt

上图通过print指令显示创建分区表前后的区别

创建分区

输入mkpart primary 0 200

mkpart指令用于创建分区,primary表示创建主分区,0 200 表示起始位置和结束位置。

mkpart有时会出现警告,如下图,输入i忽略

设置磁盘分区单位

输入unit s,print,unit MB,print

  • 删除分区

输入print,rm 2,print

rm指令用于删除分区。

修改分区大小

输入resizepart 1 250

resizepart指令用于修改分区大小。

为分区命名

输入name 1 boot,print

name指令用于命名

更改分区标记

输入set 1 boot on

set指令格式为set NUMBER FLAG STATUS

NUMBER为分区号

FLAG取值如下:

boot root swap hidden raid lvn lba hp-service palo prep msftres bios_grub atvrecv diag legacy_boot msftdata irst esp

STATUS取值如下:

on off

关于4K对齐

当前电脑传统机械硬盘的每个扇区一般大小为512字节;当使用某一文件系统将硬盘格式化时,文件系统会将硬盘扇区、磁道与柱面统计整理并定义一个簇为多少扇区方便快速存储。

如果每个簇都会跨越两个物理单元,占据第一个单元的组后512字节和第二个单元的前3584字节。这样文件系统在读写某个簇的时候,硬盘需要读写两个物理单元,这会降低读写速度,并缩短使用寿命。现时一般使用一些硬盘分区软件在主引导记录的63个扇区后作牺牲地空出数个扇区以对齐文件系统的4096B每簇,以避免过多的读写操作,提升读写速度、延长使用寿命。

当使用parted做mkpart时,产生的警告,就是因为分区未做4K对齐而产生的。

使用parted创建做4K对齐的分区表

step 1

使用parted --align optimal /dev/sdX启动parted

step 2

分区

mklabel gtp
mkpart primary 0% XXX
mkpart primary XXX xxxxx
……

注意命令第一个分区起始位置使用的是0%

setp 3

验证分区是否4K对齐

align-check optimal X