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 requirements different 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:- Duplicate file names within a directory are not acceptable, since this would break applications' expectations of how a Unix file system works. Putting a logical, stack-like precedence ordering on the union's constituents partially solves this problem, but requires memory to record which files need to be skipped over during a directory listing.
- Deletion requires special support: if files with the same name exist in several of the union directory's constituents, simply deleting it from one of the constituents causes a file from one of the others to reappear in its stead.
- Insertion of a directory into the stack can cause incoherency in the kernel's file name cache.
- Renaming a file within a single mounted file system should be an atomic operation, but renaming within a union mount can require changes to multiple of the union's constituent directories. A possible solution is to disallow in such situations and require implementations to copy-and-delete instead.
- Stable inode numbers for files, hard links and memory-mapped I/O are hard to implement correctly.
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.
MergerFS, originally released in 2014, is an actively developed open-source FUSE plugin, allowing pooling of arbitrary directories.