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的結構見下圖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SM5AjMxMDNxIDMyITMyEDMycTNzAjNxYTNvwVMy8CXwIjMxITMwIzLc9GdvhGc512Lc92YvBXet9CXuNmLvN2bw5SM4AjMn1Wavw1LcpDc0RHaiojIsJye.png)
傳統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 的互動模式下執行指令,一旦按Enter鍵确認,指令就馬上執行,對磁盤的更改就立刻生效。
parted 指令的常用格式是:
1、# parted [選項] <硬碟裝置名>
2、# parted [選項] <硬碟裝置名> <子指令> [<子指令參數>]
格式(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
本文原創,轉載請注明出處、作者
如有錯誤,歡迎指正
作者:czmmiao 文章出處:http://czmmiao.iteye.com/blog/1751408