17.4 Creating the Ext2 Filesystem

There are generally two stages to creating a filesystem on a disk. The first step is to format it so that the disk driver can read and write blocks on it. Modern hard disks come preformatted from the factory and need not be reformatted; floppy disks may be formatted on Linux using the superformat utility program. The second step involves creating a filesystem, which means setting up the structures described in detail earlier in this chapter.

Ext2 filesystems are created by the mke2fs utility program; it assumes the following default options, which may be modified by the user with flags on the command line:

·         Block size: 1,024 bytes

·         Fragment size: block size (block fragmentation is not implemented)

·         Number of allocated inodes: one for each group of 4,096 bytes

·         Percentage of reserved blocks: 5 percent

The program performs the following actions:

1.       Initializes the superblock and the group descriptors.

2.       Optionally, checks whether the partition contains defective blocks; if so, it creates a list of defective blocks.

3.       For each block group, reserves all the disk blocks needed to store the superblock, the group descriptors, the inode table, and the two bitmaps.

4.       Initializes the inode bitmap and the data map bitmap of each block group to 0.

5.       Initializes the inode table of each block group.

6.       Creates the /root directory.

7.       Creates the lost+found directory, which is used by e2fsck to link the lost and found defective blocks.

8.       Updates the inode bitmap and the data block bitmap of the block group in which the two previous directories have been created.

9.       Groups the defective blocks (if any) in the lost+found directory.

Let's consider how an Ext2 1.4 MB floppy disk is initialized by mke2fs with the default options.

Once mounted, it appears to the VFS as a volume consisting of 1,390 blocks; each one is 1,024 bytes in length. To examine the disk's contents, we can execute the Unix command:

$ dd if=/dev/fd0 bs=1k count=1440 | od -tx1 -Ax > /tmp/dump_hex 

to get a file containing the hexadecimal dump of the floppy disk contents in the /tmp directory.[1]

[1] Some information on an Ext2 filesystem could also be obtained by using the dumpe2fs and debugfs utility programs.

By looking at that file, we can see that, due to the limited capacity of the disk, a single group descriptor is sufficient. We also notice that the number of reserved blocks is set to 72 (5 percent of 1,440) and, according to the default option, the inode table must include 1 inode for each 4,096 bytes — that is, 360 inodes stored in 45 blocks.

Table 17-7 summarizes how the Ext2 filesystem is created on a floppy disk when the default options are selected.

Table 17-7. Ext2 block allocation for a floppy disk

Block

Content

0

Boot block

1

Superblock

2

Block containing a single block group descriptor

3

Data block bitmap

4

Inode bitmap

5-49

Inode table: inodes up to 10: reserved; inode 11: lost+found; inodes 12-360: free

50

Root directory (includes ., .., and lost+found)

51

lost+found directory (includes . and ..)

52-62

Reserved blocks preallocated for lost+found directory

63-1439

Free blocks