	This is the new version (1.09) of the second extended file system
management programs.

	See the file INSTALL for installation instructions.  This is
important!  Note that your /etc/fstab file may need modifying before
you install the new fsck program.  See the INSTALL file for more details.

	This version contains programs written by Theodore Ts'o and Remy Card.
This distribution was packaged by Ted and Remy with the help of Stephen Tweedie
and Alexy Vovenko.

	The programs written or rewritten by Ted are:
	- libext2fs: a new library containing entries to access the control
	  structures of a second extended file system.
	- e2fsck: a new file system checker which uses optimized routines.
	  This new checker is much more efficient and safer than the old
	  e2fsck.
	- mke2fs: a new file system creator which uses the ext2fs library.
	- debugfs: a file system debugger which can be used to examine and
	  change the state of a file system.  Use it with caution since it
	  can corrupt file systems if you are not careful.
	- fsck: a new fsck front-end.  This new fsck can run multiple
	  several file system checks simultanously if they are on different
	  disks.

	The programs written by Remy are:
	- badblocks: a new bad blocks checker.  It can be run by the super
	  user to search for bad blocks on a device and can also be called
	  by e2fsck and mke2fs.
	- dumpe2fs: a new program which displays the control structure of
	  a file system.  To understand the output of this program, one needs
	  to know the physical structure of a second extended file system.
	- mklost+found: re-creates a lost+found directory if it has been
	  deleted.
	- tune2fs: adjusts tunable paramaters on a file system.
	- chattr: changes files attributes and version.
	- lsattr: lists files attributes and version.

	Manual pages are included in this package.

	In case of bugs in these programs, please contact Ted
<tytso@mit.edu> and Remy <card@masi.ibp.fr>.  See the e2fsck man page
for suggestions of what sort of information to include when submitting
bug reports for e2fsck.
