bootutils-0.1

* ALPHA RELEASE: Use at your own risk! *

* You MUST have 0.99pl10 or later kernel to make use of all of the
  facilities of this package.  If you can live without the unmount-root
  feature, then 0.99pl9 will work. *

This is the first release of a set of utilities designed to automate
the management and checking of filesystems at boot time and shutdown.
It supports automatic and safe 'fsck' of all filesystems (including
root) at boot time by booting with root readonly; if the fsck succeeds
then root is remounted read-write and booting can continue.

Why bother?

Well, many people like to have a safe and reliable check of all their
filesystems during boot.  This is especially true for ext2fs, because
all ext2fs filesystems have a special 'clean' flag which gets set when
the filesystem is cleaned (by e2fsck) or is unmounted cleanly, and
which gets unset when the filesystem is active.  e2fsck can sense this
flag, and will skip over filesystems which are clean.  

This means that e2fsck won't bother you with a laborious filesystem
check at each startup, as long as you always shut down cleanly; but it
will check your filesystems automatically if you ever have a crash,
because afterwards the filesystem 'clean' flags will not be set.  You
*can* still mount an unclean filesystem, but ext2fs will give you a
warning and will not mark it clean when it gets unmounted.

One of the problems with automatic fsck'ing is that it is unsafe to
check mounted, active filesystems.  The solution is to initially mount
only the root filesystem, and to mount it in readonly mode.  In this
situation, fsck can run safely on all filesystems, without the danger
that the kernel might start conflicting with the repairs being done to
the filesystem.

If any repairs were done, it is unsafe to proceed any further because
the kernel might have cached old information about the filesystems
which has been updated by fsck.  However, if the fsck succeeded, then
we can remount the root filesystem in read-write mode and proceed to
mount all of the other filesystems.

Finally, in order to ensure that filesystems are correctly tidied up
on shutdown, we need to unmount the root at shutdown.  This is usually
done automatically; the standard Linux shutdown programs do a 'umount
-a' command to unmount all mounted filesystems.  You MUST have a
0.99pl10 or later kernel for this to work.  Many versions of umount
explicitly do not try to unmount the root, since pre-99pl10 kernels
forbade this.  The umount included here will unmount even the root
filesystem.  (A special kernel trick in pl10 allows this to work by
keeping the filesystem alive in readonly mode after it has been tidied
up.)

The bootup operation of this package is invoked by the /etc/rc shell
script, an example of which is in mount/etc/rc.  It contains the
following important lines:

    # Check the integrity of all filesystems
    /bin/fsck -A -a
    # If there was a failure, drop into single-user mode.
    if [ $? -gt 1 ] ; then
	    echo fsck failed.  Please reboot.
	    sh
    fi

    # Remount the root filesystem in read-write mode
    /etc/mount -n -o remount /dev/hda3 /

    # remove /etc/mtab* so that mount will create it with a root entry
    /bin/rm -f /etc/mtab* /etc/nologin /etc/utmp

    # mount file systems in fstab (and create an entry for /)
    # but not NFS because TCP/IP is not yet configured
    /etc/mount -avt nonfs


This is the first attempt at a complete package for automated clean
fsck support, so you may well find that you would like a slightly
different behaviour.  Please feel free to send me comments, bug
reports and improvements!


This package includes three separate items, shamelessly adapted from
other, more or less standard Linux programs.

* rdev.c: a modified rdev which is extended to allow the
  readonly/readwrite status of the kernel image to be altered.  Use
	rdev -R <kernel> 1
  to make the kernel mount in readonly mode.  This can be overridden
  by the use of the 'read-only' or 'read-write' keywords of the most
  recent version of LILO.

* Mount/umount package: This was recently posted to the net, and
  implements the '-o remount' mount option which allows filesystems to
  be remounted.  Unlike the previous post, the version included here
  also attempts to unmount the root filesystem on 'umount -a'.  I have
  also tried to clean up the man-pages.

* fsck package: David Engel's fsck front-end.  Read the README for it.
  This package implements the 'fsck -A' command which will check all
  filesystems in /etc/fstab automatically.

Stephen Tweedie <sct@dcs.ed.ac.uk>
