NAME¶
gpart —
control utility for the disk
partitioning GEOM class
SYNOPSIS¶
To add support for the disk partitioning GEOM class, place one or more of the
following lines in your kernel configuration file:
options
GEOM_PART_APM
options GEOM_PART_BSD
options GEOM_PART_EBR
options GEOM_PART_EBR_COMPAT
options GEOM_PART_GPT
options GEOM_PART_MBR
options GEOM_PART_PC98
options GEOM_PART_VTOC8
The
GEOM_PART_APM
option adds support for the Apple
Partition Map (APM) found on Apple Macintosh computers. The
GEOM_PART_BSD
option adds support for the traditional
BSD disklabel. The
GEOM_PART_EBR
option adds support for the Extended
Boot Record (EBR), which is used to define a logical partition. The
GEOM_PART_EBR_COMPAT
option enables backward
compatibility for partition names in the EBR scheme. Also it makes impossible
any types of actions with such partitions. The
GEOM_PART_GPT
option adds support for the GUID
Partition Table (GPT) found on Intel Itanium computers and Intel-based
Macintosh computers. The
GEOM_PART_MBR
option adds
support for the Master Boot Record (MBR) found on PCs and used on many
removable media. The
GEOM_PART_PC98
option adds
support for the MBR variant as used on NEC PC-98 computers. The
GEOM_PART_VTOC8
option adds support for Sun's SMI
VTOC8 label as found on computers based on SPARC64 and UltraSPARC.
Usage of the
gpart utility:
gpart |
add -t type
[-a
alignment]
[-b start]
[-s size]
[-i index]
[-l label]
[-f flags]
geom |
gpart |
bootcode [-b
bootcode]
[-p partcode
-i index]
[-f flags]
geom |
gpart |
create -s
scheme [-n
entries]
[-f flags]
provider |
gpart |
delete -i
index [-f
flags] geom |
gpart |
destroy [-F]
[-f flags]
geom |
gpart |
modify -i
index [-l
label] [-t
type] [-f
flags] geom |
gpart |
recover [-f
flags] geom |
gpart |
resize -i
index [-a
alignment]
[-s size]
[-f flags]
geom |
gpart |
restore
[-lF]
[-f flags]
provider
[...] |
gpart |
set -a attrib
-i index
[-f flags]
geom |
gpart |
show [-l |
-r]
[-p]
[geom ...] |
gpart |
unset -a
attrib -i
index [-f
flags] geom |
DESCRIPTION¶
The
gpart utility is used to partition GEOM providers,
normally disks. The first argument of which is the action to be taken:
- add
- Add a new partition to the partitioning scheme given by
geom. The partition begins on the logical block
address given by the -b start
option. Its size is given by the -s
size option. SI unit suffixes are allowed. One or
both -b and -s options can be omitted.
If so they are automatically calculated. The type of the partition is
given by the -t type option.
Partition types are discussed below in the section entitled
PARTITION TYPES.
Additional options include:
- -a
alignment
- If specified, then gpart utility
tries to align start offset and partition
size to be multiple of
alignment value.
- -i
index
- The index in the partition table at which the new
partition is to be placed. The index determines the name of the device
special file used to represent the partition.
- -l
label
- The label attached to the partition. This option is
only valid when used on partitioning schemes that support partition
labels.
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- backup
- Dump a partition table to standard output in special format
used by restore action.
- bootcode
- Embed bootstrap code into the partitioning scheme's
metadata on the geom (using -b
bootcode) or write bootstrap code into a partition
(using -p partcode and
-i index). Not all partitioning
schemes have embedded bootstrap code, so the -b
bootcode option is scheme-specific in nature (see
the section entitled BOOTSTRAPPING
below). The -b bootcode option
specifies a file that contains the bootstrap code. The contents and size
of the file are determined by the partitioning scheme. The
-p partcode option specifies a
file that contains the bootstrap code intended to be written to a
partition. The partition is specified by the -i
index option. The size of the file must be smaller
than the size of the partition.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- commit
- Commit any pending changes for geom
geom. All actions are being committed by default and
will not result in pending changes. Actions can be modified with the
-f flags option so that they are
not being committed by default. As such, they become pending. Pending
changes are reflected by the geom and the gpart utility,
but they are not actually written to disk. The commit
action will write any and all pending changes to disk.
- create
- Create a new partitioning scheme on a provider given by
provider. The -s
scheme option determines the scheme to use. The
kernel needs to have support for a particular scheme before that scheme
can be used to partition a disk.
Additional options include:
- -n
entries
- The number of entries in the partition table. Every
partitioning scheme has a minimum and a maximum number of entries and
this option allows tables to be created with the number of entries
that lies anywhere between the minimum and the maximum. Some schemes
have a maximum equal to the minimum and some schemes have a maximum
large enough to be considered unlimited. By default, partition tables
are created with the minimum number of entries.
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- delete
- Delete a partition from geom geom and
further identified by the -i index
option. The partition cannot be actively used by the kernel.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- destroy
- Destroy the partitioning scheme as implemented by geom
geom.
Additional options include:
- -F
- Forced destroying of the partition table even if it is
not empty.
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- modify
- Modify a partition from geom geom and
further identified by the -i index
option. Only the the type and/or label of the partition can be modified.
To change the type of a partition, specify the new type with the
-t type option. To change the
label of a partition, specify the new label with the -l
label option. Not all partitioning schemes support
labels and it is invalid to try to change a partition label in such cases.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- recover
- Recover corrupt partition's scheme metadata on the geom
geom. See the section entitled
RECOVERING below for the additional
information.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- resize
- Resize a partition from geom geom and
further identified by the -i index
option. New partition size is expressed in logical block numbers and can
be given by the -s size option. If
-s option is omitted then new size is automatically
calculated to maximum available from given geom
geom.
Additional options include:
- -a
alignment
- If specified, then gpart utility
tries to align partition size to be multiple of
alignment value.
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- restore
- Restore the partition table from backup previously created
by backup action and given from standard input. Only
partition table may be restored. This action does not affect content of
partitions. This mean that you should copy your data from backup after
restoring partition table and write bootcode again if it is needed.
Additional options include:
- -F
- Destroy partition table on the given
provider before doing restore.
- -l
- Restore partition labels for partitioning schemes that
support them.
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- set
- Set the named attribute on the partition entry. See the
section entitled ATTRIBUTES below for
a list of available attributes.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
- show
- Show the current partition information of the specified
geoms or all geoms if none are specified. Additional options include:
- -l
- For partition schemes that support partition labels
print them instead of partition type.
- -p
- Show provider names instead of partition indexes.
- -r
- Show raw partition type instead of symbolic name.
- undo
- Revert any pending changes for geom
geom. This action is the opposite of the
commit action and can be used to undo any changes that
have not been committed.
- unset
- Clear the named attribute on the partition entry. See the
section entitled ATTRIBUTES below for
a list of available attributes.
Additional options include:
- -f
flags
- Additional operational flags. See the section entitled
OPERATIONAL FLAGS below
for a discussion about its use.
PARTITION TYPES¶
Partition types are identified on disk by particular strings or magic values.
The
gpart utility uses symbolic names for common partition
types to avoid the user needing to know these values or other details of the
partitioning scheme in question. The
gpart utility also
allows the user to specify scheme-specific partition types for partition types
that do not have symbolic names. The symbolic names currently understood are:
- bios-boot
- The system partition dedicated to second stage of the boot
loader program. Usually it used by GRUB 2 loader when the partition table
is GPT. The scheme-specific type is
“
!21686148-6449-6E6F-744E-656564454649
”.
- efi
- The system partition for computers that use the Extensible
Firmware Interface (EFI). In such cases, the GPT partitioning scheme is
being used and the actual partition type for the system partition can also
be specified as
“
!c12a7328-f81f-11d2-ba4b-00a0c93ec93ab
”.
- freebsd
- A FreeBSD partition that uses the
BSD disklabel to sub-divide the partition into
file systems. This is a legacy partition type and should not be used for
the APM or GPT schemes. The scheme-specific types are
“
!165
” for MBR,
“!FreeBSD
” for APM, and
“!516e7cb4-6ecf-11d6-8ff8-00022d09712b
”
for GPT.
- freebsd-boot
- A FreeBSD partition dedicated to
bootstrap code. The scheme-specific type is
“
!83bd6b9d-7f41-11dc-be0b-001560b84f0f
”
for GPT.
- freebsd-swap
- A FreeBSD partition dedicated to
swap space. The scheme-specific types are
“
!FreeBSD-swap
” for APM,
“!516e7cb5-6ecf-11d6-8ff8-00022d09712b
”
for GPT, and tag 0x0901 for VTOC8.
- freebsd-ufs
- A FreeBSD partition that contains a
UFS or UFS2 file system. The scheme-specific types are
“
!FreeBSD-UFS
” for APM,
“!516e7cb6-6ecf-11d6-8ff8-00022d09712b
”
for GPT, and tag 0x0902 for VTOC8.
- freebsd-vinum
- A FreeBSD partition that contains a
Vinum volume. The scheme-specific types are
“
!FreeBSD-Vinum
” for APM,
“!516e7cb8-6ecf-11d6-8ff8-00022d09712b
”
for GPT, and tag 0x0903 for VTOC8.
- freebsd-zfs
- A FreeBSD partition that contains a
ZFS volume. The scheme-specific types are
“
!FreeBSD-ZFS
” for APM,
“!516e7cba-6ecf-11d6-8ff8-00022d09712b
”
for GPT, and 0x0904 for VTOC8.
- mbr
- A partition that is sub-partitioned by a master boot record
(MBR). This type is known as
“
!024dee41-33e7-11d3-9d69-0008c781f39f
”
by GPT.
ATTRIBUTES¶
The scheme-specific attributes for EBR:
- active
-
The scheme-specific attributes for GPT:
- bootme
- When set, the gptboot stage 1 boot loader
will try to boot the system from this partition. Multiple partitions might
be marked with the bootme attribute. In such scenario
the gptboot will try all bootme
partitions one by one, until the next boot stage is successfully
entered.
- bootonce
- Setting this attribute automatically sets the
bootme attribute. When set, the
gptboot stage 1 boot loader will try to boot the system
from this partition only once. Partitions with both
bootonce and bootme attributes are
tried before partitions with only the bootme attribute.
Before bootonce partition is tried, the
gptboot removes the bootme attribute
and tries to execute the next boot stage. If it fails, the
bootonce attribute that is now alone is replaced with
the bootfailed attribute. If the execution of the next
boot stage succeeds, but the system is not fully booted, the
gptboot will look for bootonce
attributes alone (without the bootme attribute) on the
next system boot and will replace those with the
bootfailed attribute. If the system is fully booted, the
/etc/rc.d/gptboot start-up script will look for
partition with the bootonce attribute alone, will remove
the attribute and log that the system was successfully booted from this
partition. There should be at most one bootonce
partition when system is successfully booted. Multiple partitions might be
marked with the bootonce and bootme
attribute pairs.
- bootfailed
- This attribute should not be manually managed. It is
managed by the gptboot stage 1 boot loader and the
/etc/rc.d/gptboot start-up script. This attribute is
used to mark partitions that had the bootonce attribute
set, but we failed to boot from them. Once we successfully boot, the
/etc/rc.d/gptboot script will log all the partitions we
failed to boot from and will remove the bootfailed
attributes.
The scheme-specific attributes for MBR:
- active
-
The scheme-specific attributes for PC98:
- active
-
- bootable
-
BOOTSTRAPPING¶
FreeBSD supports several partitioning schemes and each
scheme uses different bootstrap code. The bootstrap code is located in the
specific disk area for each partitioning scheme and also it might have
different size.
The bootstrap code could be separated into two types. The first one is embedded
in the partitioning scheme's metadata, the second type is located on the
specific partition. The embedding bootstrap code should be done only with the
gpart bootcode command with
-b
bootcode option. The GEOM PART class has knowlege on how
to embed bootstrap code into specific partitioning scheme metadata without
damage.
The Master Boot Record (MBR) uses 512-bytes bootstrap code image, embedded into
partition table's metadata area. There are two variants of this bootstrap
code:
/boot/mbr and
/boot/boot0. The first
one searches partition with
active attribute (see the
ATTRIBUTES section) in the partition
table. Then it runs next bootstrap stage. The
/boot/boot0
image contains a boot manager with some additional interactive functions.
The BSD disklabel is usually created on top of the MBR partition (slice) with
type
freebsd (see the
PARTITION TYPES section). It uses 8
KB size bootstrap code image
/boot/boot, embedded into
partition table's metadata area.
Both types of bootstrap code are used to boot from the GUID Partition Table.
First of all, a protective MBR is embedded into first disk sector from the
/boot/pmbr image. It searches the
freebsd-boot partition (see the
PARTITION TYPES section) in the GPT
and runs next bootstrap stage from it. The
freebsd-boot
partition should be smaller than 545 KB. There are two variants of bootstrap
code to write to this partition:
/boot/gptboot and
/boot/gptzfsboot. The first one is used to boot from UFS. It
searches in the GPT partition with type
freebsd-ufs, and it
runs the third bootstrap stage (
/boot/loader) if it is
found. The
/boot/gptzfsboot is used to boot from ZFS. It
searches partition with type
freebsd-zfs and starts
/boot/zfsloader from it.
The VTOC8 scheme does not support embedding bootstrap code. Instead, the 8
KBytes bootstrap code image
/boot/boot1 should be written
with
gpart bootcode command with
-p
bootcode option to all sufficiently large VTOC8
partitions. To do this the
-i index
option could be ommited.
The APM scheme also does not support embedding bootstrap code. Instead, the 800
KBytes bootstrap code image
/boot/boot1.hfs should be
written with
gpart bootcode command to a partition of type
freebsd-boot, which should also be 800 KB in size.
OPERATIONAL FLAGS¶
Actions other than the
commit and
undo
actions take an optional
-f flags
option. This option is used to specify action-specific operational flags. By
default, the
gpart utility defines the
‘
C
’ flag so that the action is immediately
committed. The user can specify “
-f
x” to have the action result in a pending change that
can later, with other pending changes, be committed as a single compound
change with the
commit action or reverted with the
undo action.
RECOVERING¶
The GEOM PART class supports recovering of partition tables only for GPT. The
GUID partition table has a primary and secondary (backup) copy of metadata for
redundance, these are stored at the begining and the end of the device
respectively. As a result of having two copies, it is acceptable to have some
corruption within the metadata that is not fatal to the working of GPT. When
the kernel detects corrupt metadata it marks this table as corrupt and reports
the corruption. Any operations on corrupt tables are prohibited except for
destroy and
recover.
If the first sector of a provider is corrupt, the kernel can not detect GPT even
if partition table itself is not corrupt. You can rewrite the protective MBR
using the
dd(1) command, to restore the ability to detect
the GPT. The copy of the protective MBR is usually located in the
/boot/pmbr file.
If one GPT header appears to be corrupt but the other copy remains intact, the
kernel will log the following:
GEOM: provider: the primary GPT table is corrupt or invalid.
GEOM: provider: using the secondary instead -- recovery strongly advised.
or
GEOM: provider: the secondary GPT table is corrupt or invalid.
GEOM: provider: using the primary only -- recovery suggested.
Also
gpart commands such as
show,
status and
list will report about corrupt
tables.
If the size of the device has changed (e.g. volume expansion) the secondary GPT
header will no longer be located in the last sector. This is not a metadata
corruption, but it is dangerous because any corruption of the primary GPT will
lead to loss of partition table. This problem is reported by the kernel with
the message:
GEOM: provider: the secondary GPT header is not in the last LBA.
This situation can be recovered with the
recover command. This
command reconstructs the corrupt metadata using known valid metadata and
relocates the secondary GPT to the end of the device.
NOTE: The GEOM PART class can detect the same partition table
visible through different GEOM providers, and some of them will be marked as
corrupt. Be careful when choosing a provider for recovery. If you choose
incorrectly you can destroy the metadata of another GEOM class, e.g. GEOM
MIRROR or GEOM LABEL.
SYSCTL VARIABLES¶
The following
sysctl(8) variables can be used to control the
behavior of the
PART GEOM class. The default value is shown
next to each variable.
- kern.geom.part.check_integrity:
1
- This variable controls the behaviour of metadata integrity
checks. When integrity checks are enabled, the PART GEOM
class verifies all generic partition parameters obtained from the disk
metadata. If some inconsistency is detected, the partition table will be
rejected with a diagnostic message: GEOM_PART: Integrity
check failed (provider, scheme).
EXIT STATUS¶
Exit status is 0 on success, and 1 if the command fails.
EXAMPLES¶
Create GPT scheme on
ad0:
/sbin/gpart create -s GPT ad0
Embed GPT bootstrap code into protective MBR:
/sbin/gpart bootcode -b /boot/pmbr ad0
Create a dedicated
freebsd-boot partition that can boot
FreeBSD from a
freebsd-ufs
partition, and install bootstrap code into it. This partition must be larger
than
/boot/gptboot, or the GPT boot you are planning to
write, but smaller than 545 KB. A size of 15 blocks (7680 bytes) would be
sufficient for booting from UFS but let's use 128 blocks (64 KB) here in this
example, in order to reserve some space for potential future need (e.g. from a
ZFS partition).
/sbin/gpart add -b 34 -s 128 -t freebsd-boot ad0
/sbin/gpart bootcode -p /boot/gptboot -i 1 ad0
Create a 512MB-sized
freebsd-ufs partition that would contain
UFS where the system boots from:
/sbin/gpart add -b 162 -s 1048576 -t freebsd-ufs ad0
Create MBR scheme on
ada0, then create 30GB-sized
FreeBSD slice, mark it active and install
boot0 boot manager:
/sbin/gpart create -s MBR ada0
/sbin/gpart add -t freebsd -s 30G ada0
/sbin/gpart set -a active -i 1 ada0
/sbin/gpart bootcode -b /boot/boot0 ada0
Now create
BSD scheme (
BSD
label) with ability to have up to 20 partitions:
/sbin/gpart create -s BSD -n 20 ada0s1
Create 1GB-sized UFS partition and 4GB-sized swap partition:
/sbin/gpart add -t freebsd-ufs -s 1G ada0s1
/sbin/gpart add -t freebsd-swap -s 4G ada0s1
Install bootstrap code for the
BSD label:
/sbin/gpart bootcode -b /boot/boot ada0s1
Create VTOC8 scheme on
da0:
/sbin/gpart create -s VTOC8 da0
Create a 512MB-sized
freebsd-ufs partition that would contain
UFS where the system boots from:
/sbin/gpart add -s 512M -t freebsd-ufs da0
Create a 15GB-sized
freebsd-ufs partition that would contain
UFS and aligned on 4KB boundaries:
/sbin/gpart add -s 15G -t freebsd-ufs -a 4k da0
After having created all required partitions, embed bootstrap code into them:
/sbin/gpart bootcode -p /boot/boot1 da0
Create backup of partition table from
da0:
/sbin/gpart backup da0 > da0.backup
Restore partition table from backup to
da0:
/sbin/gpart restore -l da0 < /mnt/da0.backup
Clone partition table from
ada0 to
ada1 and
ada2:
/sbin/gpart backup ada0 | /sbin/gpart restore -F ada1 ada2
SEE ALSO¶
dd(1),
geom(4),
boot0cfg(8),
geom(8)
HISTORY¶
The
gpart utility appeared in
FreeBSD
7.0.
AUTHORS¶
Marcel Moolenaar
⟨marcel@FreeBSD.org⟩