diff --git a/Makefile.am b/Makefile.am index ca01179e82..a29a32a5d2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml index 17bd1c027b..811392b19a 100644 --- a/man/systemd-fsck@.service.xml +++ b/man/systemd-fsck@.service.xml @@ -63,7 +63,9 @@ check. systemd-fsck-root.service is responsible for file system checks on the root file system. The root file system check is performed - before the other file systems. + before the other file systems. Either service is enabled + at boot if passno in /etc/fstab for + the filesystem is set to a value greater than zero. systemd-fsck will forward file system checking progress to the diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 77247dee5e..78d7609c6c 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -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();