Designing the New Filesystem

The goal behind designing this filesystem was to achieve simplicity. When looking at some of the smaller Linux filesystems, novices can still spend a considerable amount of time trying to understand how they work. With the uxfs filesystem, small is key. Only the absolutely essential pieces of code are in place. It supports a hierchical namespace and the ability to create, read to, and write from files. Some operations, such as rename and creation of symlinks, have been left out intentionally both to reduce the amount of source code and to give the reader a number of exercises to follow.

Anyone who studies the filesystem in any amount of detail will notice a large number of holes despite the fact that the filesystem is fully functional. The layout of the filesystem is shown in Figure 14.1, and the major design points are detailed as follows:

  • The filesystem has only 512-byte blocks. This is defined by the UX_BSIZE constant in the ux_fs.h header file.
  • There is a fixed number of blocks in the filesystem. Apart from space for the superblock and inodes, there are 470 data blocks. This is defined by the UX_MAXBLOCKS constant.
  • There are only 32 inodes (UX_MAXFILES). Leaving inodes 0 and 1 aside (which are reserved), and using inode 2 for the root directory and inode 3 for the lost+found directory, there are 28 inodes for user files and directories.
  • The superblock is stored in block 0. It occupies a single block. Inside the superblock are arrays, one for inodes ...

Get UNIX Filesystems: Evolution, Design, and Implementation now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.