Union mount


In computer operating systems, union mounting is a way of combining multiple directories into one that appears to contain their combined contents. Union mounting is supported in Linux, BSD and several of its successors, and Plan 9, with similar but subtly different behavior.
As an example application of union mounting, consider the need to update the information contained on a CD-ROM or DVD. While a CD-ROM is not writable, one can overlay the CD's mount point with a writable directory in a union mount. Then, updating files in the union directory will cause them to end up in the writable directory, giving the illusion that the CD-ROM's contents have been updated.

Implementations

Plan 9

In the Plan 9 operating system from Bell Labs, union mounting is a central concept, replacing several older Unix conventions with union directories; for example, several directories containing executables, unioned together at a single directory, replace the variable for command lookup in the shell.
Plan 9 union semantics are greatly simplified compared to the implementations for POSIX-style operating systems: the union of two directories is simply the concatenation of their contents, so a directory listing of the union may display duplicate names. Also, no effort is made to recursively merge subdirectories, leading to an extremely simple implementation. Directories are unioned in a controllable order;, where is a union directory, denotes the file called in the first constituent directory that contains such a file.

Unix and BSD

Unix/POSIX implementations of unions have different requirements from the Plan 9 implementation due to constraints in the traditional Unix file system behavior, which greatly complicates their implementation and often leads to compromises. Problems that union mounting on Unix-like operating systems encounters include:
Early attempts to add unioning to Unix filesystems included the 3-d filesystem and the Translucent File Service in SunOS. An implementation of union mounting was added to the BSD version of Unix in version 4.4, taking inspiration from these earlier attempts, Plan 9 and the stackable file systems in Spring. 4.4BSD implements the stack-of-directories approach outlined above. As in Plan 9, operations traverse this stack top-down to resolve names, but unlike Plan 9, BSD union mounts are recursive, so that the contents of subdirectories appear merged in the union directory. Also unlike the Plan 9 version, all layers except the top are read-only: modifying files in the union causes their contents to first be copied into the top layer of the stack, where the modifications are then applied. Deletion of files is implemented by writing a special type of file called a whiteout to the top directory, which has the effect of marking the file name as non-existent and hiding files with the same name in the lower layers of the stack. Whiteouts require support from the underlying file system.

Linux

Union mounting was implemented for Linux 0.99 in 1993; this initial implementation was called the Inheriting File System, but was abandoned by its developer because of its complexity. The next major implementation was UnionFS, which grew out of the FiST project at Stony Brook University. An attempt to replace UnionFS, aufs, was released in 2006, followed in 2009 by OverlayFS. In 2014 OverlayFS union mount implementation was added to the standard Linux kernel source code.
Similarly, GlusterFS offers the ability to mount different filesystems distributed across a network, rather than being located on the same machine.