README file for the ext file system Release 0a12 01.01.93 Remy Card (card@masi.ibp.fr) This file documents the ext file system for Linux and the programs needed to use this file system The ext file system =================== The ext file system is an extension of the minix file system to get rid of its restrictions. The ext file system allows : - varying length file names from 1 to 255 characters, - a maximum of 4 Giga blocks per file system, so the maximum size of a file system is 4 Tera bytes, - a maximum size of 16 Giga bytes per file, - a free blocks/inodes management with a linked list so no more disk space is "lost" for bitmaps. Limitations of the ext file system ================================== The ext file system is not yet finished and some modifications will be made in the future. The current restrictions are : - some functions in the code are not very well written, - the ext file system is only able to manage 1024 bytes blocks. Some people are working to allow the Linux buffer cache to manage bigger blocks. When it is done, the ext file system will support bigger blocks, - while the free blocks/inodes lists save space, the performances are worse than with a bitmap. Status of the ext file system ============================= Since release 0.96c, the ext file system has been integrated in Linux. So, there is nothing to modify in the kernel to use this file system. However, this file system is currently in alpha test and may contain some bugs. How to use the ext file system ============================== To use the ext file system, you have to get linux 0.96c or latter. You also need two programs to create a file system and check that it is consistent. These two programs can be obtained by anonymous FTP on ftp-masi.ibp.fr [132.227.64.26] in the file pub/linux/ALPHA/extfs/efsprogs11.tar.Z or on tsx-11.mit.edu in the file pub/linux/ALPHA/extfs/efsprogs11.tar.Z. This file contains the source and binary programs (compiled with GCC 2.2.2d and linked static) for mkefs (make ext file system) and efsck (ext file system check). You can also take the file efsprogs11.src.tar.Z which contains only the source programs or the file efsprogs11.bin.tar.Z which contains only the binary programs. You also need to get the new mount and df command from the latest rootimage. These two commands now use the Linux VFS layer and can be used with any file system integrated in Linux. Last, you must recompile every program using the readdir() function with a version of GCC greater than 2.1 (I suggest using GCC 2.2.2d which is the "official" C compiler for Linux). Some programs using readdir() are : the GNU fileutils, tar, the shells (bash, tcsh, zsh), ... Using an ext file system ======================== To create an ext file system, you must use the mkefs command. Its syntax is : mkefs [-c | -l filename] [-i bytes_per_inode] /dev/hdXX size_in_blocks The arguments for mkefs are : -c tests bad blocks on the file system, -l file reads the list of bad blocks from the file, -i bpi specifies the inode ratio. To mount an ext file system, you must use the new mount command. The syntax is : mount -t ext /dev/hdXX /dir You can also add a line to the file /etc/fstab if you want the ext file system to be mounted when the system is booted. The format of this line is : /dev/hdXX /dir ext defaults After mounting an ext file system, you can use it by the standard Linux commands (ls, rm, cp, mv, ...). You can unmount an ext file system by the command : umount /dev/hdXX You can check an ext file system by using the efsck command. Its syntax is : efsck [-larvsdtS] /dev/hdXX The arguments for efsck are : -l lists all the file names in the file system -a automaically repairs the file system (use with caution) -r interactively repairs the file system -v verbose execution -s lists the super block informations -d prints debugging output (not very useful except for me when I try to find bugs in efsck...) -t tests for bad blocks on the file system -S salvages the blocks/inodes free lists -b file reads the list of bad blocks from the file Important warnings: ------------------- 1/ efsck comes with NO WARRANTY !! I have written it by using the minix file system fsck program and it seems to work for me but it has not been extensively tested. I do not know is fsck is able to repair every kind of inconsistency. I suggest that you don't use the -a parameter. 2/ when efsck discovers problems in the free blocks/inodes linked lists, it salvages the lists, i.e. rebuilds them. If efsck rebuilds the lists, there may problems if the file system is mounted because a copy of the first free block number and first free inode number is kept in memory for mounted file systems. If the lists are salvaged, the first free block and first free inode can change and be different from the ones kept in memory. efsck tries to keep the same first free block/inode but it is not always possible. When one is changed, it now prints a warning message. Future work on the ext fs ========================= I am working to modify the ext file system to add functionalities or remove some of its limitations : - be sure that the efsck program is good and fix its bugs if any, - fix bugs reported by alpha-testers, - use bigger blocks as soon as the buffer cache will be able to manage them, and perhaps use different block sizes in the same file system (like fragments in BSD), - use bitmaps instead of linked lists to get better performances. The next release of the ext fs won't be compatible with the current one, i.e. a current file system won't be managed by the new code. However, the new ext fs will be able to coexist with the current one so transition will be easy. Moreover, a program will be available to convert a current ext fs to the new format. How to report bugs ================== If you encounters a strange behaviour of the ext file system or of the mkefs and efsck programs, feel free to report them to me (card@masi.ibp.fr) so that I can find the bugs and fix them. It is also a good idea to report them to the KERNEL channel of the mailing list and I will send the fixes to this list. Credits ======= The ext fs code originates in the Minix fs management written by Linus Torvalds. Linus also gave some very good advices during the design of the ext fs. I'd like to thank all alpha testers who report bugs or success. These reports help me to improve the ext fs. Last but not least, my acknowledgements go to Wayne Davison who makes a good work in mkefs, efsck and the future conversion program.