[systemd-devel] Mount options for ESP, LUKS and rootfs in automatic partition discovery and mounting

Bastien Traverse neitsab at esrevart.net
Sat Nov 28 00:26:37 UTC 2020

Hello everyone,

Is it possible to specify mount options for ESP, root and LUKS devices 
when using automatic partition discovery and mounting with no fstab?

I got a new Arch Linux installation to boot without fstab, crypttab or 
specifying the `root/luks.uuid` kernel options, however the 
`luks.options=discard` and `rootflags=noatime` aren't honored. I have 
read man systemd-cryptsetup-generator, systemd-fstab-generator and 
systemd-remount-fs and can't seem to find the answer so as to why those 
settings aren't passed down.

My setup is as follow:

+----------------------------+ +---------------------------+
|                            | |                           |
| EFI System Partition (ESP) | | LUKS encrypted partition  |
|                            | |                           |
| /dev/nvme0n1p1             | | /dev/nvme0n1p2            |
| FAT32                      | | XFS                       |
|                            | |                           |
| mounted on /efi            | | mounted on /              |
|                            | |                           |
+----------------------------+ +---------------------------+

* partitioning was done using Partition Type GUIDs following the 
Discoverable Partition Specification:

# sgdisk --zap-all --clear /dev/nvme0n1 \
   --new=1:0:+488M --typecode=1:ef00 --change-name=1:"EFI System 
Partition" \
   --new=2:0:0   --typecode=2:8304 --change-name=2:"Linux LUKS"
# fdisk -l /dev/nvme0n1
Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    1001471    999424   488M EFI System
/dev/nvme0n1p2 1001472 1000215182 999213711 476.5G Linux root (x86-64)

* initramfs uses systemd with the following mkinitcpio hooks:

$ grep systemd /etc/mkinitcpio.conf
HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block 
sd-encrypt filesystems fsck)

* systemd-boot is used to load a unified EFI kernel image made with:

objcopy \
     --add-section .osrel="/usr/lib/os-release" --change-section-vma 
.osrel=0x20000 \
     --add-section .cmdline="cmdline.txt" --change-section-vma 
.cmdline=0x30000 \
     --add-section .splash="/usr/share/systemd/bootctl/splash-arch.bmp" 
--change-section-vma .splash=0x40000 \
     --add-section .linux="vmlinuz-linux" --change-section-vma 
.linux=0x2000000 \
     --add-section .initrd="ucode-initrd.img" --change-section-vma 
.initrd=0x3000000 \

$ cat cmdline.txt
luks.options=discard rootflags=noatime

$ bootctl list
Boot Loader Entries:
         title: Arch Linux (default)
            id: linux.efi
        source: /efi/EFI/Linux/linux.efi
         linux: EFI/Linux/linux.efi
       options: luks.options=discard rootflags=noatime

Logs show the correct command line:

journalctl -b | grep noatime
nov. 27 21:32:16 archlinux kernel: Command line: luks.options=discard 

However once booted:

$ findmnt /
TARGET                                SOURCE           FSTYPE     OPTIONS
/                                     /dev/mapper/root xfs 

# dmsetup table
root: 0 999180943 crypt aes-xts-plain64 
:64:logon:cryptsetup:LUKS-U-U-I-D-xx 0 259:2 32768

I have tried specifying the LUKS header UUID as in 
`luks.option=UUID=discard`, using different wording like discards, 
allow-discards, allow_discards... and using the `rw` option but to no avail.

For LUKS I know I can set the desired flags using `cryptsetup refresh` 
and make them permanent with the `--persistent` option, but I would like 
to know whether it is possible using just systemd and kernel options. As 
for rootflags, I am even more at a loss so as to why it isn't honored.

It is likely to be something I don't understand in how systemd works in 
early boot or maybe it is simply not possible, but from the doc it looks 
like it should. Could someone shed some light on this issue?

Bonus question: is setting mount options for the ESP doable via the same 
means, otherwise than manualy editing efi.mount?

Thanks and regards,

More information about the systemd-devel mailing list