TL;DR: Let’s automatically discover, mount and enable the root partition,
/var/tmp/ and the swap partitions based on
GUID Partition Tables (GPT)!
The GUID Partition Table (GPT) is mandatory on EFI systems. It allows identification of partition types with UUIDs. So far Linux has made little use of this, and mostly just defined one UUID for file system/data partitions and another one for swap partitions. With this specification, we introduce additional partition types to enable automatic discovery of partitions and their intended mountpoint. This has many benefits:
/etc/fstabfile and without the
root=kernel command line option.
Note that the OS side of this specification is currently implemented in systemd 211 and newer in the systemd-auto-gpt-generator(8) generator tool. Note that automatic discovery of the root only works if the boot loader communicates this information to the OS, by implementing the Boot Loader Interface.
|Partition Type UUID||Name||Allowed File Systems||Explanation|
||Root Partition (x86)||Any native, optionally in LUKS||On systems with matching architecture, the first partition with this type UUID on the disk containing the active EFI ESP is automatically mounted to the root directory /. If the partition is encrypted with LUKS or has dm-verity integrity data (see below), the device mapper file will be named
||Root Partition (x86-64)||ditto||ditto|
||Root Partition (32-bit ARM)||ditto||ditto|
||Root Partition (64-bit ARM/AArch64)||ditto||ditto|
||Root Partition (Itanium/IA-64)||ditto||ditto|
||Root Verity Partition (x86)||A dm-verity superblock followed by hash data||On systems with matching architecture, contains dm-verity integrity hash data for the matching root partition. If this feature is used the partition UUID of the root partition should be the first 128bit of the root hash of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the final 128bit of it, so that the root partition and its verity partition can be discovered easily, simply by specifying the root hash.|
||Root Verity Partition (x86-64)||ditto||ditto|
||Root Verity Partition (32-bit ARM)||ditto||ditto|
||Root Verity Partition (64-bit ARM/AArch64)||ditto||ditto|
||Root Verity Partition (Itanium/IA-64)||ditto||ditto|
||Home Partition||Any native, optionally in LUKS||The first partition with this type UUID on the disk containing the root partition is automatically mounted to
||Server Data Partition||Any native, optionally in LUKS||The first partition with this type UUID on the disk containing the root partition is automatically mounted to
||Variable Data Partition||Any native, optionally in LUKS||The first partition with this type UUID on the disk containing the root partition is automatically mounted to
||Temporary Data Partition||Any native, optionally in LUKS||The first partition with this type UUID on the disk containing the root partition is automatically mounted to
||Swap||Swap||All swap partitions on the disk containing the root partition are automatically enabled.|
||EFI System Partition||VFAT||The ESP used for the current boot is automatically mounted to
||Extended Boot Loader Partition||Typically VFAT||The Extended Boot Loader Partition (XBOOTLDR) used for the current boot is automatically mounted to /boot/, unless a different partition is mounted there (possibly via /etc/fstab) or the directory is non-empty on the root disk. This partition type is defined by the Boot Loader Specification.|
||Other Data Partitions||Any native, optionally in LUKS||No automatic mounting takes place for other Linux data partitions. This partition type should be used for all partitions that carry Linux file systems. The installer needs to mount them explicitly via entries in /etc/fstab. Optionally, these partitions may be encrypted with LUKS.|
Other GPT type IDs might be used on Linux, for example to mark software RAID or LVM partitions. The definitions of those GPT types is outside of the scope of this specification.
systemd-id128(1) may be used to list those UUIDs.
For partitions of the types listed above it is recommended to use human-friendly, descriptive partition names in the GPT partition table, for example “Home”, “Server Data”, “Fedora Root” and similar, possibly localized.
For the root, server data, home, variable data, temporary data and swap partitions, the partition flag bit 63 (“no-auto”) may be used to turn off auto-discovery for the specific partition. If set, the partition will not be automatically mounted or enabled.
For the root, server data, home, variable data and temporary data partitions, the partition flag bit 60 (“read-only”) may be used to mark a partition for read-only mounts only. If set, the partition will be mounted read-only instead of read-write. Note that the variable data partition and the temporary data partition will generally not be able to serve their purpose if marked read-only, since by their very definition they are supposed to be mutable. (The home and server data partitions are generally assumed to be mutable as well, but the requirement for them is not equally strong.) Because of that, while the read-only flag is defined and supported, it’s almost never a good idea to actually use it for these partitions.
Note that these two flag definitions happen to map nicely to the ones used by Microsoft Basic Data Partitions.
An installer that repartitions the hard disk should use the above UUID partition types for appropriate partitions it creates.
An installer which supports a “manual partitioning” interface may choose to
pre-populate the interface with swap,
of pre-existing Linux installations, identified with the GPT type UUIDs
above. The installer should not pre-populate such an interface with any
identified root or
/var/ partition unless the intention is to overwrite an
existing operating system that might be installed.
An installer may omit creating entries in
/etc/fstab for root,
/var/tmp and for the swap partitions if they use these UUID
partition types, and are the first partitions on the disk of each type. If the
ESP shall be mounted to
/boot/), it may additionally omit
creating the entry for it in
/etc/fstab. If an extended boot partition is
used, or if the EFI partition shall not be mounted to
/etc/fstab entries for them. If other partitions are used (for
/var/lib/mysql/), the installer must register these
root= parameter passed to the kernel by the boot loader
may be omitted if the root partition is the first one on the disk of its type.
If the root partition is not the first one on the disk, the
must be passed to the kernel by the boot loader. An installer that mounts a
/var/tmp/ file system with the partition
types defined as above which contains a LUKS header must call the device
mapper device “root”, “home”, “srv”, “var” or “tmp”, respectively. This is
necessary to ensure that the automatic discovery will never result in different
device mapper names than any static configuration by the installer, thus
eliminating possible naming conflicts and ambiguities.
An operating system should automatically discover and mount the first
root partition that does not have the no-auto flag set (as described above) by
scanning the disk containing the currently used EFI ESP. It should
automatically discover and mount the first
/var/tmp/ and swap partitions that do not have the no-auto flag set by
scanning the disk containing the discovered root partition. It should
automatically discover and mount the partition containing the currently used
EFI ESP to
/boot/ as fallback). It should automatically discover
and mount the partition containing the currently used Extended Boot Loader
/boot/. It should not discover or automatically mount
partitions with other UUID partition types, or partitions located on other
disks, or partitions with the no-auto flag set. User configuration shall
always override automatic discovery and mounting. If a root,
/boot/ or swap partition is
/etc/fstab or with
root= on the kernel command line, it must
take precedence over automatically discovered partitions. If a
/boot/ directory is found
to be populated already in the root partition, the automatic discovery must
not mount any discovered file system over it.
A container manager should automatically discover and mount the root,
/var/tmp/ partitions inside a container disk
image. It may choose to mount any discovered ESP and/or XBOOOTLDR partition to
/boot/. It should ignore any swap should they be included in a
container disk image.
If a btrfs file system is automatically discovered and mounted by the operating system/container manager it will be mounted with its default subvolume. The installer should make sure to set the default subvolume correctly using “btrfs subvolume set-default”.
If two Linux-based operating systems are installed on the same disk, the scheme
above suggests that they may share the swap,
ESP, XBOOTLDR. However, they should each have their own root and
We are not.
/etc/fstab always overrides automatic discovery and is indeed
mentioned in the specifications. We are simply trying to make the boot and
installation processes of Linux a bit more robust and self-descriptive.
The automatic discovery of the root partition is defined to operate on the disk containing the current EFI System Partition (ESP). Since EFI only exists on x86, x86-64, ia64, and ARM so far, we only defined root partition UUIDs for these architectures. Should EFI become more common on other architectures, we can define additional UUIDs for them.
This allows disk images that may be booted on multiple architectures to use discovery of the appropriate root partition on each architecture.
No, it doesn’t. The specification says that installers may not stop creating
/etc/fstab or stop including
root= on the kernel command line, unless the used
partitions are the first ones of their type on the disk. Additionally,
root= both override automatic discovery. Multi-boot is hence
well supported, since it doesn’t change anything for anything but the first
That all said, it’s not expected that generic installers generally stop setting
root= and creating
/etc/fstab anyway. The option to drop these configuration
bits is primarily something for appliance-like devices. However, generic
installers should still set the right GPT partition types for the partitions
they create so that container managers, partition tools and administrators can
benefit. Phrased differently, this specification introduces A) the
recommendation to use the newly defined partition types to tag things
properly and B) the option to then drop
/etc/fstab. While we
advertise A) to all installers, we only propose B) for simpler,
As of util-linux 2.25.2, the fdisk tool provides type codes to create the root, home, and swap partitions that the DPS expects, but the gdisk tool (version 0.8.10) and its variants do not support creation of a root file system with a matching type code. By default, fdisk will create an old-style MBR, not a GPT, so typing ‘l’ to list partition types will not show the choices that the root partition with the correct UUID. You must first create an empty GPT and then type ‘l’ in order for the DPS-compliant type codes to be available.