Erdong’ Blog

苦练七十二变,笑对八十一难。

0%

Parted 创建 GPT 分区

对于磁盘的分区表 MBR与GPT区别。
MBR:MBR分区表(即主引导记录)大家都很熟悉,是过去我们使用windows时常用的。
所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区

GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。

突破MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。

对于 GPT 的分区,建议使用 parted 工具进行分区,fdisk 在 GPT 这块不是很好。

Parted 介绍

Parted 命令分为两种模式:命令行模式和交互模式。

命令行模式

parted [option] device [command] ,该模式可以直接在命令行下对磁盘进行分区操作,比较适合编程应用。如:

显示磁盘/dev/sdb分区。

1
parted /dev/sdb print

交互模式

parted [option] device 进入交互模式。尤其是对 parted 命令不是很熟悉的情况下建议使用交互模式。

1
parted /dev/sdb

parted命令常用选项

进入 交互模式下, 输入 help 可以看到如下提示,本文基于 Parted 3.2 进行说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
test@test01:~$ sudo parted /dev/sdb
GNU Parted 3.2
使用 /dev/sdb
欢迎使用 GNU Parted! 输入 'help'可获得命令列表.
(parted) help
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 分区类型 [文件系统类型] 起始点 终止点 创建一个分区
name NUMBER 名称 将编号为NUMBER 的分区命名为“名称”
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space,
all found partitions, or a particular partition
quit 退出程序
rescue 起始点 终止点 挽救临近“起始点”、“终止点”的遗失的分区
resizepart NUMBER END resize partition NUMBER
rm MINOR 删除编号为 MINOR 的分区
选择设备 选择要编辑的设备
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]] 切换分区 NUMBER 的 FLAG 标记
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU
Parted
(parted)

比较常用的几个选项是

  • help 打印帮助信息
  • print 输出分区信息
  • mklabel 创建分区表, 即是使用msdos(MBR)还是使用gpt,或者是其他方式分区表
  • mkpart 创建新分区
    格式:mkpart PART-TYPE START END
    PART-TYPE类型主要有primary(主分区), extended(扩展分区), logical(逻辑区). 扩展分区和逻辑分区只对msdos。
  • rm 删除一个分区
  • resizepart 调整指定的分区的大小
  • quit 退出该交互界面

对磁盘进行分区

首先对于容量较大的磁盘使用 fdisk 工具会得到如下提示:

1
2
3
4
5
6
7
8
9
10
11
12
test@test01:~$ sudo fdisk /dev/sdb

欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

设备不包含可识别的分区表。
The size of this disk is 3.7 TiB (4000787030016 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

创建了一个磁盘标识符为 0x9f682389 的新 DOS 磁盘标签。

命令(输入 m 获取帮助):

这个时候我们就需要更新 parted 来对磁盘进行分区。

更改分区表

操作如下:

1
2
3
4
5
6
7
8
9
10
11
(parted) mklabel gpt
(parted) print
Model: ATA ST4000DM004-2CV1 (scsi)
磁盘 /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
分区表:gpt
Disk Flags:

数字 开始: End 大小 文件系统 Name 标志

(parted)

创建分区

使用 mkpart 创建自己需要的大小的分区

1
2
3
4
5
6
7
8
9
10
11
12
(parted) mkpart primary 0 4TB
(parted) p
Model: ATA ST4000DM004-2CV1 (scsi)
磁盘 /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
分区表:gpt
Disk Flags:

数字 开始: End 大小 文件系统 Name 标志
1 1049kB 4001GB 4001GB primary

(parted)

创建好以后退出。

parted 的每一个操作都是即时生效,和 fdisk 不同,fdisk 只有在最后使用 w 进行保存以后才会生效 。

格式化分区

格式化成你需要的文件系统。

1
mkfs.ext4 /dev/sdb1

整个分区创建过程就结束了。

对齐分区以得到最优性能

当分区不对齐时,parted 会提示如下

1
2
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel?

对于这个提示,只要分区对齐就好。如果你的设计,就是要不对齐,那么可以忽略这个提示。

对齐分区有两个方法,

方法一,使用百分比来表示要分区的的空间大小,那么到100%的时候自然是对齐的。示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
(parted) mkpart primary 0% 100%
(parted) p
Model: ATA ST4000DM004-2CV1 (scsi)
磁盘 /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
分区表:gpt
Disk Flags:

数字 开始: End 大小 文件系统 Name 标志
1 1049kB 4001GB 4001GB primary

(parted)

方法二,如果是使用容量来进行空间大小的话,那么 -1 这个值代表的是最后的位置。示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
(parted) mkpart primary 0TB -1
(parted) p
Model: ATA ST4000DM004-2CV1 (scsi)
磁盘 /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
分区表:gpt
Disk Flags:

数字 开始: End 大小 文件系统 Name 标志
1 1049kB 4001GB 4001GB primary

(parted)

方法三,手动进行计算。

下边这篇博客的作者描述了如何计算磁盘的扇区来保证分区对齐。

https://rainbow.chard.org/2013/01/30/how-to-align-partitions-for-best-performance-using-parted/

======================
Erdong, A Linux user !

坚持原创技术分享, 您的支持将鼓励我继续创作!