Versioning file system
From Wikipedia, the free encyclopedia
A versioning file system is any computer file system which allows a computer file to exist in several versions at the same time. Thus it is a form of revision control. Most common versioning file systems keep a number of old copies of the file. Some limit the number of changes per minute or per hour to avoid storing large numbers of trivial changes. Others instead take periodic snapshots whose contents can be accessed with similar semantics to normal file access.
Contents |
[edit] Similar technologies
[edit] Backup
A versioning file system is similar to a periodic backup, with several key differences.
- Backups are normally triggered on a timed basis, while versioning occurs when the file changes.
- Backups are usually system-wide or partition-wide, while versioning occurs independently on a file-by-file basis.
- Backups are normally written to separate media, while versioning file systems write to the same hard drive (and normally the same folder, directory, or local partition).
[edit] Revision control system
Versioning file systems provide some of the features of revision control systems. However, unlike most revision control systems, they are transparent.
[edit] Journaling file system
Versioning file systems should not be confused with journaling file systems.
[edit] Implementations
[edit] ITS
An early implementation of versioning, possibly the first, was in MIT's ITS. In ITS, a filename consisted of two six-character parts; if the second part was numeric (consisted only of digits), it was treated as a version number. When specifying a file to open for read or write, one could supply a second part of ">"; when reading, this meant to open the highest-numbered version of the file; when writing, it meant to increment the highest existing version number and create the new version for writing.
Another early implementation of versioning was in TENEX, which became TOPS-20.[1]
[edit] Files-11 (OpenVMS)
A powerful example of a file versioning system is built into the OpenVMS operating system from Digital Equipment Corporation. In essence, whenever an application opens a file for writing, the file system automatically creates a new instance of the file, with a version number appended to the name. Version numbers start at 1 and count upward as new instances of a file are created. When an application opens a file for reading, it can either specify the exact file name including version number, or just the file name without the version number, in which case the most recent instance of the file is opened. The "purge" DCL/CCL command can be used at any time to manage the number of versions in a specific directory. By default, all but the highest numbered versions of all files in the current directory will be deleted; this behavior can be overridden with the /keep=n switch and/or by specifying directory path(s) and/or filename patterns. VMS systems are often scripted to purge user directories on a regular schedule; this is sometimes misconstrued by end-users as a property of the versioning system.
[edit] Novell NetWare
File servers based on the Novell NetWare stored the older versions of files being deleted and allowed the user to retrieve them later ("salvage" in NetWare terminology)[2]. To recover the space occupied by them, the user could manually "purge" these versions. Alternatively, the server would purge the oldest versions of deleted files when running out of disk space for new data.
[edit] Linux
This section requires expansion. |
No mainstream Linux file system supports versioning, but a number of experimental/research and lesser-known solutions do, namely:
- Wayback - User-level Versioning File System for Linux
- CopyFS - A copy-on-write, versioned filesystem
- ext3cow
- Tux3
- BTRFS
[edit] SCO OpenServer
HTFS, adopted as the primary filesystem for SCO OpenServer in 1995, supports file versioning. Versioning is enabled on a per-directory basis by setting the directory's setuid bit, which is inherited when subdirectories are created. If versioning is enabled, a new file version is created when a file or directory is removed, or when an existing file is opened with truncation. Non-current versions remain in the filesystem namespace, under the name of the original file but with a suffix attached consisting of a semicolon and version sequence number. All but the current version are hidden from directory reads (unless the SHOWVERSIONS environment variable is set), but versions are otherwise accessible for all normal operations. The environment variable and general accessibility allow versions to be managed with the usual filesystem utilities, though there is also an "undelete" command that can be used to purge and restore files, enable and disable versioning on directories, etc.
[edit] Others
- Subversion has a feature called "autoversioning" where a WebDAV source with a subversion backend can be mounted as a file system on systems that support this kind of mount (Linux, Windows and others do) and saves to that file system generate new revisions on the revision control system.[3]
[edit] Related software
The following are not versioning filesystems, but allow similar functionality.
- The ZFS supports Instantaneous snapshots and clones
- HammerFS in DragonFlyBSD has the ability to store revisions in the filesystem.
- NILFS, which supports snapshotting.
- Plan 9 Fossil - A Venti backed Fossil filesystem can provide a similar feature, where periodic snapshots are taken (often hourly) and a selection of these are stored forever into Venti (usually daily), while the others are discarded. This of course doesn't record every version of the file. The previous versions are made available at /archive.
- Write Anywhere File Layout - NetApp's storage solutions implement a file system called WAFL, which uses snapshot technology to keep different versions of all files in a volume around.
- pdumpfs, authored by Satoru Takabayashi, is a simple daily backup system similar to Plan9's dumpfs, implemented in Ruby. It functions as a snapshotting tool, which makes it possible to copy a whole directory to another location by using hardlinks. Used regularly, this can produce an effect similar to versioning[4].
- Microsoft Windows
- Shadow Copy - is a feature introduced by Microsoft with Windows Server 2003, that allows taking manual or automatic backup copies or snapshots of a file or folder on a specific volume at a specific point in time.
- Rollback Rx - Allows snapshots of disk partitions to be taken. Each snapshot contains only the differences between previous snapshots, and take only seconds to create. Can be reliably used to keep a Windows OS stable and/or protected from malware.
- GoBack - The GoBack software for Windows from Symantec enables reversion of files, directories or disks to previous states. It can record a maximum of 8GB in changes, and temporarily stops recording each change in the event of high I/O activity.
- Cascade File System exposes a Subversion or Perforce repository via a file system driver. The user must still explicitly decide when to commit changes.
[edit] See also
[edit] References
- ^ Daniel G. Bobrow, Jerry D. Burchfiel, Daniel L. Murphy, Raymond S. Tomlinson, TENEX, A Paged Time Sharing System for the PDP-10 (Communications of the ACM, Vol. 15, pp. 135-143, March 1972)
- ^ Novell NetWare Traditional File Services Administration Guide - Salvaging and Purging Files
- ^ Version Control with Subversion: Next Generation Open Source Version Control
- ^ pDumpFS Homepage