Bootstrap

linux分区parted工具的用法详解

一、概述

    通常我们用的比较多的分区工具是fdisk命令,但由于fdisk只支持MBR分区,MBR分区表最大支撑2T的磁盘,所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区。最初 parted 只支持 GPT,而从 util-linux 2.23 fdisk 也开始支持 GPT。

    parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具。GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4 16个字节,只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT分区方式没有四个主分区的限制,** 最多可达到128个主分区 **。下面我们看下parted命令的用法。

1.1 语法结构

parted [选项]… [设备 [命令 [参数]…]…]

二、选项

选项       描述

-h   --help 显示此求助信息

-l     --list 列出所有设别的分区信息

-i     --interactive 在必要时,提示用户

-s    --script 从不提示用户

-v    --version 显示版本

三、操作命令

parted交互命令

说 明

check NUMBER

做一次简单的文件系统检测

cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER

复制文件系统到另一个分区

help [COMMAND]

显示所有的命令帮助

mklabel,mktable LABEL-TYPE    

创建新的磁盘卷标(分区表)

mkfs NUMBER FS-TYPE

在分区上建立文件系统

mkpart PART-TYPE [FS-TYPE] START END

创建一个分区

mkpartfs PART-TYPE FS-TYPE START END

创建分区,并建立文件系统

name NUMBER NAME

给分区命名

print [devices|free|list,all|NUMBER]

显示分区表、活动设备、空闲空间、所有分区

quit

退出

rescue START END

修复丢失的分区

resizepart NUMBER START END

修改分区大小

rm NUMBER

删除分区

select DEVICE

选择需要编辑的设备

set NUMBER FLAG STATE

改变分区标记

toggle [NUMBER [FLAG]]

切换分区表的状态

unit UNIT

设置默认的单位

version

显示版本

四、交互操作实例

3.1 选择分区硬盘

首先类似fdisk一样,先选择要分区的硬盘,此处为/dev/hdb: ((parted)表示在parted中输入的命令,其他为自动打印的信息)

[root@my-linux ~]# parted /dev/hdb

GNU Parted 1.8.1

Using /dev/hdb

Welcome to GNU Parted! Type 'help' to view a list of commands.

3.2 设置所需的磁盘标签为GPT

选择了/dev/hdb作为我们操作的磁盘,接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):设置所需的磁盘标签,支持的磁盘标签有 bsd、loop、gpt、mac、msdos、pc98 和 sun。

(parted) mklabel

New disk label type? gpt    (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)

3.3 完成分区操作

创建好分区表以后,接下来就可以进行分区操作了,执行mkpart命令,分别输入分区名称,文件系统和分区的起止位置。

(parted) mkpart

Partition name? []? dp1

File system type? [ext2]? xfs

Start? 0           (可以用百分比表示,比如Start? 0% , End? 50%)

End? 500GB

命令格式

mkpart  PART-TYPE  [FS-TYPE]  START  END

  • PART-TYPE(分区类型)
    • primary 主分区
    • logical 逻辑分区
    • extended 扩展分区
  • FS-TYPE(文件系统类型)
    • ext4
    • ext3
    • ext2
    • xfs
    • 其他......
  • START
  • 设定磁盘分区起始点;可以为0,numberMiB/GiB/TiB;
    • 0 设定当前分区的起始点为磁盘的第一个扇区;
    • 1G 设定当前分区的起始点为磁盘的1G处开始;
  • END
  • 设定磁盘分区结束点;
    • -1 设定当前分区的结束点为磁盘的最后一个扇区;
    • 10G 设定当前分区的结束点为磁盘的10G处;

3.4 验证分区信息

分好区后可以使用print命令打印分区信息,下面是一个print的样例

(parted) print

Model: VBOX HARDDISK (ide)

Disk /dev/hdb: 3841GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number Start End Size File system Name Flags

1 17.4kB 500GB 500GB dp1

3.5 查找磁盘上未分配的空间

要查找未分配空间,请选择您的磁盘,然后运行print free命令。

3.6 删除分区示例

如果分区错了,可以使用rm命令删除分区,比如我们要删除上面的分区,然后打印删除后的结果

(parted)rm 1               #rm后面使用分区的号码,就是用print打印出来的Number

(parted) print

Model: VBOX HARDDISK (ide)

Disk /dev/hdb: 3841GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number Start End Size File system Name Flags

3.7 在分区上设置标志

Parted 允许在分区上设置标志。有些标志取决于磁盘标签,请不要感到惊讶。标志可以打开或关闭。最常用的标志是 boot、lab、swap、raid、LVM 等。

以下命令在分区 2 上设置 LVM 标志:

(parted)set 2 LVM on

当我们需要设置引导分区时的另一个实际示例:

(parted) set 2 boot on

3.8 设置默认单位

parted 中的单位命令有助于设置默认单位以显示容量和位置。

支持的单位有:

KiB- kibibyte

MiB - mebibyte

GiB - gibibyte

TiB - tebibyte

kB - kilobyte

MB - megabyte

GB - gigabyte

TB - terabyte

% - percentage of the device

cyl - cylinders

chs - cylinders, heads, sectors addressing

compact - Use human-readable representation for output

以下命令将单元设置为压缩:

(parted) unit compact

(parted) print

Model: Xen Virtual Block Device (xvd)

Disk /dev/xvda: 8590MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Disk Flags:

Number  Start   End     Size    Type     File system  Flags

 1      1049kB  8590MB  8589MB  primary  ext4         boot

(parted)

您还可以按以下单位打印:

(parted) unit GB print

Model: Xen Virtual Block Device (xvd)

Disk /dev/xvda: 8.59GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Disk Flags:

Number  Start   End     Size    Type     File system  Flags

 1      0.00GB  8.59GB  8.59GB  primary  ext4         boot

(parted)

3.9 格式化操作

在交互状态下,完成以后我们可以使用quit命令退出parted并使用系统的mkfs命令对分区进行格式化。

[root@my-linux ~]# fdisk -l

WARNING: GPT (GUID Partition Table) detected on '/dev/hdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/hdb: 3841.0 GB, 3841022206976 bytes

255 heads, 63 sectors/track, 267349 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hdb1 1 267350 2147482623+ ee EFI GPT

[root@my-linux ~]# mkfs.xfs /dev/hdb1

[root@my-linux ~]# mkfs.xfs /dev/hdb2

[root@my-linux ~]# mkdir /data1 /data2

[root@my-linux ~]# mount /dev/hdb1 /data1

[root@my-linux ~]# mount /dev/hdb2 /data2

3.10 交互创建分区的完整示示例

按照上面的方法把整个硬盘都分好区,下面是一个分完后的样例

(parted) mkpart

Partition name? []? dp1

File system type? [ext2]? xfs

Start? 0

End? 500GB

(parted) mkpart

Partition name? []? dp2

File system type? [ext2]? xfs

Start? 500GB

End? 3841GB

(parted) print

Model: VBOX HARDDISK (ide)

Disk /dev/hdb: 3841GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number Start End Size File system Name Flags

1 17.4kB 500GB 500GB dp1

2 500GB 3841GB 1699GB dp2

五、非交互方式

5.1 创建分区表

parted /dev/sdl mklabel gpt

5.2 将硬盘所有容量分给主分区

parted /dev/sdl mkpart primary 0% 100%

5.3 查询磁盘的已有分区

parted /dev/sdl print

5.4 查询硬盘分区

   fdisk -l

    or

   lsblk

5.5 格式化分区

mkfs -t xfs /dev/sdl1

文件系统EXT3,EXT4和XFS的区别:

EXT3

(1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件

(2)Ext3目前只支持32000个子目录

(3)Ext3文件系统使用32位空间记录块数量和i-节点数量

(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块

EXT4

EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。

(1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB

(2)理论上支持无限数量的子目录

(3)Ext4文件系统使用64位空间记录块数量和i-节点数量

(4)Ext4的多块分配器支持一次调用分配多个数据块

XFS

(1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容

(2)采用优化算法,日志记录对整体文件操作影响非常小

(3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间

(4)能以接近裸设备I/O的性能存储数据

5.6 查询/dev/sdl1的blkid

blkid /dev/sdl1

5.7 修改/etc/fstab

vi /etc/fstab

编辑/etc/fstab使开机可知道挂载文件系统。

5.8 挂载文件系统,查询

mount -a

df -h

六、非交互方式示例

6.1 创建gpt分区表

    [root@my-linux ~]# parted /dev/sdb mklabel gpt

    Information: You may need to update /etc/fstab.

6.2 划分3个分区

    [root@my-linux ~]# parted /dev/sdb mkpart primary 0% 27%

    Information: You may need to update /etc/fstab.

    

    [root@my-linux ~]# parted /dev/sdb mkpart primary 27% 54%

    Information: You may need to update /etc/fstab.

    

    [root@my-linux ~]# parted /dev/sdb mkpart primary 54% 81%

    Information: You may need to update /etc/fstab.

6.3 打印分区

    [root@my-linux ~]# parted /dev/sdb print

    Model: HP LOGICAL VOLUME (scsi)

    Disk /dev/sdb: 3841GB

    Sector size (logical/physical): 512B/4096B

    Partition Table: gpt

    Disk Flags:

    

    Number  Start   End     Size    File system  Name     Flags

     1      2097kB  1037GB  1037GB               primary

     2      1037GB  2074GB  1037GB               primary

     3      2074GB  3111GB  1037GB               primary

6.4 删除分区

删除分区的命令是parted /dev/sdb rm 1其中最后的数字 1 表示分区编号。

    [root@my-linux ~]# parted /dev/sdb rm 1

    Information: You may need to update /etc/fstab.

    

    [root@my-linux ~]# parted /dev/sdb rm 2

    Information: You may need to update /etc/fstab.

    

    [root@my-linux ~]# parted /dev/sdb rm 3

    Information: You may need to update /etc/fstab.

    

    [root@my-linux ~]# parted /dev/sdb print       

    Model: HP LOGICAL VOLUME (scsi)

    Disk /dev/sdb: 3841GB

    Sector size (logical/physical): 512B/4096B

    Partition Table: gpt

    Disk Flags:

     

    Number  Start  End  Size  File system  Name  Flags

    

七、MBR & GPT

    MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区

    GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破 MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。

八、parted 分区对齐报错

在使用parted创建分区时产生告警信息, "Warning: The resulting partition is not properly aligned for best performance."

8.1 问题

(parted) mkpart primary 128 1048575

Warning: You requested a partition from 128s to 1048575s.                

The closest location we can manage is 128s to 1048542s.

Is this still acceptable to you?

Yes/No? Yes                                                               

Warning: The resulting partition is not properly aligned for best performance.  <----

Ignore/Cancel? C 

忽略这个告警分区可以正常创建,只不过会影响磁盘性能。那么该如何创建一个正确对齐的分区呢?

8.2 解决方案

8.2.1 百分比

一般来说只要正确的选择分区开始的位置就可以解决这个问题,但需要查询和计算一下相应的参数。通常相较于使用明确的开始和结束位置使用百分比可以更容易使分区对齐。

mkpart primary 0% 100% or mkpart primary 0% 320GB 创建单个分区, 或

mkpart primary 0% 50% and mkpart primary 50% 100% 创建两个大小相等的分区。

8.2.2 1MiB偏移量

一般情况下,很大一部分磁盘的默认对齐粒度为1MiB,因此在大多数情况下,使用MiB作为mkpart中的单元就可以创建一个对齐的分区。由于磁盘空间上的第一个MiB包括0扇区中的遗留主引导记录(MBR)和紧随其后的gpt主表(如果是gpt类型),因此需要跳过磁盘上的第一个MiB,并从1MiB开始分区:

mkpart primary 1MiB 100% 例如,创建单个分区。

8.2.3 计算偏移量#

如果使用百分比或1MiB偏移量不起作用,可以通过查询设备相应的sysfs条目来直接计算所需的对齐

获取如下值:

# cat /sys/block/sdb/queue/optimal_io_size

# cat /sys/block/sdb/alignment_offset

# cat /sys/block/sdb/queue/physical_block_size

获取正确的偏移扇区数是将 optimal_io_size 和 alignment_offset 相加然后除以 physical_block_size.

For example:

optimal_io_size = 1310720

alignment_offset = 0

physical_block_size = 512

i.e 1310720+0/512 = 2560

现在创建分区的命令可以是:

(parted)  mkpart primary 2560 100%    OR

(parted)  mkpart primary 2560 1000G

九、非交互式方式实现脚本

适用于需要在多台主机上进行同样的分区操作,可以通过ansible工具调用脚本实现批量分区配置挂载等操作。因为整个/dev/sdb只分了一个区,则这个分区名默认会分配为/dev/sdb1;使用mkfs命令将/dev/sdb1分区格式化为ext4

[root@kvm ~]# cat ./auto_partition.sh

#!/bin/bash

# 新建/dev/sdb的磁盘标签类型为GPT

parted /dev/sdb mklabel gpt

# 将/dev/sdb整个空间分给同一个分区

parted /dev/sdb mkpart primary 0 100%

# 忽略警告

ignore

# 格式化分区

mkfs -t ext4 /dev/sdb1

# 设定分区label(非必要)

e2label /dev/sdb1 /gfsdata01

# 创建挂载目录

mkdir /gfsdata01

# 临时挂载

mount /dev/sdb1 /gfsdata01

# 开机自动挂载(永久挂载)

echo '/dev/sdb1 /gfsdata01       ext4    defaults        0 0'>>/etc/fstab

[root@kvm ~]#

十、参考文档

https://www.cnblogs.com/wholj/p/10924129.html

Linux parted 分区命令详解_parted分区命令_CN-FuWei的博客-CSDN博客

;