The original design of the UNIX file system proved to be too slow for many applications when used on the VAX. An earlier Berkeley implementation made some improvements but was still inefficient, using only about 4 percent of the potential speed of the disk drives. Further extensive changes made to the file system and implemented in the 4.2 Berkeley Software Distribution are described in this paper.
A gain in speed has been achieved by increasing the block size to a user-defined multiple of 4096 bytes. Wastage of disk space due to partially-used blocks is minimized by further breaking up each block into a user-specified number of smaller fragments. As a file grows, space is allocated in units of either fragments or blocks, depending upon the size of each write request. Extensive seek optimization is attempted when allocating a new block.
Further, the organization of information about each file, stored in a special block called an inode, has been modified to decrease the number of disk accesses made when multiple files are accessed in the same directory. The result is file access times up to ten times faster than the traditional implementation, approaching 30-50 percent of the potential device speed.
The paper also briefly describes other functional enhancements that were made. Filenames can now be of nearly abitrary length. Symbolic links have been added; each symbolic link is a directory entry that points to an arbitrary file that may be on any device, or on a remote machine. Access to files through symbolic links is transparent to user programs. A disk quota mechanism allows both long-term (soft) and short-term (hard) disk quotas. Finally, file-locking is available to programs that explicitly request it.