You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
141 KiB

  1. {"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"mergerfs - a featureful union filesystem","text":"<p>mergerfs is a FUSE based union filesystem geared towards simplifying storage and management of files across numerous commodity storage devices. It is similar to mhddfs, unionfs, and aufs.</p>"},{"location":"#features","title":"Features","text":"<ul> <li>Logicially combine numerous filesystems/paths into a single mount point</li> <li>Combine paths of the same or different filesystems</li> <li>Ability to add or remove filesystems/paths without impacting the rest of the data</li> <li>Unaffected by individual filesystem failure</li> <li>Configurable file selection and creation placement</li> <li>Works with filesystems of any size</li> <li>Works with filesystems of almost any type</li> <li>Ignore read-only filesystems when creating files</li> <li>Hard link copy-on-write / CoW</li> <li>Runtime configurable</li> <li>Support for extended attributes (xattrs)</li> <li>Support for file attributes (chattr)</li> <li>Support for POSIX ACLs</li> </ul>"},{"location":"#non-features","title":"Non-features","text":"<ul> <li>Read/write overlay on top of readonly filesystem like OverlayFS</li> <li>File whiteout</li> <li>RAID like parity calculation</li> <li>Redundency</li> <li>Splitting of files across branches</li> </ul>"},{"location":"#how-it-works","title":"How it works","text":"<p>mergerfs logically merges multiple filesystem paths together. It acts as a proxy to the underlying filesystem paths. Combining the behaviors of some functions and being a selector for others.</p> <p>When the contents of a directory are requested mergerfs combines the list of files from each directory, deduplicating entries, and returns that list.</p> <p>When a file or directory is created a policy is first run to determine which branch will be selected for the creation.</p> <p>For functions which chant attributes or remove the file the behavior may be applied to all instances found.</p> <p>Read more about policies here.</p>"},{"location":"#visualization","title":"Visualization","text":"<pre><code>A + B = C\n/disk1 /disk2 /merged\n| | |\n+-- /dir1 +-- /dir1 +-- /dir1\n| | | | | |\n| +-- file1 | +-- file2 | +-- file1\n| | +-- file3 | +-- file2\n+-- /dir2 | | +-- file3\n| | +-- /dir3 |\n| +-- file4 | +-- /dir2\n| +-- file5 | |\n+-- file6 | +-- file4\n |\n +-- /dir3\n | |\n | +-- file5\n |\n +-- file6\n</code></pre>"},{"location":"benchmarking/","title":"Benchmarking","text":"<p>Filesystems are complicated. They do many things and many of those are interconnected. Additionally, the OS, drivers, hardware, etc. can all impact performance. Therefore, when benchmarking, it is necessary that the test focuses as narrowly as possible.</p> <p>For most throughput is the key benchmark. To test throughput <code>dd</code> is useful but must be used with the correct settings in order to ensure the filesystem or device is actually being tested. The OS can and will cache data. Without forcing synchronous reads and writes and/or disabling caching the values returned will not be representative of the device's true performance.</p> <p>When benchmarking through mergerfs ensure you only use 1 branch to remove any possibility of the policies complicating the situation. Benchmark the underlying filesystem first and then mount mergerfs over it and test again. If you're experiencing speeds below your expectation you will need to narrow down precisely which component is leading to the slowdown. Preferably test the following in the order listed (but not combined).<