fsck: no emergency.target on nofail mounts

Also describe failure behavior more precisely in the manpage.
Fixes #20237.
This commit is contained in:
Scott Lamb 2021-07-21 10:03:49 -07:00 committed by Zbigniew Jędrzejewski-Szmek
parent 899acf5c2d
commit 4b499063ac
3 changed files with 16 additions and 8 deletions

View file

@ -55,9 +55,18 @@
the filesystem should actually be checked based on the time since
last check, number of mounts, unclean unmount, etc.</para>
<para>If a file system check fails for a service without
<option>nofail</option>, emergency mode is activated, by isolating
to <filename>emergency.target</filename>.</para>
<para><filename>systemd-fsck-root.service</filename> will activate
<filename>reboot.target</filename> if <filename>/sbin/fsck</filename>
returns the "System should reboot" condition, or
<filename>emergency.target</filename> if <filename>/sbin/fsck</filename>
returns the "Filesystem errors left uncorrected" condition.</para>
<para><filename>systemd-fsck@.service</filename> will fail if
<filename>/sbin/fsck</filename> returns with either "System should reboot"
or "Filesystem errors left uncorrected" conditions. For filesystems
listed in <filename>/etc/fstab</filename> without <literal>nofail</literal>
or <literal>noauto</literal> options, <literal>local-fs.target</literal>
will then activate <filename>emergency.target</filename>.</para>
</refsect1>
<refsect1>

View file

@ -52,7 +52,7 @@ static void start_target(const char *target, const char *mode) {
return;
}
log_info("Running request %s/start/replace", target);
log_info("Running request %s/start/%s", target, mode);
/* Start these units only if we can replace base.target with it */
r = sd_bus_call_method(bus,
@ -412,10 +412,7 @@ static int run(int argc, char *argv[]) {
/* System should be rebooted. */
start_target(SPECIAL_REBOOT_TARGET, "replace-irreversibly");
return -EINVAL;
} else if (exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED))
/* Some other problem */
start_target(SPECIAL_EMERGENCY_TARGET, "replace");
else
} else if (!(exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED)))
log_warning("Ignoring error.");
}

View file

@ -14,6 +14,8 @@ DefaultDependencies=no
Conflicts=shutdown.target
Before=local-fs.target shutdown.target
ConditionPathIsReadWrite=!/
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
[Service]
Type=oneshot