fsck: Allow to specify the fsck repair option in the cmdline

Some unattended systems do not have a console attached and entering
the default rescue mode will not be too helpful. Allow to specify
the "-y" option to attempt to fix all filesystem errors.

Manually verified by downloading an image.gz of e2fsprogs, using
losetup and running systemd-fsck on the loop device and varying
the fsck.repair=preen|yes|no option.
This commit is contained in:
Holger Hans Peter Freyther 2014-05-15 19:07:43 +02:00 committed by Lennart Poettering
parent e16cb2e4ef
commit f1f0198cb6
3 changed files with 40 additions and 1 deletions

View File

@ -192,6 +192,17 @@
</listitem>
</varlistentry>
<varlistentry>
<term><varname>fsck.repair=</varname></term>
<listitem>
<para>Parameter understood by
the file system checker
services. For details, see
<citerefentry><refentrytitle>systemd-fsck@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>quotacheck.mode=</varname></term>

View File

@ -98,6 +98,22 @@
skips any file system
checks.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>fsck.repair=</varname></term>
<listitem><para>One of
<literal>preen</literal>,
<literal>yes</literal>,
<literal>no</literal>. Controls the
mode of operation. The default is <literal>
preen</literal>, and will automatically repair
problems that can be safely fixed. <literal>yes
</literal> will answer yes to all questions by
fsck and <literal>no</literal> will answer no to
all questions.
</para></listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -4,6 +4,7 @@
This file is part of systemd.
Copyright 2010 Lennart Poettering
Copyright 2014 Holger Hans Peter Freyther
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
@ -42,6 +43,7 @@
static bool arg_skip = false;
static bool arg_force = false;
static bool arg_show_progress = false;
static const char *arg_repair = "-a";
static void start_target(const char *target) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
@ -85,6 +87,16 @@ static int parse_proc_cmdline_item(const char *key, const char *value) {
arg_skip = true;
else
log_warning("Invalid fsck.mode= parameter. Ignoring.");
} else if (streq(key, "fsck.repair") && value) {
if (streq(value, "preen"))
arg_repair = "-a";
else if (streq(value, "yes"))
arg_repair = "-y";
else if (streq(value, "no"))
arg_repair = "-n";
else
log_warning("Invalid fsck.repair= parameter. Ignoring.");
} else if (startswith(key, "fsck."))
log_warning("Invalid fsck parameter. Ignoring.");
#ifdef HAVE_SYSV_COMPAT
@ -303,7 +315,7 @@ int main(int argc, char *argv[]) {
}
cmdline[i++] = "/sbin/fsck";
cmdline[i++] = "-a";
cmdline[i++] = arg_repair;
cmdline[i++] = "-T";
cmdline[i++] = "-l";