The Solaris UFS File System
- UFS Development History
- UFS On-Disk Format
- The UFS Inode
- Access Control in UFS
- Extended Attributes in UFS
- Locking in UFS
- Logging
- MDB Reference
The UFS file system is the general-purpose, disk-based file system that is shipped with Solaris today and has been the default file system since early versions of SunOS 4.x. For over 20 years, UFS has undergone extensive changes to keep pace with the performance, security, and reliability requirements of today's modern enterprise applications.
15.1 UFS Development History
The original version of UFS is derived from the Berkeley Fast File System (FFS) work from BSD UNIX, architected by Marshall Kirk McKusick and Bill Joy in the mid 1980s. The Berkeley FFS was the second major file system available for UNIX and was a leap forward from the original System V file system. The System V file system was lightweight and simple but had significant shortcomings: poor performance, unreliability, and lack of functionality.
During the development of Sun OS 2.0, a file-system-independent interface was introduced to support concurrent, different file systems within an operating system instance. This interface, today known as the vnode/vfs interface, is the mechanism that all file systems use to interface with the file-related system calls. (The vnode/vfs architecture is discussed further in Section 14.6.) UFS was modified so that it could be used within this new vnode/vfs framework and since has been the focus of much of the file system development effort in Solaris.
A second major overhaul for UFS came about at the time of SunOS 4.0, when the virtual memory (VM) system was redeveloped to use the vnode as the core of virtual memory operations. The new VM system implemented the concept of virtual file caching—a departure from the traditional physical file cache (known as the "buffer cache" in previous versions of UNIX). The old buffer cache was layered under the file systems and was responsible for caching physical blocks from the file system to the storage device. The new model is layered above the file systems and allows the VM system to act as a cache for files rather than blocks. The new system caches page-sized pieces of files, whereby the file and a particular offset are cached as pages of memory. From this point forward, the buffer cache was used only for file system metadata, and the VM system implemented the file system caching. The introduction of the virtual file caching affected file systems in many ways and required significant changes to the vnode interface. At that point, UFS was substantially modified to support the new vnode and VM interfaces.
The third major change to UFS came about in Solaris 2.4 in the year 1994 with the introduction of file system metadata logging in an effort to provide better reliability and faster reboot times after a system crash or outage. The first versions of logging were introduced with the unbundled Online: DiskSuite 3.0 software package, the precursor to Solstice DiskSuite (SDS) product and the Solaris Volume Manager (SVM) as it is known today. Solaris 7 saw the integration of logging into UFS, and after six years of development, Solaris 10 shipped with logging turned on by default. Table 15.1 summarizes the major UFS development milestones.
Table 15.1. UNIX File System Evolution
1984 |
SunOS 1.0 |
FFS from 4.2 BSD. |
1985 |
SunOS 2.0 |
UFS rearchitected to support vnodes/vfs. |
1988 |
SunOS 4.0 |
UFS integrated with new VM virtual file cache. |
1991 |
SunOS 4.1 |
I/O clustering added to allow extentlike performance. |
1992 |
SunOS 4.1 |
1TB file system and ability to grow UFS file systems with Online: Disk Suite 1.0. |
1992 |
Solaris 2.0 |
1TB file system support included in base Solaris. |
1994 |
Solaris 2.4 |
Metadata logging option with Online: DiskSuite 3.0. |
1995 |
Solaris 2.5 |
Access Control Lists. |
1995 |
Solaris 2.6 |
Large file support allows 1TB files. Direct I/O uncached access added. |
1998 |
Solaris 7 |
Metadata logging integrated into base Solaris UFS. |
2002 |
Solaris 9 |
File System Snapshots Extended Attributes |
2003 |
Solaris 9 Update 4 |
Multi-terabyte UFS support was added. |
2004 |
Solaris 10 and Solaris 9 Update 7 |
Logging on by default in UFS. |