fsck-root: only run when requested in fstab

fsck-root is redundant in case an initrd is used, or in case the rootfs
is never remounted 'rw', so the new default is the correct behavior for
most users. For the rest, they should enable it in fstab.
This commit is contained in:
Tom Gundersen 2013-10-19 11:38:42 +02:00
parent d09ee17da2
commit a7623afb7a
3 changed files with 25 additions and 11 deletions

View File

@ -4447,7 +4447,6 @@ SYSINIT_TARGET_WANTS += \
systemd-update-utmp.service
LOCAL_FS_TARGET_WANTS += \
systemd-remount-fs.service \
systemd-fsck-root.service \
tmp.mount
MULTI_USER_TARGET_WANTS += \
getty.target \

View File

@ -63,7 +63,9 @@
check. <filename>systemd-fsck-root.service</filename> is
responsible for file system checks on the root
file system. The root file system check is performed
before the other file systems.</para>
before the other file systems. Either service is enabled
at boot if passno in <filename>/etc/fstab</filename> for
the filesystem is set to a value greater than zero.</para>
<para><filename>systemd-fsck</filename> will
forward file system checking progress to the

View File

@ -210,17 +210,29 @@ static int add_mount(
post);
if (passno > 0) {
_cleanup_free_ char *fsck = NULL;
if (streq(where, "/")) {
lnk = strjoin(arg_dest, "/", SPECIAL_LOCAL_FS_TARGET, ".wants/", "systemd-fsck-root.service", NULL);
if (!lnk)
return log_oom();
fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
if (!fsck)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink("systemd-fsck-root.service", lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
return -errno;
}
} else {
_cleanup_free_ char *fsck = NULL;
fprintf(f,
"Requires=%s\n"
"After=%s\n",
fsck,
fsck);
fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
if (!fsck)
return log_oom();
fprintf(f,
"Requires=%s\n"
"After=%s\n",
fsck,
fsck);
}
}
@ -248,6 +260,7 @@ static int add_mount(
if (!noauto) {
if (post) {
free(lnk);
lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
if (!lnk)
return log_oom();