[systemd-devel] [PATCH] fstab-generator: do not check btrfs and xfs
Andrey Borzenkov
arvidjaar at gmail.com
Sun Jun 29 09:08:44 PDT 2014
В Sat, 28 Jun 2014 19:49:07 +0200
Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> пишет:
> fsck.btrfs and fsck.xfs are documented to return immediately, so there is
> little sense in running them. Avoids some user confusion and a few lines
> in the logs.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1098799
This sounds far too specific for a generic tool. If I read this bug
report correctly, the primary complain was that systemd tries to
install fsck service even though fstab says skip fsck. This appears to
be the actual bug; I do not see how it can happen as fsck service
should be skipped for passno==0.
> ---
> man/systemd-fsck at .service.xml | 15 ++++++++-------
> src/fstab-generator/fstab-generator.c | 23 ++++++++++++++++++++++-
> 2 files changed, 30 insertions(+), 8 deletions(-)
>
> diff --git a/man/systemd-fsck at .service.xml b/man/systemd-fsck at .service.xml
> index ee66f3712d..1e9975f426 100644
> --- a/man/systemd-fsck at .service.xml
> +++ b/man/systemd-fsck at .service.xml
> @@ -69,14 +69,15 @@
> all other file systems and for the root file system in
> the initramfs.</para>
>
> - <para>Those services are started at boot if
> - <option>passno</option> in
> + <para>Those services are started at boot for the root
> + file system or when <option>passno</option> in
> <filename>/etc/fstab</filename> for the file system is
> - set to a value greater than zero. The file system
> - check for root is performed before the other file
> - systems. Other file systems may be checked in
> - parallel, except when they are one the same rotating
> - disk.</para>
> + set to a value greater than zero, except for file
> + system types like btrfs and xfs which are checked by
> + the kernel. The check for root is performed before the
> + other file systems. Other file systems may be checked
> + in parallel, except when they are one the same
> + rotating disk.</para>
>
> <para><filename>systemd-fsck</filename> does not know
> any details about specific filesystems, and simply
> diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
> index 1256a1ce53..4dad82d425 100644
> --- a/src/fstab-generator/fstab-generator.c
> +++ b/src/fstab-generator/fstab-generator.c
> @@ -165,6 +165,14 @@ static bool mount_in_initrd(struct mntent *me) {
> streq(me->mnt_dir, "/usr");
> }
>
> +static bool mount_skip_fsck(const char *fstype) {
> + static const char table[] =
> + "btrfs\0"
> + "xfs\0";
> +
> + return fstype && nulstr_contains(table, fstype);
> +}
> +
> static int add_mount(
> const char *what,
> const char *where,
> @@ -377,6 +385,7 @@ static int parse_fstab(bool initrd) {
> else {
> bool noauto, nofail, automount;
> const char *post;
> + int check;
>
> noauto = !!hasmntopt(me, "noauto");
> nofail = !!hasmntopt(me, "nofail");
> @@ -393,6 +402,13 @@ static int parse_fstab(bool initrd) {
> else
> post = SPECIAL_LOCAL_FS_TARGET;
>
> + check = me->mnt_passno;
> + if (check && mount_skip_fsck(me->mnt_type)) {
> + log_warning("No need to check %s, type %s. Ignoring fstab passno.",
> + what, me->mnt_type);
> + check = 0;
> + }
> +
> k = add_mount(what,
> where,
> me->mnt_type,
> @@ -415,6 +431,7 @@ static int parse_fstab(bool initrd) {
> static int add_root_mount(void) {
> _cleanup_free_ char *what = NULL;
> const char *opts;
> + int check;
>
> if (isempty(arg_root_what)) {
> log_debug("Could not find a root= entry on the kernel commandline.");
> @@ -436,12 +453,16 @@ static int add_root_mount(void) {
> else
> opts = arg_root_options;
>
> + check = mount_skip_fsck(arg_root_fstype);
> + if (!check)
> + log_debug("Skipping fsck for root.");
> +
> log_debug("Found entry what=%s where=/sysroot type=%s", what, strna(arg_root_fstype));
> return add_mount(what,
> "/sysroot",
> arg_root_fstype,
> opts,
> - 1,
> + check,
> false,
> false,
> false,
More information about the systemd-devel
mailing list