bootctl(1) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | GENERIC EFI FIRMWARE/BOOT LOADER COMMANDS | BOOT LOADER SPECIFICATION COMMANDS | BOOT LOADER INTERFACE COMMANDS | SYSTEMD-BOOT COMMANDS | KERNEL IMAGE COMMANDS | OPTIONS | SIGNED .EFI FILES | EXIT STATUS | ENVIRONMENT | EXAMPLES | SEE ALSO | NOTES | COLOPHON

BOOTCTL(1)                       bootctl                       BOOTCTL(1)

NAME         top

       bootctl - Control EFI firmware boot settings and manage boot
       loader

SYNOPSIS         top


       bootctl [OPTIONS...] {COMMAND}

DESCRIPTION         top

       bootctl can check the EFI firmware and boot loader status, list
       and manage available boot loaders and boot loader entries, and
       install, update, or remove the systemd-boot(7) boot loader on the
       current system.

GENERIC EFI FIRMWARE/BOOT LOADER COMMANDS         top

       These commands are available on any EFI system, regardless of the
       boot loader used.

       status
           Shows brief information about the system firmware, the boot
           loader that was used to boot the system, the boot loaders
           currently available in the ESP, the boot loaders listed in the
           firmware's list of boot loaders and the current default boot
           loader entry. If no command is specified, this is the implied
           default.

           See the example below for details of the output.

           Added in version 239.

       reboot-to-firmware [BOOL]
           Query or set the "Reboot-Into-Firmware-Setup" flag of the EFI
           firmware. Takes a boolean argument which controls whether to
           show the firmware setup on next system reboot. If the argument
           is omitted shows the current status of the flag, or whether
           the flag is supported. This controls the same flag as
           systemctl reboot --firmware-setup, but is more low-level and
           allows setting the flag independently from actually requesting
           a reboot.

           Hint: use systemctl reboot --firmware-setup to reboot into
           firmware setup once. See systemctl(1) for details.

           Added in version 251.

BOOT LOADER SPECIFICATION COMMANDS         top

       These commands are available for all boot loaders that implement
       the Boot Loader Specification[1], such as systemd-boot.

       list
           Shows all available boot loader entries implementing the Boot
           Loader Specification[1], as well as any other entries
           discovered or automatically generated by a boot loader
           implementing the Boot Loader Interface[2]. JSON output may be
           requested with --json=.

           See the example below for details of the output.

           Added in version 239.

       unlink ID
           Removes a boot loader entry including the files it refers to.
           Takes a single boot loader entry ID string or a glob pattern
           as argument. Referenced files such as kernel or initrd are
           only removed if no other entry refers to them.

           Added in version 253.

       cleanup
           Removes files from the ESP and XBOOTLDR partitions that belong
           to the entry token but are not referenced in any boot loader
           entries.

           Added in version 253.

BOOT LOADER INTERFACE COMMANDS         top

       These commands are available for all boot loaders that implement
       the Boot Loader Specification[1] and the Boot Loader Interface[2],
       such as systemd-boot.

       set-default ID, set-oneshot ID
           Sets the default boot loader entry. Takes a single boot loader
           entry ID string or a glob pattern as argument. The set-oneshot
           command will set the default entry only for the next boot, the
           set-default will set it persistently for all future boots.

           bootctl list can be used to list available boot loader entries
           and their IDs.

           In addition, the boot loader entry ID may be specified as one
           of: @default, @oneshot or @current, which correspond to the
           current default boot loader entry for all future boots, the
           current default boot loader entry for the next boot, and the
           currently booted boot loader entry. These special IDs are
           resolved to the current values of the EFI variables
           LoaderEntryDefault, LoaderEntryOneShot and
           LoaderEntrySelected, see Boot Loader Specification[1] for
           details. These special IDs are primarily useful as a quick way
           to persistently make the currently booted boot loader entry
           the default choice, or to upgrade the default boot loader
           entry for the next boot to the default boot loader entry for
           all future boots, but may be used for other operations too.

           If set to @saved the chosen entry will be saved as an EFI
           variable on every boot and automatically selected the next
           time the boot loader starts.

           When an empty string ("") is specified as the ID, then the
           corresponding EFI variable will be unset.

           Hint: use systemctl reboot --boot-loader-entry=ID to reboot
           into a specific boot entry and systemctl reboot
           --boot-loader-menu=timeout to reboot into the boot loader menu
           once. See systemctl(1) for details.

           Added in version 240.

       set-timeout TIMEOUT, set-timeout-oneshot TIMEOUT
           Sets the boot loader menu timeout in seconds. The
           set-timeout-oneshot command will set the timeout only for the
           next boot. See systemd.time(7) for details about the syntax of
           time spans.

           If this is set to menu-disabled or menu-hidden or 0, no menu
           is shown and the default entry will be booted immediately,
           while setting this to menu-force disables the timeout while
           always showing the menu. When an empty string ("") is
           specified the bootloader will revert to its default menu
           timeout.

           Added in version 250.

SYSTEMD-BOOT COMMANDS         top

       These commands manage the systemd-boot EFI boot loader, and do not
       work in conjunction with other boot loaders.

       install
           Installs systemd-boot into the EFI system partition. A copy of
           systemd-boot will be stored as the EFI default/fallback loader
           at ESP/EFI/BOOT/BOOT*.EFI. The boot loader is then added to
           the top of the firmware's boot loader list.

           Added in version 239.

       update
           Updates all installed versions of systemd-boot(7), if the
           available version is newer than the version installed in the
           EFI system partition. This also includes the EFI
           default/fallback loader at ESP/EFI/BOOT/BOOT*.EFI. The boot
           loader is then added to end of the firmware's boot loader list
           if missing.

           Added in version 239.

       remove
           Removes all installed versions of systemd-boot from the EFI
           system partition and the firmware's boot loader list.

           Added in version 239.

       is-installed
           Checks whether systemd-boot is installed in the ESP. Note that
           a single ESP might host multiple boot loaders; this hence
           checks whether systemd-boot is one (of possibly many)
           installed boot loaders — and neither whether it is the default
           nor whether it is registered in any EFI variables.

           Added in version 243.

       random-seed
           Generates a random seed and stores it in the EFI System
           Partition (ESP), for use by the systemd-boot boot loader. If a
           random seed already exists in the ESP it is refreshed. Also
           generates a random 'system token' and stores it persistently
           as an EFI variable, if one has not been set before. If the
           boot loader finds the random seed in the ESP and the system
           token in the EFI variable it will derive a random seed to pass
           to the OS and a new seed to store in the ESP from the
           combination of both. The random seed passed to the OS is
           credited to the kernel's entropy pool by the system manager
           during early boot, and permits userspace to boot up with an
           entropy pool fully initialized very early on. Also see
           systemd-boot-random-seed.service(8).

           See Random Seeds[3] for further information.

           Added in version 243.

KERNEL IMAGE COMMANDS         top

       kernel-identify kernel
           Takes a kernel image as argument. Checks what kind of kernel
           the image is. Returns one of "uki", "addon", "pe", and
           "unknown".

           Added in version 253.

       kernel-inspect kernel
           Takes a kernel image as argument. Prints details about the
           image.

           Added in version 253.

OPTIONS         top

       The following options are understood:

       --esp-path=
           Path to the EFI System Partition (ESP). If not specified,
           /efi/, /boot/, and /boot/efi/ are checked in turn. It is
           recommended to mount the ESP to /efi/, if possible.

       --boot-path=
           Path to the Extended Boot Loader partition, as defined in the
           Boot Loader Specification[1]. If not specified, /boot/ is
           checked. It is recommended to mount the Extended Boot Loader
           partition to /boot/, if possible.

       --root=root
           Takes a directory path as an argument. All paths will be
           prefixed with the given alternate root path, including config
           search paths.

           Added in version 252.

       --image=image
           Takes a path to a disk image file or block device node. If
           specified, all operations are applied to file system in the
           indicated disk image. This option is similar to --root=, but
           operates on file systems stored in disk images or block
           devices. The disk image should either contain just a file
           system or a set of file systems within a GPT partition table,
           following the Discoverable Partitions Specification[4]. For
           further information on supported disk images, see
           systemd-nspawn(1)'s switch of the same name.

           Added in version 252.

       --image-policy=policy
           Takes an image policy string as argument, as per
           systemd.image-policy(7). The policy is enforced when operating
           on the disk image specified via --image=, see above. If not
           specified, defaults to the "*" policy, i.e. all recognized
           file systems in the image are used.

       --install-source=
           When installing binaries with --root= or --image=, selects
           where to source them from. Takes one of "auto" (the default),
           "image" or "host". With "auto" binaries will be picked from
           the specified directory or image, and if not found they will
           be picked from the host. With "image" or "host" no fallback
           search will be performed if the binaries are not found in the
           selected source.

           Added in version 252.

       -p, --print-esp-path
           This option modifies the behaviour of status. Only prints the
           path to the EFI System Partition (ESP) to standard output and
           exits.

           Added in version 236.

       -x, --print-boot-path
           This option modifies the behaviour of status. Only prints the
           path to the Extended Boot Loader partition if it exists, and
           the path to the ESP otherwise to standard output and exit.
           This command is useful to determine where to place boot loader
           entries, as they are preferably placed in the Extended Boot
           Loader partition if it exists and in the ESP otherwise.

           Boot Loader Specification Type #1 entries should generally be
           placed in the directory "$(bootctl -x)/loader/entries/".
           Existence of that directory may also be used as indication
           that boot loader entry support is available on the system.
           Similarly, Boot Loader Specification Type #2 entries should be
           placed in the directory "$(bootctl -x)/EFI/Linux/".

           Note that this option (similarly to the --print-esp-path
           option mentioned above), is available independently from the
           boot loader used, i.e. also without systemd-boot being
           installed.

           Added in version 242.

       --print-loader-path
           This option modifies the behaviour of status: it shows the
           absolute path to the boot loader EFI binary used for the
           current boot if this information is available. Note that no
           attempt is made to verify whether the binary still exists.

           Added in version 257.

       --print-stub-path
           This option modifies the behaviour of status: it shows the
           absolute path to the UKI/stub EFI binary used for the current
           boot if this information is available. Note that no attempt is
           made to verify whether the binary still exists.

           Added in version 257.

       -R, --print-root-device
           Print the path to the block device node backing the root file
           system of the local OS. This prints a path such as
           /dev/nvme0n1p5. If the root file system is backed by
           dm-crypt/LUKS or dm-verity the underlying block device is
           returned. If the root file system is backed by multiple block
           devices (as supported by btrfs) the operation will fail. If
           the switch is specified twice (i.e.  -RR) and the discovered
           block device is a partition device the "whole" block device it
           belongs to is determined and printed (e.g.  /dev/nvme0n1). If
           the root file system is "tmpfs" (or a similar in-memory file
           system), the block device backing /usr/ is returned if
           applicable. If the root file system is a network file system
           (e.g. NFS, CIFS) the operation will fail.

           Added in version 254.

       --no-variables
           Do not touch the firmware's boot loader list stored in EFI
           variables.

           Added in version 220.

       --random-seed=yes|no
           By default, the install command initializes a random seed file
           in the ESP. When creating an image it may be desirable to
           disable that in order to avoid having the same seed in all
           instances.

           Added in version 257.

       --graceful
           Ignore failure when the EFI System Partition cannot be found,
           when EFI variables cannot be written, or a different or newer
           boot loader is already installed. Currently only applies to
           is-installed, update, and random-seed verbs.

           Added in version 244.

       -q, --quiet
           Suppress printing of the results of various commands and also
           the hints about ESP being unavailable.

           Added in version 251.

       --make-entry-directory=yes|no
           Controls creation and deletion of the Boot Loader
           Specification[1] Type #1 entry directory on the file system
           containing resources such as kernel and initrd images during
           install and remove, respectively. The directory is named after
           the entry token, as specified with --entry-token= parameter
           described below, and is placed immediately below the $BOOT
           root directory (i.e. beneath the file system returned by the
           --print-boot-path option, see above). Defaults to "no".

           Added in version 251.

       --entry-token=
           Controls how to name and identify boot loader entries for this
           OS installation. Accepted during install, and takes one of
           "auto", "machine-id", "os-id", "os-image-id" or an arbitrary
           string prefixed by "literal:" as argument.

           If set to machine-id the entries are named after the machine
           ID of the running system (e.g.
           "b0e793a9baf14b5fa13ecbe84ff637ac"). See machine-id(5) for
           details about the machine ID concept and file.

           If set to os-id the entries are named after the OS ID of the
           running system, i.e. the ID= field of os-release(5) (e.g.
           "fedora"). Similarly, if set to os-image-id the entries are
           named after the OS image ID of the running system, i.e. the
           IMAGE_ID= field of os-release (e.g.
           "vendorx-cashier-system").

           If set to auto (the default), the /etc/kernel/entry-token file
           will be read if it exists, and the stored value used.
           Otherwise, if the local machine ID is initialized it is used.
           Otherwise, IMAGE_ID= from os-release will be used, if set.
           Otherwise, ID= from os-release will be used, if set.

           Unless set to "machine-id", or when --make-entry-directory=yes
           is used the selected token string is written to a file
           /etc/kernel/entry-token, to ensure it will be used for future
           entries. This file is also read by kernel-install(8), in order
           to identify under which name to generate boot loader entries
           for newly installed kernels, or to determine the entry names
           for removing old ones.

           Using the machine ID for naming the entries is generally
           preferable, however there are cases where using the other
           identifiers is a good option. Specifically: if the
           identification data that the machine ID entails shall not be
           stored on the (unencrypted) $BOOT partition, or if the ID
           shall be generated on first boot and is not known when the
           entries are prepared. Note that using the machine ID has the
           benefit that multiple parallel installations of the same OS
           can coexist on the same medium, and they can update their boot
           loader entries independently. When using another identifier
           (such as the OS ID or the OS image ID), parallel installations
           of the same OS would try to use the same entry name. To
           support parallel installations, the installer must use a
           different entry token when adding a second installation.

           Added in version 251.

       --all-architectures
           Install binaries for all supported EFI architectures (this
           implies --no-variables).

           Added in version 252.

       --efi-boot-option-description=
           Description of the entry added to the firmware's boot option
           list. Defaults to "Linux Boot Manager".

           Using the default entry name "Linux Boot Manager" is generally
           preferable as only one bootloader installed to a single ESP
           partition should be used to boot any number of OS
           installations found on the various disks installed in the
           system. Specifically distributions should not use this flag to
           install a branded entry in the boot option list. However, in
           situations with multiple disks, each with their own ESP
           partition, it can be beneficial to make it easier to identify
           the bootloader being used in the firmware's boot option menu.

           Added in version 252.

       --dry-run
           Dry run for unlink and cleanup.

           In dry run mode, the unlink and cleanup operations only print
           the files that would get deleted without actually deleting
           them.

           Added in version 253.

       --secure-boot-auto-enroll=yes|no, --private-key=PATH/URI,
       --private-key-source=TYPE[:NAME], --certificate=PATH,
       --certificate-source=TYPE[:NAME]
           Configure the ESP for secure boot auto-enrollment when
           invoking the install command. Takes a boolean argument.
           Disabled by default. Enabling this option will make bootctl
           populate the ESP with signed "PK", "KEK" and "db" signature
           databases, each containing the given certificate in "DER"
           format as their only entry. These secure boot signature
           databases will be picked up and enrolled by systemd-boot if
           secure boot is in setup mode and secure boot auto-enrollment
           is enabled.

           When specifying this option, a certificate and private key
           have to be provided as well using the --certificate= and
           --private-key= options. The --certificate= option takes a path
           to a PEM encoded X.509 certificate or a URI that's passed to
           the OpenSSL provider configured with --certificate-source
           which takes one of "file" or "provider", with the latter being
           followed by a specific provider identifier, separated with a
           colon, e.g.  "provider:pkcs11". The --private-key= option can
           take a path or a URI that will be passed to the OpenSSL engine
           or provider, as specified by --private-key-source= as a
           "type:name" tuple, such as "engine:pkcs11". The specified
           OpenSSL signing engine or provider will be used to sign the
           EFI signature lists.

           Added in version 257.

       --no-pager
           Do not pipe output into a pager.

       --json=MODE
           Shows output formatted as JSON. Expects one of "short" (for
           the shortest possible output without any redundant whitespace
           or line breaks), "pretty" (for a pretty version of the same,
           with indentation and line breaks) or "off" (to turn off JSON
           output, the default).

       -h, --help
           Print a short help text and exit.

       --version
           Print a short version string and exit.

SIGNED .EFI FILES         top

       bootctl install and update will look for a systemd-boot file
       ending with the ".efi.signed" suffix first, and copy that instead
       of the normal ".efi" file. This allows distributions or end-users
       to provide signed images for UEFI SecureBoot.

EXIT STATUS         top

       On success, 0 is returned, a non-zero failure code otherwise.
       bootctl --print-root-device returns exit status 80 in case the
       root file system is not backed by single block device, and other
       non-zero exit statuses on other errors.

ENVIRONMENT         top

       If $SYSTEMD_RELAX_ESP_CHECKS=1 is set the validation checks for
       the ESP are relaxed, and the path specified with --esp-path= may
       refer to any kind of file system on any kind of partition.

       Similarly, $SYSTEMD_RELAX_XBOOTLDR_CHECKS=1 turns off some
       validation checks for the Extended Boot Loader partition.

EXAMPLES         top

       Example 1. Output from status and list

           $ bootctl status
           System:
                Firmware: UEFI 2.40 (firmware-version)  ← firmware vendor and version
             Secure Boot: disabled (setup)              ← Secure Boot status
            TPM2 Support: yes
            Boot into FW: supported                     ← does the firmware support booting into itself

           Current Boot Loader:                         ← details about sd-boot or another boot loader
                 Product: systemd-boot version            implementing the Boot Loader Interface[2]
                Features: ✓ Boot counting
                          ✓ Menu timeout control
                          ✓ One-shot menu timeout control
                          ✓ Default entry control
                          ✓ One-shot entry control
                          ✓ Support for XBOOTLDR partition
                          ✓ Support for passing random seed to OS
                          ✓ Load drop-in drivers
                          ✓ Boot loader sets ESP information
                          ✓ Menu can be disabled
                     ESP: /dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000
                    File: └─/EFI/systemd/systemd-bootx64.efi

           Random Seed:                                 ← random seed used for entropy in early boot
            Passed to OS: yes
            System Token: set
                  Exists: yes

           Available Boot Loaders on ESP:
                     ESP: /boot/efi (/dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000)
                    File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 251
                    File: └─/EFI/BOOT/BOOTX64.EFI (systemd-boot 251

           Boot Loaders Listed in EFI Variables:
                   Title: Linux Boot Manager
                      ID: 0x0001
                  Status: active, boot-order
               Partition: /dev/disk/by-partuuid/...
                    File: └─/EFI/systemd/systemd-bootx64.efi

                   Title: Fedora
                      ID: 0x0000
                  Status: active, boot-order
               Partition: /dev/disk/by-partuuid/...
                    File: └─/EFI/fedora/shimx64.efi

                   Title: Linux-Firmware-Updater
                      ID: 0x0002
                  Status: active, boot-order
               Partition: /dev/disk/by-partuuid/...
                    File: └─/EFI/fedora/fwupdx64.efi

           Boot Loader Entries:
                   $BOOT: /boot/efi (/dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000)

           Default Boot Loader Entry:
                    type: Boot Loader Specification Type #1 (.conf)
                   title: Fedora Linux 36 (Workstation Edition)
                      id: ...
                  source: /boot/efi/loader/entries/entry-token-kernel-version.conf
                 version: kernel-version
              machine-id: ...
                   linux: /entry-token/kernel-version/linux
                  initrd: /entry-token/kernel-version/initrd
                 options: root=...

           $ bootctl list
           Boot Loader Entries:
                    type: Boot Loader Specification Type #1 (.conf)
                   title: Fedora Linux 36 (Workstation Edition) (default) (selected)
                      id: ...
                  source: /boot/efi/loader/entries/entry-token-kernel-version.conf
                 version: kernel-version
              machine-id: ...
                   linux: /entry-token/kernel-version/linux
                  initrd: /entry-token/kernel-version/initrd
                 options: root=...

                    type: Boot Loader Specification Type #2 (.efi)
                   title: Fedora Linux 35 (Workstation Edition)
                      id: ...
                  source: /boot/efi/EFI/Linux/fedora-kernel-version.efi
                 version: kernel-version
              machine-id: ...
                   linux: /EFI/Linux/fedora-kernel-version.efi
                 options: root=...

                    type: Automatic
                   title: Reboot Into Firmware Interface
                      id: auto-reboot-to-firmware-setup
                  source: /sys/firmware/efi/efivars/LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f

       In the listing, "(default)" specifies the entry that will be used
       by default, and "(selected)" specifies the entry that was selected
       the last time (i.e. is currently running).

SEE ALSO         top

       systemd-boot(7), Boot Loader Specification[1], Boot Loader
       Interface[2], systemd-boot-random-seed.service(8)

NOTES         top

        1. Boot Loader Specification
           https://uapi-group.org/specifications/specs/boot_loader_specification

        2. Boot Loader Interface
           https://systemd.io/BOOT_LOADER_INTERFACE

        3. Random Seeds
           https://systemd.io/RANDOM_SEEDS

        4. Discoverable Partitions Specification
           https://uapi-group.org/specifications/specs/discoverable_partitions_specification

COLOPHON         top

       This page is part of the systemd (systemd system and service
       manager) project.  Information about the project can be found at
       ⟨http://www.freedesktop.org/wiki/Software/systemd⟩.  If you have a
       bug report for this manual page, see
       ⟨http://www.freedesktop.org/wiki/Software/systemd/#bugreports⟩.
       This page was obtained from the project's upstream Git repository
       ⟨https://github.com/systemd/systemd.git⟩ on 2025-02-02.  (At that
       time, the date of the most recent commit that was found in the
       repository was 2025-02-02.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there is
       a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

systemd 258~devel                                              BOOTCTL(1)

Pages that refer to this page: systemctl(1)systemd-sbsign(1)loader.conf(5)kernel-command-line(7)systemd-boot(7)systemd.directives(7)systemd.index(7)systemd-stub(7)systemd-boot-random-seed.service(8)systemd-pcrlock(8)systemd-random-seed.service(8)