chiark / gitweb /
fsck: Allow to specify the fsck repair option in the cmdline
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>
Thu, 15 May 2014 17:07:43 +0000 (19:07 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 16 May 2014 16:33:59 +0000 (18:33 +0200)
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.

man/kernel-command-line.xml
man/systemd-fsck@.service.xml
src/fsck/fsck.c

index dbfec612891a09e890db322bed192196d9331e50..a276b7141d292b9a152aa5263814de2c0f4ffeda 100644 (file)
                                 </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>
 
index c653dc59d4ba784e32d8acaf732ef846234ec065..afd8d9b5eaac13c00b17ebc49192c0a2a105eebe 100644 (file)
                                 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>
 
index 5ed837dffbeb58a545e926afba4485b2c6963bef..594f21e070ee90846984e1b954bc13529e887f1a 100644 (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";