天天看点

GPT和parted命令详解(原创)

gpt概述

全局唯一标识分区表(guid partition table,缩写:gpt)是一个实体硬盘的分区结构。它是可扩展固件接口标准的一部分,用来替代bios中的主引导记录分区表。 传统的主启动记录 (mbr) 磁盘分区支持最大卷为 2.2 tb (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)。 与mbr 分区方法相比,gpt 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节 (exabytes,1eb=10^6tb) 的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 id (guid)。

在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的结构见下图

GPT和parted命令详解(原创)

传统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进制编辑器修改。

分区表头的格式如下

起始字节

长度

内容

8字节

签名("efi part", 45 46 49 20 50 41 52 54)

8

4字节

修订(在1.0版中,值是 00 00 01 00)

12

分区表头的大小(单位是字节,通常是92字节,即 5c 00 00 00)

16

分区表头(第0-91字节)的crc32 校验,在计算时,把这个字段作为0处理,需要计算出分区串行的crc32校验后再计算本字段

20

保留,必须是 0

24

当前lba(这个分区表头的位置)

32

备份lba(另一个分区表头的位置)

40

第一个可用于分区的lba(主分区表的最后一个lba + 1)

48

最后一个可用于分区的lba(备份分区表的第一个lba − 1)

56

16字节

硬盘guid(在类unix 系统中也叫uuid)

72

分区表项的起始lba(在主分区表中是2)

80

分区表项的数量

84

一个分区表项的大小(通常是128)

88

分区串行的crc32校验

92

*

保留,剩余的字节必须是0(对于512字节lba的硬盘即是420个字节)

主分区表和备份分区表的头分别位于硬盘的第二个扇区(lba 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

分区表项 (lba 2–33) 

gpt分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型guid。例如,efi系统分区的guid类型是{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}。接下来的16字节是该分区唯一的guid(这个guid指的是该分区本身,而之前的guid指的是该分区的类型)。再接下来是分区起始和末尾的64位lba编号,以及分区的名字和属性。

gpt分区表项的格式如下

分区类型guid

分区guid

起始lba(小端序 )

末尾lba

属性标签(如:<code>60</code> 表示“只读”)

72字节

分区名(可以包括36个utf-16(小端序)字符)

parted概述 

上文介绍了gpt,由于常见的fdisk不支持gpt(在硬盘容量大于2tb的时候无法使用fdisk进行分区的管理),故在ia64平台上管理磁盘时parted还是相当实用的,gnu parted 具有丰富的功能,它除了能够进行分区的添加、删除等常见操作外,还可以进行移动分区、创建文件系统、调整文件系统大小、复制文件系统等操作。它可以处理最常见的分区格式,包括:ext2,ext3,fat16,fat32,ntfs,reiserfs,jfs,xfs,ufs,hfs,以及linux交换分区。 

parted 命令格式 

parted 有两种运行模式:命令行模式和交互模式。与 fdisk 的交互模式交互模式不同,在 parted 的交互模式下执行命令,一旦按回车键确认,命令就马上执行,对磁盘的更改就立刻生效。

parted 命令的常用格式是:

1、# parted [选项] &lt;硬盘设备名&gt;

2、# parted [选项] &lt;硬盘设备名&gt; &lt;子命令&gt; [&lt;子命令参数&gt;]

格式(1)用于进入parted 的交互模式,在该模式下输入parted的子命令对指定的硬盘进行分区等操作。quit 命令用于退出交互模式。

格式(2)直接在命令行方式下对指定的硬盘进行分区等操作。

其中常用的选项为:

-h, ––help — 显示求助信息

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

-l, ––list — 显示所有磁盘设备的分区表

-s, ––script — 从不提示用户

-v, ––version — 显示版本

无论哪种模式,在parted中都可以使用若干子命令,见下表。

命令 

说明

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 或 off

unit 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             #查看分区信息                                               

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                                                                 

13      4516mb  4697mb  181mb   logical                     

(parted) unit s              #设置单位为扇区                                         

disk /dev/sdd: 52953087s

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

(parted) set 12 lvm on          #将分区12的lvm标志打开,这里仅打开标志,并未实际创建lv 

(parted) p                                                                

12      8726560s  8806399s  79840s    logical   ext3         lvm 

(parted) q                #退出交换模式                                                

information: don't forget to update /etc/fstab, if necessary.

# parted -l /dev/sda             # 直接在命令模式下显示sda的分区表

model: vmware, vmware virtual s (scsi)

disk /dev/sda: 8590mb

number start end size type file system 标志

1 32.3kb 107mb 107mb 主分区 ext3 启动

2 107mb 8587mb 8480mb 主分区 lvm

参考至: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

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:[email protected]

作者:czmmiao  文章出处:http://czmmiao.iteye.com/blog/1751408

继续阅读