一、概述
通常我们用的比较多的分区工具是fdisk命令,但由于fdisk只支持MBR分区,MBR分区表最大支撑2T的磁盘,所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区。
parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具。GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的416个字节,只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT分区方式没有四个主分区的限制,最多可达到128个主分区 。下面我们看下parted命令的用法。
#扫描新磁盘
echo "- - -" > /sys/class/scsi_host/host0/scan
1.语法结构#
yum install -y #没有parted命令的话安装即可
Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
二、选项
选项 描述
-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 创建分区,并建立文件系统
move NUMBER START END 移动分区
name NUMBER NAME 给分区命名
print [devices|free|list,all|NUMBER] 显示分区表、活动设备、空闲空间、所有分区
quit 退出
rescue START END 修复丢失的分区
resize NUMBER START END 修改分区大小
rm NUMBER 删除分区
select DEVICE 选择需要编辑的设备
set NUMBER FLAG STATE 改变分区标记
toggle [NUMBER [FLAG]] 切换分区表的状态
unit UNIT 设置默认的单位
Version 显示版本
四、交互操作实例:
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.
2、创建分区
选择了/dev/hdb作为我们操作的磁盘,接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):
(parted) mklabel
New disk label type? gpt (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)
3、完成分区操作
创建好分区表以后,接下来就可以进行分区操作了,执行mkpart命令,分别输入分区名称,文件系统和分区 的起止位置
(parted) mkpart
Partition name? []? dp1
File system type? [ext2]? xfs
Start? 0 (可以用百分比表示,比如Start? 0% , End? 50%)
End? 500GB
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
5、删除分区示例
如果分区错了,可以使用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
7、格式化操作
在交互状态下,完成以后我们可以使用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
8、交互创建分区的完整示示例
按照上面的方法把整个硬盘都分好区,下面是一个分完后的样例
(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
五、非交互方式
1、创建分区表
parted /dev/sdl mklabel gpt
2、将硬盘所有容量分给主分区
parted /dev/sdl mkpart primary 0% 100%
3、查询磁盘的已有分区
parted /dev/sdl print
4、查询硬盘分区
fdisk -l
or
lsblk
5、格式化分区
mkfs -t xfs /dev/sdl1
6、查询/dev/sdl1的blkid
blkid /dev/sdl1
7、修改/etc/fstab
vi /etc/fstab
编辑/etc/fstab使开机可知道挂载文件系统。
8、挂载文件系统,查询
mount -a
df -h
六、非交互方式示例
创建gpt分区表
[root@my-linux ~]# parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.
划分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.
打印分区
[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
删除分区
删除分区的命令是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
[root@my-linux ~]#
七、使用实战
[root@kubernetes ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 3T 0 disk
sr0 11:0 1 1024M 0 rom
sda 8:0 0 20G 0 disk
├─sda2 8:2 0 19G 0 part
│ ├─centos-swap 253:1 0 2G 0 lvm [SWAP]
│ └─centos-root 253:0 0 17G 0 lvm /
└─sda1 8:1 0 1G 0 part /boot
查看帮助信息
[root@kubernetes ~]# 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 显示帮助信息
-l, --list 列出全部块设备的分区表信息
-m, --machine displays machine parseable output
-s, --script never prompts for user intervention
-v, --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] 打印帮助信息
mklabel,mktable LABEL-TYPE 创建新的磁盘标签 (分区表)
mkpart PART-TYPE [FS-TYPE] START END 创建一个分区
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table,available devices, free space, all found partitions, or a particular partition
quit 退出
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
unit UNIT 设置unit单位
version 显示版本信息
开始对3T的磁盘分区
[root@kubernetes ~]#parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart #想分一个区
Error: /dev/sdb: unrecognised disk label #由于我们这是一个新的硬盘,硬盘还没有分区表,所以这里报错了,所以我们需要先创建一个gpt分区表
(parted) mklabel #输入mklabel
New disk label type? gpt #输入gpt,这里如果有警告说要销毁数据,请自己确认。
(parted) mkpart #输入mkpart开始分区
Partition name? []? part1 #给分区命名,随便输入一个分区名称即可,不输入直接回车也可以
File system type? [ext2]? ext4 #分区被格式化的文件系统,可以按两次Tab键查看支持的文件系统
affs0 affs4 amufs amufs3 apfs2 ext3 hfs jfs linux-swap(v0) reiserfs
affs1 affs5 amufs0 amufs4 asfs ext4 hfs+ linux-swap linux-swap(v1) sun-ufs
affs2 affs6 amufs1 amufs5 btrfs fat16 hfsx linux-swap(new) nilfs2 swsusp
affs3 affs7 amufs2 apfs1 ext2 fat32 hp-ufs linux-swap(old) ntfs xfs
File system type? [ext2]? ext4 #一般可以使选ext4和xfs,这里输入ext4
Start? 0% #分区的开始位置,如果是一块新的磁盘,这里要输入0%或2048s或1M都可以但是不要输入别的。建议输入0%。
End? 100% #分区的结束位置
(parted) print #打印分区信息,可以看到已经有一个分区了
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 3299GB 3299GB
删除分区
(parted) rm 1 #删除分区,1是分区的Number号
删除分区了,下面看下已经没有任何分区了
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
重新来多创建几个分区
(parted) mkpart
Partition name? []? part1 #给分区命名
File system type? [ext2]? ext4 #文件系统格式
Start? 0% #输入0%表示从磁盘开始位置开启
End? 10G #结束位置可以指定多少G
(parted) print #查看分区信息,现在就有了一个10G的分区,叫part1
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 9999MB part1
(parted) mkpart #继续分区
Partition name? []? part2 #分区名称
File system type? [ext2]? xfs #分区文件系统类型。
Start? 10G #这里输入分区开始位置,因为我们上一个分区是10G结束的,所以这里10G开始
End? 20G #指定结束分区
(parted) print #查看分区信息 ,现在有两个分区了,大小都是10G
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 9999MB part1
2 10.0GB 20.0GB 9999MB part2
(parted) mkpart #继续分第三个分区
Partition name? []? part3
File system type? [ext2]? ext4
Start? 20G #开始位置从20G开始,因为我们上一个分区是20G结束的
End? 100% #这里100%表示,分配磁盘的剩余全部空间
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 9999MB part1
2 10.0GB 20.0GB 9999MB part2
3 20.0GB 3299GB 3279GB part3
(parted) quit #分区完成,退出即可。
Start? 如果Start位置输入的不是0%或2048s或1M或0G的数值,分区结束会有这个的提示,Warning: The resulting partition is not properly aligned for best performance.Ignore/Cancel? (意思是说警告:生成的分区没有正确对齐以获得最佳性能。忽略/取消? 我们可以输入Ignore以忽略,但是这样并不好)
这是因为在512B扇区的磁盘驱动器上,Parted希望分区从2048的倍数(即1 MiB对齐)扇区开始
创建文件系统,挂载分区
[root@kubernetes ~]# lsblk /dev/sdb #查看设备,分区已经出来了
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 3T 0 disk
├─sdb2 8:18 0 9.3G 0 part
├─sdb3 8:19 0 3T 0 part
└─sdb1 8:17 0 9.3G 0 part
下面的命令就是创建lvm
pvcreate /dev/sdb1 #将磁盘分区格式化为pv
vgcreate vggpt /dev/sdb1 #创建vg卷组
lvcreate -n lvgpt -l +100%FREE vggpt #在vg卷组上面创建lv
mkfs.ext4 /dev/vggpt/lvgpt #格式化lv,创建文件系统
mkdir /gpt #创建挂载点
mount /dev/vggpt/lvgpt /gpt/ #挂载
[root@kubernetes ~]# df -h /gpt/ #查看,正常
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vggpt-lvgpt 9.1G 37M 8.6G 1% /gpt
[root@kubernetes ~]# touch /gpt/test && ls /gpt/ #创建文件、查看文件正常
lost+found test
八、MBR & GPT
MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区
GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破 MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。
查看内核是否已经识别新的分区
cat /proc/partations