PUFS - Peer Union File System - is a poor man's na´ve distributed file system built on top of FUSE, hence running totally in user space.
The project is distributed under the GPL license.
PUFS' philosophy is somewhat in line with a network grid paradigm in the form of a file system: its contents consists in a unified view of the directories exported by each peer and can become larger or smaller as these peers join or leave this "union".
It is designed to work best on LANs where multicast is readily available, allowing seamless peer auto-discovery and notification. It can also be used in unicast mode, but it this case all the contributing peers must be enumerated in advance.
The peers constitute a topological mesh where any peer is virtually connected to every other one, so that the unified file hierarchy will be the same all around, whichever node a snapshot is taken.
Since there's no central authority enforcing membership or maintaining connectivity status, peers are actually loosely bound to the "union" and can leave or join any time.
Changes in the file system, both data and metadata are reflected on a best effort basis. In particular, the most recently accessed metadata is typically cached and is considered valid throughout a configurable period of time, after which it is refreshed.
One the other hand, a failure or a downtime in one node will be reflected in PUFS by the disappearance of the segment or top directory exported by that very peer.
PUFS is an almost POSIX compliant file system with the current exception of of both symbolic and hard links which are lacking.
File locking, both mandatory and advisory, is also missing due to a limitation in FUSE which doesn't dispatch fcntl(2) calls to the applications.
PUFS setting up is simple, just throw in a bunch of cooperating peers and you can have instantly a distributed file system up and running. This simplicity comes, however, with a price: despite a limited support for replication, PUFS is essentially non-redundant an not failsafe.
It is best suited for applications focused mainly in distributing and sharing data, where the impact of a temporary outage on a peer is not significant or can be remedied without loss.
Typical usage scenarios comprise:
· transparent file sharing across multiple machines
· a poor man's scalable storage system
· a file based distributed shared memory system by making each peer export a tmpfs based directory
· a sysadmin management tool by exporting suitable directories, say /etc or, wilder, /proc or /sys
· wacky grid topologies by making a peer to export itself a PUFS sub-file system
What's New in This Release:
· corrected a bug that could cause a user buffer to be written past the end in a read operation specifying a size noncongruent with the buffer size.
· added a command line option to enable the use of direct io explicitly. disabling direct io causes double buffering to occur since the kernel will also cache data [although that is minimised by the use of posix_fadvise(2)] but allows files to be mmaped and in particular to be execve'd