# bootctl

## NAME



           bootctl - Control EFI firmware boot settings and manage boot
           loader
    


## SYNOPSIS



    
           **bootctl**[OPTIONS...] {COMMAND}
    


## DESCRIPTION



           **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



           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



           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



           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_ , **set-sysfail** _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. The
               **set-sysfail** command will set the boot loader entry to be used
               in case of a system failure. System failure (SysFail) boot
               entries can optionally modify the automatic selection order in
               the event of a failure, such as a boot firmware update failure
               with the failure status recorded in the EFI system table.
    
               **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_ , _LoaderEntrySysFail_ , _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



           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



           **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



           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, seesystemd-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.
    
           **--variables=yes|no**
               Controls whether to touch the firmware's boot loader list
               stored in EFI variables, and other EFI variables. If not
               specified defaults to no when execution in a container runtime
               is detected, yes otherwise.
    
               Added in version 258.
    
           **--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** , **random-seed** and **install** verbs. Since
               version v258, it is implicitly enabled when running inside a
               chroot.
    
               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



           **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



           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



           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



           **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).
    


## NOTES



            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
    


* * *