The Ext2 File System
- The initially developed file system was Minix which uses a partition of 64MB and the filenames of no more than 14 characters.
- After that, A file system called ext was developed which uses a partition size of 2GB and filenames of 255 characters but it was slow compared with Minix.
- Later the file system for Xia was developed with a partition size of 2GB and 248 characters in filename comparatively faster that Ext file system
- Finally, Ext2 file system was developed with a faster operation.
Structure of ext2 File system
The ext2 file system was influenced by the BSD Fast File System (BSD FFS). Thus a partition is divided into a number of block groups, corresponding to the cylinder groups in FFS, with each block group holding a copy of the superblock and inode blocks and data blocks. The objective for developing the block groups is that
- The data block should be close to the inodes
- File inodes close to their directory inodes
- Defined as the structure ext2_super_block.
- Contains control information on the file system, such as the number of inodes and blocks
- It is made upto a size of 1024 bytes
Block group descriptors
- It is following the superblock
- Provides information about the block groups. Each block group is described by a 32byte descriptor.
- Contains the block numbers in the inode bitmap, block bitmap and inode table, the number of free inodes and blocks and the number of directories in the block group.
- It lists consecutive blocks, inodes of 128bytes in size
- Also contains information about the entries of Access control List (ACL), time when the file was deleted, information specific to the Operating system in use.
Block Allocation in the Ext2 file system
- The main problem in all file systems is the fragmentation of files, ie. Scattering of files into small pieces as a result of the constant deleting and creating of new files. This problem is solved by the defragmentation of files.
- Target oriented allocation
- New data blocks are always searched for near a target block. If this block is free, it is allocated. Otherwise a free block is sought within 32 blocks of the target block and if found, is allocated.
- If this fails, the block allocation routine tries to find a free block which is atleast in the same block group as target block.