summaryrefslogtreecommitdiff
path: root/doc/usage/cmd/gpt.rst
blob: 13e8783be9b8c3cb3007f4d047a129cfc007f10c (plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
.. SPDX-License-Identifier: GPL-2.0+

.. index::
   single: gpt (command)

gpt command
===========

Synopsis
--------

::

    gpt enumerate <interface> <dev>
    gpt guid <interface> <dev> [<varname>]
    gpt read <interface> <dev> [<varname>]
    gpt rename <interface> <dev> <part> <name>
    gpt repair <interface> <dev>
    gpt set-bootable <interface> <dev> <partition list>
    gpt setenv <interface> <dev> <partition name>
    gpt swap <interface> <dev> <name1> <name2>
    gpt transpose <interface> <dev> <part1> <part2>
    gpt verify <interface> <dev> [<partition string>]
    gpt write <interface> <dev> <partition string>

Description
-----------

The gpt command lets users read, create, modify, or verify the GPT (GUID
Partition Table) partition layout.

Common arguments:

interface
    interface for accessing the block device (mmc, sata, scsi, usb, ....)

dev
    device number

partition string
    Describes the GPT partition layout for a disk.  The syntax is similar to
    the one used by the :doc:`mbr command <mbr>` command. The string contains
    one or more partition descriptors, each separated by a ";". Each descriptor
    contains one or more fields, with each field separated by a ",". Fields are
    either of the form "key=value" to set a specific value, or simple "flag" to
    set a boolean flag

    The first descriptor can optionally be used to describe parameters for the
    whole disk with the following fields:

    * uuid_disk=UUID - Set the UUID for the disk

    Partition descriptors can have the following fields:

    * name=<NAME> - The partition name, required
    * start=<BYTES> - The partition start offset in bytes, required
    * size=<BYTES> - The partition size in bytes or "-" for the last partition to expand it to the whole free area
    * bootable - Set the legacy bootable flag
    * uuid=<UUID> - The partition UUID, optional if CONFIG_RANDOM_UUID=y is enabled
    * type=<UUID> - The partition type GUID, requires CONFIG_PARTITION_TYPE_GUID=y


    If 'uuid' is not specified, but CONFIG_RANDOM_UUID is enabled, a random UUID
    will be generated for the partition

    If 'type' is not specified or without CONFIG_PARTITION_TYPE_GUID=y,
    the used partition type GUID is PARTITION_BASIC_DATA_GUID.

    Some strings can be also used at the place of the known partition type GUID:
	* "mbr" = LEGACY_MBR_PARTITION_GUID (024DEE41-33E7-11D3-9D69-0008C781F39F)
	* "msft" = PARTITION_MSFT_RESERVED_GUID (E3C9E316-0B5C-4DB8-817D-F92DF00215AE)
	* "data" = PARTITION_BASIC_DATA_GUID (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7)
	* "linux" = PARTITION_LINUX_FILE_SYSTEM_DATA_GUID (0FC63DAF-8483-4772-8E79-3D69D8477DE4)
	* "raid" = PARTITION_LINUX_RAID_GUID (A19D880F-05FC-4D3B-A006-743F0F84911E)
	* "swap" = PARTITION_LINUX_SWAP_GUID (0657FD6D-A4AB-43C4-84E5-0933C84B4F4F)
	* "lvm" = PARTITION_LINUX_LVM_GUID (E6D6D379-F507-44C2-A23C-238F2A3DF928)
	* "u-boot-env" = PARTITION_U_BOOT_ENVIRONMENT(3DE21764-95BD-54BD-A5C3-4ABE786F38A8)
	* "system" = PARTITION_SYSTEM_GUID (C12A7328-F81F-11D2-BA4B-00A0C93EC93B)

    The GPT partitions layout and associated 'type' are also printed with the
    :doc:`part command <part>` command by typing "part list".

gpt enumerate
~~~~~~~~~~~~~

Sets the variable 'gpt_partition_list' to be a list of all the partition names
on the device.

gpt guid
~~~~~~~~

Report the GUID of a disk. If 'varname' is specified, the command will set the
variable to the GUID, otherwise it will be printed out.

gpt read
~~~~~~~~

Prints the current state of the GPT partition table. If 'varname' is specified,
the variable will be filled with a partition string in the same format as a
'<partition string>', suitable for passing to other 'gpt' commands.  If the
argument is omitted, a human readable description is printed out.
CONFIG_CMD_GPT_RENAME=y is required.

gpt rename
~~~~~~~~~~

Renames all partitions named 'part' to be 'name'. CONFIG_CMD_GPT_RENAME=y is
required.

gpt repair
~~~~~~~~~~

Repairs the GPT partition tables if it they become corrupted.

gpt set-bootable
~~~~~~~~~~~~~~~~

Sets the bootable flag for all partitions in the table. If the partition name
is in 'partition list' (separated by ','), the bootable flag is set, otherwise
it is cleared. CONFIG_CMD_GPT_RENAME=y is required.

gpt setenv
~~~~~~~~~~

The 'gpt setenv' command will set a series of environment variables with
information about the partition named '<partition name>'. The variables are:

gpt_partition_addr
    the starting offset of the partition in blocks as a hexadecimal number

gpt_partition_size
    the size of the partition in blocks as a hexadecimal number

gpt_partition_name
    the name of the partition

gpt_partition_entry
    the partition number in the table, e.g. 1, 2, 3, etc.

gpt_partition_bootable
    1 if the partition is marked as bootable, 0 if not

gpt swap
~~~~~~~~

Changes the names of all partitions that are named 'name1' to be 'name2', and
all partitions named 'name2' to be 'name1'. CONFIG_CMD_GPT_RENAME=y is
required.

gpt transpose
~~~~~~~~~~~~~

Swaps the order of two partition table entries with indexes 'part1' and 'part2'
in the partition table, but otherwise leaves the actual partition data
untouched.

gpt verify
~~~~~~~~~~

Sets return value $? to 0 (true) if the partition layout on the
specified disk matches the one in the provided partition string, and 1 (false)
if it does not match. If no partition string is specified, the command will
check if the disk is partitioned or not.

gpt write
~~~~~~~~~

(Re)writes the partition table on the disk to match the provided
partition string. It returns 0 on success or 1 on failure.

Configuration
-------------

To use the 'gpt' command you must specify CONFIG_CMD_GPT=y. To enable 'gpt
read', 'gpt swap' and 'gpt rename', you must specify CONFIG_CMD_GPT_RENAME=y.

Examples
~~~~~~~~

Create 6 partitions on a disk::

    => setenv gpt_parts 'uuid_disk=bec9fc2a-86c1-483d-8a0e-0109732277d7;\
    name=boot,start=4M,size=128M,bootable,type=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7;\
    name=rootfs,size=3072M,type=0fc63daf-8483-4772-8e79-3d69d8477de4;\
    name=system-data,size=512M,type=0fc63daf-8483-4772-8e79-3d69d8477de4;\
    name=user,size=512M,type=0fc63daf-8483-4772-8e79-3d69d8477de4;\
    name=modules,size=100M,type=0fc63daf-8483-4772-8e79-3d69d8477de4;\
    name=ramdisk,size=8M,type=0fc63daf-8483-4772-8e79-3d69d8477de4;\
    name=[ext],size=-,type=0fc63daf-8483-4772-8e79-3d69d8477de4'
    => gpt write mmc 0 $gpt_parts

Last partition "[ext]" with '-' is extended up to the end of the disk

Verify that the device matches the partition layout described in the variable
$gpt_parts::

    => gpt verify mmc 0 $gpt_parts


Get the information about the partition named 'rootfs'::

    => gpt setenv mmc 0 rootfs
    => echo ${gpt_partition_addr}
    2000
    => echo ${gpt_partition_size}
    14a000
    => echo ${gpt_partition_name}
    rootfs
    => echo ${gpt_partition_entry}
    2
    => echo ${gpt_partition_bootable}
    0

Get the list of partition names on the disk::

    => gpt enumerate
    => echo ${gpt_partition_list}
    boot rootfs system-data [ext] user modules ramdisk

Get the GUID for a disk::

    => gpt guid mmc 0
    bec9fc2a-86c1-483d-8a0e-0109732277d7
    => gpt guid mmc gpt_disk_uuid
    => echo ${gpt_disk_uuid}
    bec9fc2a-86c1-483d-8a0e-0109732277d7

Set the bootable flag for the 'boot' partition and clear it for all others::

    => gpt set-bootable mmc 0 boot

Swap the order of the 'boot' and 'rootfs' partition table entries::

    => gpt setenv mmc 0 rootfs
    => echo ${gpt_partition_entry}
    2
    => gpt setenv mmc 0 boot
    => echo ${gpt_partition_entry}
    1

    => gpt transpose mmc 0 1 2

    => gpt setenv mmc 0 rootfs
    => echo ${gpt_partition_entry}
    1
    => gpt setenv mmc 0 boot
    => echo ${gpt_partition_entry}
    2

Other example: a disk with known partition types::

    => setenv gpt_parts 'name=u-boot,size=32M,type=data;\
    name=env,size=1M,type=u-boot-env;
    name=ESP,size=128M,type=system;
    name=rootfs,size=3072M,type=linux;
    name=swap,size=100M,type=swap;
    name=user,size=-,type=linux'
    => gpt write mmc 0 $gpt_parts

    => part list mmc 0
    Partition Map for mmc device 0  --   Partition Type: EFI
    Part	Start LBA	End LBA		Name
    	Attributes
    	Type GUID
    	Partition GUID
    1	0x00000022	0x00010021	"u-boot"
    	attrs:	0x0000000000000000
    	type:	ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
    		(data)
    	guid:	502d48f6-81c0-488f-bdc0-ad602498f3ce
      2	0x00010022	0x00010821	"env"
    	attrs:	0x0000000000000000
    	type:	3de21764-95bd-54bd-a5c3-4abe786f38a8
    		(u-boot-env)
    	guid:	9dc62338-459a-485e-bd8f-b3fbf728d9c0
      3	0x00010822	0x00050821	"ESP"
    	attrs:	0x0000000000000000
    	type:	c12a7328-f81f-11d2-ba4b-00a0c93ec93b
    		(EFI System Partition)
    	guid:	8a3a1168-6af8-4ba7-a95d-9cd0d14e1b3d
      4	0x00050822	0x00650821	"rootfs"
    	attrs:	0x0000000000000000
    	type:	0fc63daf-8483-4772-8e79-3d69d8477de4
    		(linux)
    	guid:	411ffebc-8a19-469d-99a9-0982409a6851
      5	0x00650822	0x00682821	"swap"
    	attrs:	0x0000000000000000
    	type:	0657fd6d-a4ab-43c4-84e5-0933c84b4f4f
    		(swap)
    	guid:	f8ec0410-95ec-4e3e-8b98-fb8cf271a201
      6	0x00682822	0x01dacbde	"user"
    	attrs:	0x0000000000000000
    	type:	0fc63daf-8483-4772-8e79-3d69d8477de4
    		(linux)
    	guid:	c5543e1c-566d-4502-99ad-20545007e673

Modifying GPT partition layout from U-Boot::

    => gpt read mmc 0 current_partitions
    => env edit current_partitions
        edit: uuid_disk=[...];name=part1,start=0x4000,size=0x4000,uuid=[...];
        name=part2,start=0xc000,size=0xc000,uuid=[...];[ . . . ]

    => gpt write mmc 0 $current_partitions
    => gpt verify mmc 0 $current_partitions