在介绍2T以上硬盘的管理方式之前,先给大家介绍一下GPT。
GPT全局唯一标识分区表(GUID Partition Table,缩写:GPT),其出现的目的是为了替代旧式的MBR,对于扇区为512字节的磁盘不支持2.2TB的分区,一些硬盘厂商注意到了这个局限性,比如:希捷和西部数据。并且他们将容量较大的磁盘升级到了4KB的扇区,这意味着MBR的有效容量上限提升到了8.8TB,看似“正确的”解决方案,在临时地降低了人们对GPT的需求的同时,也给市场带来了在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。
且作为MBR的继承者,GPT正是为了解决MBR的诸多限制.
GPT修复MBR的限制:
1、磁盘指针大小为64位,假设扇区为512字节,这意味着GPT可以处理的磁盘大小高达86亿TiB
2、GPT数据结构在磁盘上存储两次,开始和结束各一次,在因师傅或扇区导致损坏的情况下,这种重复提高了恢复的几率。
3、GPT将所有分区存储在单个分区表中(带有备份),因此扩展分区或逻辑分区没有存在的必要。GPT默认支持128个分区,当然也可以更改分区表的大小,如果分区软件支持这种更改的话。
4、MBR使用1字节分区类型代码,GPT使用一个16字节的全局唯一标识符(GUID)值来表示分区类型,这使分区类型更不容易冲突。
5、GPT支持存储人类可读的分区名称。(例如/home,/usr)
MBR分区表结构:
GPT分区表结构:
LBA-0:
在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护性MBR(Protective MBR)。
保护性MBR可以保护GPT磁盘不受MBR(fdisk)磁盘工具的危害。这些工具不能感知GPT,也无法正确地访问GPT磁盘。这就是用传统的fdisk工具为什么不能管理GPT分区的原因。
另外GPT需要在内核中支持,但好在Linux一直都支持!
LBA-1:
分区表头(LBA-1):定义了硬盘的可用空间及组成分区表的项的大小和数量。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
分区表头记录的具体内容可以看下表
LBA 2-33
LBA 2–33的位置存放的是分区表项。GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。
GPT分区表项的格式
看完这些基本概念是不是已经懵了,没关系,我也没有理解的特别透彻,你只要记住GPT的优点就好了,接下来介绍在Linux下面如何管理GPT分区。
首先我们来用fdisk来试一下对2.2T以上的磁盘分区:
从上面可以看到,fdisk警告最大可用仅为2199023255040 bytes,可以用parted分区管理工具管理GPT。
下面开始介绍parted
命令使用格式: parted [options] [device [command [options...]...]]
命令参数[options]:此处几个参数比较简单,不过多演示。
-h 帮助信息
-v查看版本信息
-s免交互式
交互式时的参数[command [options...]:
help(可以用简写h):帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# parted /dev/sdc
GNU Parted 3.1
Using
/dev/sdc
Welcome to GNU Parted! Type
'help'
to view a list of commands.
(parted) h
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|NUMBER] display the partition table, available devices,
free
space, all found partitions, or a particular partition
quit
exit
program
rescue START END rescue a lost partition near START and END
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
set
the default unit to UNIT
version display the version number and copyright
information of GNU Parted
(parted)
|
p(print):列出分区表
mklabel 设置标签类型:可选项有"aix", "amiga", "bsd", "dvh", "gpt", "loop", "mac","msdos", "pc98", or "sun"
1
2
3
4
5
6
7
8
|
(parted) mklabel gpt
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
|
mkpart创建分区:mkpart part-type [fs-type] start end
part-type:分区类型,可选:"primary", "logical", or "extended".
fs-type:与fdisk不同,parted是专门为linux设计的一种工具,所以支持的文件系统类型没有fdisk支持的那么多,但是也支持大部分linux文件系统:ext2、ext3、ext4、fat16、fat32、NTFSReiserFS、JFS、XFS、UFS、HFS、swap。(此选项可以省略,在格式化时指定文件系统类型后,parted会自动更改分区类型)
name partition name:设置分区名字,仅用于Mac,PC98,and GPT disklabels.
1
2
3
4
5
6
7
8
9
|
(parted) name 1 mageedu
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 2000GB 2000GB mageedu
|
set partition flag state:设置分区标志
# 注意,此处flag得值,仅限:"boot", "root", "swap", "hidden", "raid", "lvm", "lba", "legacy_boot" and "palo".
# stat的值:"on" or "off".
1
2
3
4
5
6
7
8
9
|
(parted)
set
1 boot on
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 2000GB 2000GB mageedu boot
|
toggle partition flag:取消或者开启分区标志
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
26
27
28
29
30
|
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 2000GB 2000GB mageedu boot
(parted) toggle 1 boot
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 2000GB 2000GB mageedu
(parted) toggle 1 boot
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk
/dev/sdc
: 3221GB
Sector size (logical
/physical
): 512B
/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 2000GB 2000GB mageedu boot
|
align-check type partition:检查分区类型是否满足类型的约束;
type 必须是 "minimal" or "optimal".(完整检查和最小化检查)
# 此处注意:一般是检查分区的文件系统类型是否满足,一般在格式化后操作
# 这里之前我做了一次格式化(mkfs.ext4 /dev/sdc1)
rm partition:删除分区
# 次处于fdisk有一个不同之处,parted删除分区1后,分区2不会变成1
好了,对parted的介绍就到这里了!
在这里提醒一下各位,数据无价,对磁盘进行操作时,必须慎重慎重再慎重!!