README file for the second extended file system Release 0.4a 93/11/29 Remy Card (card@masi.ibp.fr) This file documents the latest release (0.4a) of the second extended file system. The second ext file system ========================== The 2nd ext file system is an extension of the ext file system to get more functionalities and better performances. The functionalities of this file system are : - file names from 1 to 255 characters (as in the ext fs but the directory structure has changed and the routines have been rewritten) - the maximum size of a file system is 4 TB (but the implementation currently restricts it to 2 GB - still enough I hope) - the maximum size of a file is 16 GB - separate atime/ctime/mtime are supported - dtime (deletion time) is supported to allow an undelete program (not written yet) to work - inode version is supported (may be used one day by a NFS server) - Access Control List for files (not supported yet) - blocks bigger than 1KB and fragments (not supported yet) - st_blocks/st_blksize support - blocks reserved for the super user (5% by default) - a directory cache used to speed up directory lookups - new free blocks/inodes management (the bitmaps are back) - 12 direct data blocks in the inode allowing more files to be coded without indirection - a valid flag avoiding checks when the fs is clean - super block and groups descriptors duplication in each group allowing a recovery even if critical data is damaged - fast symbolic links whose content is stored in the inode itself How to integrate the second ext file system ============================================ As of linux 0.99 pl7, the second extended file system has been included in the standard kernel distribution. Thus, there is no need to patch the kernel source to use it. Simply answer yes to the question "Second extended fs support" at the "make config" step when compiling the kernel. Using the second ext fs ======================= The second ext fs programs are : - mke2fs : creation of a second extended file system - e2fsck : check of a second extended fs - dirdump : dump of directories in a second extended file system - mklost+found : creates a lost+found directory if it has been removed - tune2fs : changes the parameters of the file system - chattr : changes files attributes - lsattr : lists files attributes Man pages are included with the programs. A second ext fs can be mounted by : mount -t ext2 /dev/hdXX /dir Second ext fs internals ======================= The second extended file system now uses bitmaps for free blocks/inodes management. A file system is divided in groups. Each group currently contains 8192 blocks (in the future, I will add an option to mke2fs allowing a different group size). Each group contains a bitmap block for blocks, a bitmap block for inodes, some blocks for a part of the inode table and some data blocks. The file system has the following structure : ------------------------------------------- |Boot | Group 0 | Group 1 | ... | Group N | |block| | | | | ------------------------------------------- Each group has the following structure : ---------------------------------------------------------- | Super | Groups | Blocks | Inodes | Inode | Data | | block | descriptors | bitmap | bitmap | table | blocks | ---------------------------------------------------------- Status of the second ext fs and its limitations =============================================== The known bugs or limitations of the second ext fs are : - there is no conversion program from the ext fs to the 2nd ext fs yet. I also have an old version of it (written by Wayne Davison) which has to be adapted (BTW, even if this conversion program worked, I would not release it until the 2nd ext fs is stable). Future plans for the 2nd ext fs =============================== I am still working on the 2nd ext fs to improve it : - implement Access Control List (other people have shown interest in that), - implement bigger blocks and fragments management, - write an undelete program (other people have shown interest in that), - fix bugs, - ... In case of bugs =============== If you find a bug in the 2nd ext fs, please send a mail to me to report it. Credits ======= Lots of people have helped me during my work on this file system. The 2nd ext fs is based on the ext fs which is itself based on the minix file system routines written by Linus Torvalds. Linus also gave me some very good advices and suggestions during the design and the implementation of this file system (and he also corrected bugs in some of my patches ...). Other people have influenced the design of this file system : - Roger Binns suggested the valid flag, - Werner Almesberger and Theodore Ts'o suggested ACL, - Werner Almesberger wanted an undelete feature, - William Davidsen and Theodore Ts'o made me understand that bitmaps are better than free lists to obtain good performances, - Adam Richter has enhanced mkefs (the changes have been adapted in mke2fs) to figure out the size of a file system, - Arnt Gulbrandsen suggested the dtime to be used in an undelete programs. I'd also like to thank the testers of the (old) ext fs. Their reports have helped me to improve it and to implement the second ext fs. And finally, all my thanks go to the co-developpers of the second extended file system : Wayne Davison has helped me so much during the design and the implementation of the 2nd ext fs and Stephen Tweedie has rewritten some important parts to make it much faster.