Storage layout

Storage layout

Storage layout in Ubuntu Core 20 has been designed to support its recovery modes and uses the following partitions:

  • ubuntu-seed (role: system-seed; read-only, ext4 or typically vfat)
    Contains the configuration for the first-stage/recovery boot loader and at least one recovery system. This is a set of snaps (base, kernel, gadget and application snaps, see Snaps in Ubuntu Core for more details), together with a model assertion and snap assertions that define the device and for which the device can be recovered or reinstalled .
  • ubuntu-boot (role: system-boot; read-only, ext4 or vfat): contains the second-stage/run bootloader and unpacked kernel(s) to boot and with.
  • ubuntu-save (role: system-save; writable, ext4): stores device identity backup data and data to facilitate recovery or re-install. This partition is mandatory on encrypted systems where it should have a minimum size of approximately 20+MB to handle volume and file system creation.
  • ubuntu-data (role: system-data; writable, ext4): stores user and system data. This partition is often minimally sized in the image but extended during device initialisation to use all the space available.

Additional partitions may be required by the device/board specific bootloader.

On UEFI systems, ubuntu-seed is intended to be the EFI System Partition (ESP) with its specific GUID and must be vfat formatted.

Whether ubuntu-seed or ubuntu-boot are vfat or ext4 formatted depends on the capabilities and requirement of the specific bootloader. Some bootloaders might support ext4 but not robustly. With grub on UEFI systems, for example, ubuntu-seed will be vfat-formatted while ubuntu-boot can be ext4-formatted.

The definitive layout of the generated image used to install Ubuntu Core, and the resultant storage on the device, is described by the gadget snap and its associated gadget.yaml.

A device image for an Ubuntu Core 20 device must only contain bootloader-specific partitions and ubuntu-seed, such that a recovery system in it can be booted into install mode. Installation will create and size the other missing partitions.

ubuntu-seed layout

When the image is created, the recovery systems partition is populated with any required bootloader-specific binaries and assets extracted from the gadget.

In all cases, ubuntu-seed will contain the following directories:

  • One or more systems/<system-label> recovery system directories

    The <system-label> for these directories is usually date-based, e.g. 20201210, and each fully describes a recovery system, comprising:

    • a model file containing the model assertion for the recovery system
    • an assertions directory that includes all the other assertions needed by the system
    • a kernel image, or other bootloader-specific information to help find the appropriate kernel

    The model and all the assertions together determine which snaps and revisions compose the system and they can be used to verify and cross-reference them.

  • A snaps directory which operates as a pool of snaps shared across all recovery systems. The assertions in a recovery system will define and reference which of these will be used by the system.

See Installation process for more details on how an installation proceeds.