xref: /dragonfly/contrib/file/magic/Magdir/gpt (revision 655933d6)
1
2#------------------------------------------------------------------------------
3# $File: gpt,v 1.5 2020/12/12 20:01:47 christos Exp $
4#
5# GPT Partition table patterns.
6# Author: Rogier Goossens (goossens.rogier@gmail.com)
7# Note that a GPT-formatted disk must contain an MBR as well.
8#
9
10# The initial segment (up to >>>>>>>>422) was copied from the X86
11# partition table code (aka MBR).
12# This is kept separate, so that MBR partitions are not reported as well.
13# (use -k if you do want them as well)
14
15# First, detect the MBR partition table
16# If more than one GPT protective MBR partition exists, don't print anything
17# (the other MBR detection code will then just print the MBR partition table)
180x1FE			leshort		0xAA55
19>3			string		!MS
20>>3			string		!SYSLINUX
21>>>3			string		!MTOOL
22>>>>3			string		!NEWLDR
23>>>>>5			string		!DOS
24# not FAT (32 bit)
25>>>>>>82		string		!FAT32
26#not Linux kernel
27>>>>>>>514		string		!HdrS
28#not BeOS
29>>>>>>>>422		string		!Be\ Boot\ Loader
30# GPT with protective MBR entry in partition 1 (only)
31>>>>>>>>>450		ubyte		0xee
32>>>>>>>>>>466		ubyte		!0xee
33>>>>>>>>>>>482		ubyte		!0xee
34>>>>>>>>>>>>498		ubyte		!0xee
35#>>>>>>>>>>>>>446	use		gpt-mbr-partition
36>>>>>>>>>>>>>(454.l*8192)	string		EFI\ PART	GPT partition table
37>>>>>>>>>>>>>>0			use		gpt-mbr-type
38>>>>>>>>>>>>>>&-8		use		gpt-table
39>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
40>>>>>>>>>>>>>(454.l*8192)	string		!EFI\ PART
41>>>>>>>>>>>>>>(454.l*4096)	string		EFI\ PART	GPT partition table
42>>>>>>>>>>>>>>>0		use		gpt-mbr-type
43>>>>>>>>>>>>>>>&-8		use		gpt-table
44>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
45>>>>>>>>>>>>>>(454.l*4096)	string		!EFI\ PART
46>>>>>>>>>>>>>>>(454.l*2048)	string		EFI\ PART	GPT partition table
47>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
48>>>>>>>>>>>>>>>>&-8		use		gpt-table
49>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
50>>>>>>>>>>>>>>>(454.l*2048)	string		!EFI\ PART
51>>>>>>>>>>>>>>>>(454.l*1024)	string		EFI\ PART	GPT partition table
52>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
53>>>>>>>>>>>>>>>>>&-8		use		gpt-table
54>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
55>>>>>>>>>>>>>>>>(454.l*1024)	string		!EFI\ PART
56>>>>>>>>>>>>>>>>>(454.l*512)	string		EFI\ PART	GPT partition table
57>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
58>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
59>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
60# GPT with protective MBR entry in partition 2 (only)
61>>>>>>>>>450		ubyte		!0xee
62>>>>>>>>>>466		ubyte		0xee
63>>>>>>>>>>>482		ubyte		!0xee
64>>>>>>>>>>>>498		ubyte		!0xee
65#>>>>>>>>>>>>>462	use		gpt-mbr-partition
66>>>>>>>>>>>>>(470.l*8192)	string		EFI\ PART	GPT partition table
67>>>>>>>>>>>>>>0			use		gpt-mbr-type
68>>>>>>>>>>>>>>&-8		use		gpt-table
69>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
70>>>>>>>>>>>>>(470.l*8192)	string		!EFI\ PART
71>>>>>>>>>>>>>>(470.l*4096)	string		EFI\ PART	GPT partition table
72>>>>>>>>>>>>>>>0		use		gpt-mbr-type
73>>>>>>>>>>>>>>>&-8		use		gpt-table
74>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
75>>>>>>>>>>>>>>(470.l*4096)	string		!EFI\ PART
76>>>>>>>>>>>>>>>(470.l*2048)	string		EFI\ PART	GPT partition table
77>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
78>>>>>>>>>>>>>>>>&-8		use		gpt-table
79>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
80>>>>>>>>>>>>>>>(470.l*2048)	string		!EFI\ PART
81>>>>>>>>>>>>>>>>(470.l*1024)	string		EFI\ PART	GPT partition table
82>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
83>>>>>>>>>>>>>>>>>&-8		use		gpt-table
84>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
85>>>>>>>>>>>>>>>>(470.l*1024)	string		!EFI\ PART
86>>>>>>>>>>>>>>>>>(470.l*512)	string		EFI\ PART	GPT partition table
87>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
88>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
89>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
90# GPT with protective MBR entry in partition 3 (only)
91>>>>>>>>>450		ubyte		!0xee
92>>>>>>>>>>466		ubyte		!0xee
93>>>>>>>>>>>482		ubyte		0xee
94>>>>>>>>>>>>498		ubyte		!0xee
95#>>>>>>>>>>>>>478	use		gpt-mbr-partition
96>>>>>>>>>>>>>(486.l*8192)	string		EFI\ PART	GPT partition table
97>>>>>>>>>>>>>>0			use		gpt-mbr-type
98>>>>>>>>>>>>>>&-8		use		gpt-table
99>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
100>>>>>>>>>>>>>(486.l*8192)	string		!EFI\ PART
101>>>>>>>>>>>>>>(486.l*4096)	string		EFI\ PART	GPT partition table
102>>>>>>>>>>>>>>>0		use		gpt-mbr-type
103>>>>>>>>>>>>>>>&-8		use		gpt-table
104>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
105>>>>>>>>>>>>>>(486.l*4096)	string		!EFI\ PART
106>>>>>>>>>>>>>>>(486.l*2048)	string		EFI\ PART	GPT partition table
107>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
108>>>>>>>>>>>>>>>>&-8		use		gpt-table
109>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
110>>>>>>>>>>>>>>>(486.l*2048)	string		!EFI\ PART
111>>>>>>>>>>>>>>>>(486.l*1024)	string		EFI\ PART	GPT partition table
112>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
113>>>>>>>>>>>>>>>>>&-8		use		gpt-table
114>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
115>>>>>>>>>>>>>>>>(486.l*1024)	string		!EFI\ PART
116>>>>>>>>>>>>>>>>>(486.l*512)	string		EFI\ PART	GPT partition table
117>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
118>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
119>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
120# GPT with protective MBR entry in partition 4 (only)
121>>>>>>>>>450		ubyte		!0xee
122>>>>>>>>>>466		ubyte		!0xee
123>>>>>>>>>>>482		ubyte		!0xee
124>>>>>>>>>>>>498		ubyte		0xee
125#>>>>>>>>>>>>>494	use		gpt-mbr-partition
126>>>>>>>>>>>>>(502.l*8192)	string		EFI\ PART	GPT partition table
127>>>>>>>>>>>>>>0			use		gpt-mbr-type
128>>>>>>>>>>>>>>&-8		use		gpt-table
129>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
130>>>>>>>>>>>>>(502.l*8192)	string		!EFI\ PART
131>>>>>>>>>>>>>>(502.l*4096)	string		EFI\ PART	GPT partition table
132>>>>>>>>>>>>>>>0		use		gpt-mbr-type
133>>>>>>>>>>>>>>>&-8		use		gpt-table
134>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
135>>>>>>>>>>>>>>(502.l*4096)	string		!EFI\ PART
136>>>>>>>>>>>>>>>(502.l*2048)	string		EFI\ PART	GPT partition table
137>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
138>>>>>>>>>>>>>>>>&-8		use		gpt-table
139>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
140>>>>>>>>>>>>>>>(502.l*2048)	string		!EFI\ PART
141>>>>>>>>>>>>>>>>(502.l*1024)	string		EFI\ PART	GPT partition table
142>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
143>>>>>>>>>>>>>>>>>&-8		use		gpt-table
144>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
145>>>>>>>>>>>>>>>>(502.l*1024)	string		!EFI\ PART
146>>>>>>>>>>>>>>>>>(502.l*512)	string		EFI\ PART	GPT partition table
147>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
148>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
149>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
150
151# The following code does GPT detection and processing, including
152# sector size detection.
153# It has to be duplicated above because the top-level pattern
154# (i.e. not called using 'use') must print *something* for file
155# to count it as a match. Text only printed in named patterns is
156# not counted, and causes file to continue, and try and match
157# other patterns.
158#
159# Unfortunately, when assuming sector sizes >=16k, if the sector size
160# happens to be 512 instead, we may find confusing data after the GPT
161# table...  If the GPT table has less than 128 entries, this may even
162# happen for assumed sector sizes as small as 4k
163# This could be solved by checking for the presence of the backup GPT
164# header as well, but that makes the logic extremely complex
165##0		name		gpt-mbr-partition
166##>(8.l*8192)	string		EFI\ PART
167##>>(8.l*8192)	use		gpt-mbr-type
168##>>&-8		use		gpt-table
169##>>0		ubyte		x		of 8192 bytes
170##>(8.l*8192)	string		!EFI\ PART
171##>>(8.l*4096)	string		EFI\ PART	GPT partition table
172##>>>0		use		gpt-mbr-type
173##>>>&-8		use		gpt-table
174##>>>0		ubyte		x		of 4096 bytes
175##>>(8.l*4096)	string		!EFI\ PART
176##>>>(8.l*2048)	string		EFI\ PART	GPT partition table
177##>>>>0		use		gpt-mbr-type
178##>>>>&-8		use		gpt-table
179##>>>>0		ubyte		x		of 2048 bytes
180##>>>(8.l*2048)	string		!EFI\ PART
181##>>>>(8.l*1024)	string		EFI\ PART	GPT partition table
182##>>>>>0		use		gpt-mbr-type
183##>>>>>&-8	use		gpt-table
184##>>>>>0		ubyte		x		of 1024 bytes
185##>>>>(8.l*1024)	string		!EFI\ PART
186##>>>>>(8.l*512)	string		EFI\ PART	GPT partition table
187##>>>>>>0		use		gpt-mbr-type
188##>>>>>>&-8	use		gpt-table
189##>>>>>>0		ubyte		x		of 512 bytes
190
191# Print details of MBR type for a GPT-disk
192# Calling code ensures that there is only one 0xee partition.
1930		name		gpt-mbr-type
194# GPT with protective MBR entry in partition 1
195>450		ubyte		0xee
196>>454		ulelong		1
197>>>462		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
198>>454		ulelong		!1													\b (nonstandard: not at LBA 1)
199# GPT with protective MBR entry in partition 2
200>466		ubyte		0xee
201>>470		ulelong		1
202>>>478		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
203>>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0					\b (with hybrid MBR)
204>>>478		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
205>>470		ulelong		!1									\b (nonstandard: not at LBA 1)
206# GPT with protective MBR entry in partition 3
207>482		ubyte		0xee
208>>486		ulelong		1
209>>>494		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
210>>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
211>>>494		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0					\b (with hybrid MBR)
212>>486		ulelong		!1									\b (nonstandard: not at LBA 1)
213# GPT with protective MBR entry in partition 4
214>498		ubyte		0xee
215>>502		ulelong		1
216>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
217>>502		ulelong		!1													\b (nonstandard: not at LBA 1)
218
219# Print the information from a GPT partition table structure
2200		name		gpt-table
221>10		uleshort	x		\b, version %u
222>8		uleshort	x		\b.%u
223>56		ulelong		x		\b, GUID: %08x
224>60		uleshort	x		\b-%04x
225>62		uleshort	x		\b-%04x
226>64		ubeshort	x		\b-%04x
227>66		ubeshort	x		\b-%04x
228>68		ubelong		x		\b%08x
229#>80		uleshort	x		\b, %d partition entries
230>32		ulequad+1	x		\b, disk size: %lld sectors
231
232# In case a GPT data-structure is at LBA 0, report it as well
233# This covers systems which are not GPT-aware, and which show
234# and allow access to the protective partition. This code will
235# detect the contents of such a partition.
2360		string		EFI\ PART	GPT data structure (nonstandard: at LBA 0)
237>0		use		gpt-table
238>0		ubyte		x		(sector size unknown)
239
240
241