

Re: problem using ext3 on root fs

OK, you're getting confused by a couple of things here.  

> During startup, my kernel emits the following lines:
> Kernel command line: auto BOOT_IMAGE=normal ro root=301 rootfstype=ext3 1
> <lines deleted>
> kjournald starting.  Commit interval 5 seconds
> EXT3-fs: mounted filesystem with ordered data mode.
> VFS: Mounted root (ext3 filesystem) readonly.

The root filesystem is definitely getting mounted as ext3, with the
root device as /dev/hda1 (major 3, minor 1).  This is a problem, you
apparently have /dev/discs/dist0/part1 listed your /etc/fstab file.
This is causing aliasing problems, but we'll talk about that in just a

> which seems to indicate that the fs is actually recognized as
> ext3. In my startup script, I later invoke e2fsck on the root fs
> before re-mounting it with r/w access. At this point, e2fsck tells
> me that the maximum mount count has been exceeded and checks the
> file system, which should not happen with journalling in effect.

Sorry, the maximum mount count checks still happen with
journalling/ext3.  What ext3 protects you against needing to run fsck
in case of an unclean shutdown.

The reason why ext2/3 filesystems have the capability of specifying
either a time interval or number of read/write mounts before e2fsck
will do a full check is simply a way ensuring against data loss in
case of data corruption caused by hardware failure.  Remember, PC
class hardware is sh*t.  In any case, if you don't want this, you can
configure the filesystem via tune2fs to not do the periodic e2fsck
tests.  To quote from the tune2fs man page:

       -c max-mount-counts
              Adjust the maximal mounts count between two  filesystem  checks.
              If max-mount-counts is 0 then the number of times the filesystem

              Staggering the mount-counts at which  filesystems  are  forcibly
              checked  will  avoid  all  filesystems being checked at one time
              when using journaled filesystems.

              You should  strongly  consider  the  consequences  of  disabling
              mount-count-dependent   checking  entirely.   Bad  disk  drives,
              cables, memory, and kernel bugs could all corrupt  a  filesystem
              without  marking  the  filesystem dirty or in error.  If you are
              using journaling on your filesystem, your filesystem will  never
              be marked dirty, so it will not normally be checked.  A filesys-
              tem error detected by the kernel will still force an fsck on the
              at that point.

              See also the -i option for time-dependent checking.

> The check does not detect any errors, and I remount the fs with
> r/w access, which produces the following lines:
> EXT3 FS 2.4-0.9.19, 19 August 2002 on ide0(3,1), internal journal

The reason why the kernel is reporting the maximal mount count even
after e2fsck is run because e2fsck is accessing the partition via the
LVM device, because your /etc/fstab file specified
/dev/discs/disc0/part1.  However, the kernel is accessing the
filesystem via IDE device /dev/hda1.  This is a really bad thing,
since it means that buffer cache can get out of sync.

> Then, after the system has been fully booted, I issue a 'mount' command and
> get:
> ~ $ mount
> /dev/discs/disc0/part1 on / type ext2 (rw)

This is because of what you have in /etc/fstab.  The "mount" command
gets its idea of what is mounted via the /etc/mtab file.  But the root
filesystem is mounted during the kernel boot process, before the init
scripts are run.  Also, the root filesystem is mounted read-only until
after e2fsck is run.  So after the root filesystem is checked, and
then remounted read-write, the init scripts initializes the /etc/mtab
file using data from the /etc/fstab file.  If the information in
/etc/fstab is not accurate (i.e., is not the same as the root
filesystem specified on the kernel command line when it was booted),
then the information in /etc/mtab isn't accurate, which means that
what the 'mount' command prints won't be accoruate.

> So, while all my non-root file systems are correctly recognized as
> ext3, the root fs appears to be mounte as ext2. The contents of
> /proc/mounts, however, look differently:
> ~ $ cat /proc/mounts
> rootfs / rootfs rw 0 0
> /dev/root / ext3 rw 0 0

Yeah, /proc/mounts doesn't get the root filesystem right.  It prints
the silly line about rootfs, and since it doesn't know what the name
used for the device of the root filesystem (all it knows is the
major/minor number), it prints /dev/root on the second line.

> Is anybody able to explain those apparent inconsistencies? I
> am using both devfs and LVM.

The problems are two-fold.  First of all, you should make sure the
/etc/fstab's idea of the root device matches what is used on the
kernel command line.  Secondly, the periodic maximum mount checks are
normal.  You can turn it off using tune2fs if you wish, if you're
willing to live with the potential consequences.  (Note: these issues
are present regardless of what filesystem you use; it just that some
filesystems are designed assuming that disk drives are perfect,
whereas ext2/3, given that it was born on PC hardware, has some design
choices and defaults which are a bit more paranoid about trusting the
underlying hardware.)

					- Ted
