fstab-generator: support for x-systemd.onfailure

Add support for the x-systemd.onfailure fstab option in fstab-generator.

This allows generated mount units to include the systemd OnFailure=
dependency specified through /etc/fstab.

x-systemd.onfailure= is handled by generalizing the existing
write_dependency() helper (already used for After=/Before=/Requires=/
Wants=) to take an optional unit-name suffix. When no suffix is given,
unit names are mangled without forcing a ".mount" suffix, since
OnFailure= targets are not necessarily mount units. write_on_failure()
is now a thin wrapper around write_dependency().

Example:

/dev/sda1 /data ext4 defaults,x-systemd.onfailure=emergency.target 0 2

generates:

OnFailure=emergency.target

This makes it possible to attach recovery targets or services to mount
failures directly from fstab configuration.

Add documentation and generator tests.
This commit is contained in:
nikhilnrr
2026-09-22 18:48:23 +02:00
committed by Luca Boccassi
parent 9d27286214
commit b7041b73cf
11 changed files with 96 additions and 5 deletions
@@ -0,0 +1 @@
../mnt-onfailuremulti.mount
@@ -0,0 +1,13 @@
# Automatically generated by systemd-fstab-generator
[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
OnFailure=foo.service
Before=local-fs.target
After=blockdev@dev-sdx18.target
[Mount]
What=/dev/sdx18
Where=/mnt/onfailure
Options=x-systemd.onfailure=foo.service
@@ -0,0 +1,13 @@
# Automatically generated by systemd-fstab-generator
[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
OnFailure=foo.service bar.service
Before=local-fs.target
After=blockdev@dev-sdx19.target
[Mount]
What=/dev/sdx19
Where=/mnt/onfailuremulti
Options=x-systemd.onfailure=foo.service,x-systemd.onfailure=bar.service
@@ -0,0 +1 @@
../mnt-onfailure.mount
@@ -0,0 +1 @@
../mnt-onfailuremulti.mount
@@ -0,0 +1,13 @@
# Automatically generated by systemd-fstab-generator
[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
OnFailure=foo.service
Before=local-fs.target
After=blockdev@dev-sdx18.target
[Mount]
What=/dev/sdx18
Where=/mnt/onfailure
Options=x-systemd.onfailure=foo.service
@@ -0,0 +1,13 @@
# Automatically generated by systemd-fstab-generator
[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
OnFailure=foo.service bar.service
Before=local-fs.target
After=blockdev@dev-sdx19.target
[Mount]
What=/dev/sdx19
Where=/mnt/onfailuremulti
Options=x-systemd.onfailure=foo.service,x-systemd.onfailure=bar.service
@@ -15,3 +15,5 @@
/dev/sdx15 /mnt/noauto auto noauto 0 0
/dev/sdx16 /mnt/nofail auto nofail 0 0
/dev/sdx17 /mnt/wantedby-automount auto x-systemd.wanted-by=foo.service,x-systemd.automount 0 0
/dev/sdx18 /mnt/onfailure auto x-systemd.onfailure=foo.service 0 0
/dev/sdx19 /mnt/onfailuremulti auto x-systemd.onfailure=foo.service,x-systemd.onfailure=bar.service 0 0