GPT和parted命令详解(原创)
GPT概述
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构。它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表。传统的主启动记录 (MBR) 磁盘分区支持最大卷为2.2TB (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)。与MBR 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节(exabytes,1EB=10^6TB) 的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。
与 MBR 分区的磁盘不同,GPT的分区信息是在分区中,而不象MBR一样在主引导扇区。为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区 (Protective MBR)的MBR分区表,这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。
在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。跟现代的MBR一样,GPT也使用逻辑区块地址(LBA)取代了早期的CHS寻址方式。传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位Windows操作系统使用16,384字节(或32扇区)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区ID(GUID)。
GPT结构
GPT的结构见下图
传统MBR (LBA 0)
在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动Windows。
分区表头 (LBA 1)
分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
分区表头的格式如下
说明help [COMMAND]打印命令的帮助信息,或指定命令的帮助信息print? [free|NUMBER|all] ? ?显示分区表, 指定编号的分区, 或所有设备的分区表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 或 offunit UNIT设置默认输出时表示磁盘大小的单位为 UNIT,UNIT 的常用取值可以为:‘MB’、‘GB’、‘%’(占整个磁盘设备的百分之多少)、‘compact’(人类易读方式,类似于 df 命令中 -h 参数的用)、‘s’(扇区)、‘cyl’ (柱面)、‘chs’ (柱面cylinders:磁头 heads:扇区 sectors 的地址)mkfs NUMBER FS-TYPE对指定编号 NUMBER 的分区创建指定类型 FS-TYPE 的文件系统。mkpartfs PART-TYPE FSTYPE START END创建新分区同时创建文件系统。FS-TYPE 是以下类型一:ext2、fat16、fat32、linuxswap、NTFS、reiserfs、ufs 等cp [FROM-DEVICE] FROM-NUMBER TONUMBER将分区 FROM-NUMBER 上的文件系统完整地复制到分区TO-NUMBER 中,作为可选项还可以指定一个来源硬盘的设备名称FROM-DEVICE,若省略则在当前设备上进行复制。move NUMBER START END将指定编号 NUMBER 的分区移动到从 START 开始 END 结束的位置上。注意:(1)只能将分区移动到空闲空间中。(2)虽然分区被移动了,但它的分区编号是不会改变的resize NUMBER START END对指定编号 NUMBER 的分区调整大小。分区的开始位置和结束位置由 START 和 END 决定check NUMBER
检查指定编号 NUMBER 分区中的文件系统是否有什么错误
rescue START END 恢复靠近位置 START 和 END 之间的分区mklabel,mktable LABELTYPE创建一个新的 LABEL-TYPE 类型的空磁盘分区表,对于PC而言 msdos 是常用的 LABELTYPE。若是用 GUID 分区表,LABEL-TYPE 应该为 gpt
parted使用实例
# parted /dev/sdd
GNU Parted 1.8.1
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print???????????????????????????????????????????????????????????
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 27.1GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
???????????????????????????????????????????????????????
(parted) print???????????? #查看分区信息 ?????????????????????????????????????????????
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 27.1GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number? Start?? End???? Size??? Type????? File system? Flags
?1????? 16.4kB? 4001MB? 4001MB? primary????????????????????
?4????? 4001MB? 4703MB? 701MB?? extended???????????????????
?5????? 4001MB? 4102MB? 101MB?? logical????????????????????
?6????? 4102MB? 4203MB? 101MB?? logical????????????????????
?7????? 4203MB? 4303MB? 101MB?? logical????????????????????
?8????? 4303MB? 4404MB? 101MB?? logical????????????????????
?9????? 4404MB? 4416MB? 11.5MB? logical????????????????????
10????? 4416MB? 4437MB? 21.0MB? logical????????????????????
11????? 4437MB? 4468MB? 31.4MB? logical????????????????????
12????? 4468MB? 4509MB? 40.9MB? logical?? ext3?????????????
(parted) mkpart???????????????? #创建新的分区 ??????????????????????????????????????
Partition type?? primary/logical? l??????????????????????????????????????
File system type?? [ext2]? ext3??????????????????????????????????????????
Start? 4509MB????????????????????????????????????????????????????????????
End? -1s??????? # 表示硬盘最后一个扇区,就是硬盘的最末尾处
Warning: You requested a partition from 4509MB to 27.1GB.????????????????
The closest location we can manage is 4516MB to 4697MB.? Is this still acceptable to you?
Yes/No? y????????????????????????????????????????????????????????????????
(parted) print???????????????????????????????????????????????????????????
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 27.1GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number? Start?? End???? Size??? Type????? File system? Flags
?1????? 16.4kB? 4001MB? 4001MB? primary????????????????????
?4????? 4001MB? 4703MB? 701MB?? extended???????????????????
?5????? 4001MB? 4102MB? 101MB?? logical????????????????????
?6????? 4102MB? 4203MB? 101MB?? logical????????????????????
?7????? 4203MB? 4303MB? 101MB?? logical????????????????????
?8????? 4303MB? 4404MB? 101MB?? logical????????????????????
?9????? 4404MB? 4416MB? 11.5MB? logical????????????????????
10????? 4416MB? 4437MB? 21.0MB? logical????????????????????
11????? 4437MB? 4468MB? 31.4MB? logical????????????????????
12????? 4468MB? 4509MB? 40.9MB? logical?? ext3?????????????
13????? 4516MB? 4697MB? 181MB?? logical????????????????????
(parted) unit s????????????? #设置单位为扇区???????????????????????????????????????
(parted) print???????????????????????????????????????????????????????????
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 52953087s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number? Start???? End?????? Size????? Type????? File system? Flags
?1????? 32s?????? 7815167s? 7815136s? primary????????????????????
?4????? 7815168s? 9185279s? 1370112s? extended???????????????????
?5????? 7815200s? 8011775s? 196576s?? logical????????????????????
?6????? 8011808s? 8208383s? 196576s?? logical????????????????????
?7????? 8208416s? 8404991s? 196576s?? logical????????????????????
?8????? 8405024s? 8601599s? 196576s?? logical????????????????????
?9????? 8601632s? 8624127s? 22496s??? logical????????????????????
10????? 8624160s? 8665087s? 40928s??? logical????????????????????
11????? 8665120s? 8726527s? 61408s??? logical????????????????????
12????? 8726560s? 8806399s? 79840s??? logical?? ext3?????????????
13????? 8819748s? 9173114s? 353367s?? logical????????????????????
(parted) rm 13?????????????? #删除分区13 ????????????????????????????????????????????????????????????
(parted) p
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 52953087s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number? Start???? End?????? Size????? Type????? File system? Flags
?1????? 32s?????? 7815167s? 7815136s? primary????????????????????
?4????? 7815168s? 9185279s? 1370112s? extended???????????????????
?5????? 7815200s? 8011775s? 196576s?? logical????????????????????
?6????? 8011808s? 8208383s? 196576s?? logical????????????????????
?7????? 8208416s? 8404991s? 196576s?? logical????????????????????
?8????? 8405024s? 8601599s? 196576s?? logical????????????????????
?9????? 8601632s? 8624127s? 22496s??? logical????????????????????
10????? 8624160s? 8665087s? 40928s??? logical????????????????????
11????? 8665120s? 8726527s? 61408s??? logical????????????????????
12????? 8726560s? 8806399s? 79840s??? logical?? ext3?????????????
(parted) set 12 lvm on????????? #将分区12的lvm标志打开,这里仅打开标志,并未实际创建lv
(parted) p???????????????????????????????????????????????????????????????
Model: OPNFILER VIRTUAL-DISK (scsi)
Disk /dev/sdd: 52953087s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number? Start???? End?????? Size????? Type????? File system? Flags
?1????? 32s?????? 7815167s? 7815136s? primary????????????????????
?4????? 7815168s? 9185279s? 1370112s? extended???????????????????
?5????? 7815200s? 8011775s? 196576s?? logical????????????????????
?6????? 8011808s? 8208383s? 196576s?? logical????????????????????
?7????? 8208416s? 8404991s? 196576s?? logical????????????????????
?8????? 8405024s? 8601599s? 196576s?? logical????????????????????
?9????? 8601632s? 8624127s? 22496s??? logical????????????????????
10????? 8624160s? 8665087s? 40928s??? logical????????????????????
11????? 8665120s? 8726527s? 61408s??? logical????????????????????
12????? 8726560s? 8806399s? 79840s??? logical?? ext3???????? lvm?
(parted) q??????????????? #退出交换模式 ??????????????????????????????????????????????
Information: Don't forget to update /etc/fstab, if necessary.
参考至:http://blog.sina.com.cn/s/blog_6ca646a00100z0uq.html
??????????? http://goward.jimdo.com/2010/07/19/linux-parted%E5%88%86%E5%8C%BA%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/
??????????? http://zh.wikipedia.org/wiki/GUID%E7%A3%81%E7%A2%9F%E5%88%86%E5%89%B2%E8%A1%A8
??????????? http://baike.baidu.com/view/493745.htm
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com