On Sun, Jan 29, 2012 at 04:22:22AM +0100, Lukas Fleischer wrote: > This one adds support for the "/fastboot" file, as well as the > "fastboot" kernel command line parameter. If either of them is > specified, file system checks are skipped. The only exception is the > existence of "/forcefsck" or the "forcefsck" kernel parameter which have > precedence over fastboot. > > Implements FS#26154. > > Reported-by: Mark <m...@voidzero.net> > Signed-off-by: Lukas Fleischer <archli...@cryptocrack.de> > --- > I ran into this today (wanted to skip file system checks for a couple of > reboots), discovered FS#26154 and decided to write a patch... > > A couple of things that I'd like to mention/ask: > > * I decided that forcefsck always has precedence over fastboot, even if > forcefsck was enabled by `shutdown -F` ("/forcefsck") and "fastboot" > was specified on the kernel command line. I'm not sure whether this is > the right thing to do here, but this is what systemd does and it seems > quite reasonable to me. Tom, let me know if there are any reasons to > do this differently (e.g. skip checks if "/forcefsck" exists and > "fastboot" is specified on the kernel command line). > > * I didn't implement the "fsck.mode" kernel parameter that Tom mentioned > in FS#26154 yet. I can implement this in a follow-up patch if you > want, though. Is "fsck.mode" intended to be an alternative for > "forcefsck" and "fastboot" or should we drop them in favor of that new > option? > > * The "sysinit_prefsck" and "sysinit_postfsck" hooks won't be run if > file system checks are skipped. Will that cause any problems?
This all sounds good to me. I had previously added 'skipfsck' to mkinitcpio, but it was never documented anywhere. I'll change this to 'fastboot'. > rc.sysinit | 27 +++++++++++++++------------ > tmpfiles.conf | 1 + > 2 files changed, 16 insertions(+), 12 deletions(-) > > diff --git a/rc.sysinit b/rc.sysinit > index b70ceaa..6661d0e 100755 > --- a/rc.sysinit > +++ b/rc.sysinit > @@ -175,19 +175,22 @@ fi > # Check filesystems > [[ -f /forcefsck ]] || in_array forcefsck $(< /proc/cmdline) && > FORCEFSCK="-- -f" > declare -r FORCEFSCK > -run_hook sysinit_prefsck > -if [[ -x $(type -P fsck) ]]; then > - stat_busy "Checking Filesystems" > - fsck_all >|"${FSCK_OUT:-/dev/stdout}" > 2>|"${FSCK_ERR:-/dev/stdout}" > - declare -r fsckret=$? > - (( fsckret <= 1 )) && stat_done || stat_fail > -else > - declare -r fsckret=0 > -fi > -run_hook sysinit_postfsck > > -# Single-user login and/or automatic reboot if needed > -fsck_reboot $fsckret > +if [[ -n $FORCEFSCK ]] || ([[ ! -f /fastboot ]] && ! in_array fastboot $(< > /proc/cmdline)); then command grouping here please, not a subshell. { [[ ! -f /fastboot ]] && ! in_array fastboot $(< /proc/cmdline); } > + run_hook sysinit_prefsck > + if [[ -x $(type -P fsck) ]]; then > + stat_busy "Checking Filesystems" > + fsck_all >|"${FSCK_OUT:-/dev/stdout}" > 2>|"${FSCK_ERR:-/dev/stdout}" > + declare -r fsckret=$? > + (( fsckret <= 1 )) && stat_done || stat_fail > + else > + declare -r fsckret=0 > + fi > + run_hook sysinit_postfsck > + > + # Single-user login and/or automatic reboot if needed > + fsck_reboot $fsckret > +fi > > status "Remounting Root" \ > mount -o remount / > diff --git a/tmpfiles.conf b/tmpfiles.conf > index 8668116..a63ca07 100644 > --- a/tmpfiles.conf > +++ b/tmpfiles.conf > @@ -17,4 +17,5 @@ r /tmp/.X[0-9]-lock > r /etc/nologin > r /etc/shutdownpid > r /forcefsck > +r /fastboot > > -- > 1.7.8.4 >