Browse Source

Deployed 04186919 with MkDocs version: 1.6.1

Antonio SJ Musumeci 3 days ago
parent
commit
7d761777a4
  1. 23
      404.html
  2. 23
      benchmarking/index.html
  3. 23
      config/branches/index.html
  4. 23
      config/cache/index.html
  5. 23
      config/deprecated_options/index.html
  6. 11
      config/export-support.md~
  7. 26
      config/export-support/index.html
  8. 33
      config/flush-on-close/index.html
  9. 16
      config/follow-symlinks.md~
  10. 24
      config/follow-symlinks/index.html
  11. 23
      config/func_readdir/index.html
  12. 248
      config/functions_categories_and_policies/index.html
  13. 6
      config/fuse_msg_size.md~
  14. 27
      config/fuse_msg_size/index.html
  15. 47
      config/inodecalc.md~
  16. 23
      config/inodecalc/index.html
  17. 1590
      config/ioctl/index.html
  18. 11
      config/link-exdev.md~
  19. 24
      config/link-exdev/index.html
  20. 2
      config/link_cow.md~
  21. 34
      config/link_cow/index.html
  22. 20
      config/nfsopenhack.md~
  23. 30
      config/nfsopenhack/index.html
  24. 16
      config/nullrw.md~
  25. 27
      config/nullrw/index.html
  26. 23
      config/options/index.html
  27. 15
      config/pin-threads.md~
  28. 23
      config/pin-threads/index.html
  29. 2
      config/readahead.md~
  30. 54
      config/readahead/index.html
  31. 19
      config/rename-exdev.md~
  32. 24
      config/rename-exdev/index.html
  33. 23
      config/rename_and_link/index.html
  34. 104
      config/statfs/index.html
  35. 20
      config/symlinkify.md~
  36. 27
      config/symlinkify/index.html
  37. 23
      config/terminology/index.html
  38. 9
      config/threads.md~
  39. 63
      config/threads/index.html
  40. 7
      config/xattr.md~
  41. 24
      config/xattr/index.html
  42. 23
      error_handling/index.html
  43. 23
      faq/compatibility_and_integration/index.html
  44. 23
      faq/configuration_and_policies/index.html
  45. 87
      faq/limit_drive_spinup/index.html
  46. 23
      faq/recommendations_and_warnings/index.html
  47. 23
      faq/reliability_and_scalability/index.html
  48. 27
      faq/technical_behavior_and_limitations/index.html
  49. 23
      faq/usage_and_functionality/index.html
  50. 23
      index.html
  51. 23
      known_issues_bugs/index.html
  52. 23
      media_and_publicity/index.html
  53. 23
      performance/index.html
  54. 23
      project_comparisons/index.html
  55. 23
      quickstart/index.html
  56. 27
      related_projects/index.html
  57. 23
      remote_filesystems/index.html
  58. 23
      runtime_interfaces/index.html
  59. 2
      search/search_index.json
  60. 23
      setup/build/index.html
  61. 23
      setup/installation/index.html
  62. 23
      setup/upgrade/index.html
  63. 102
      sitemap.xml
  64. BIN
      sitemap.xml.gz
  65. 27
      sponsorship_and_donations/index.html
  66. 66
      support/index.html
  67. 23
      tips_notes/index.html
  68. 23
      tooling/index.html

23
404.html

@ -877,27 +877,6 @@
<li class="md-nav__item">
<a href="/mergerfs/config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/mergerfs/config/statfs/" class="md-nav__link">
@ -1314,7 +1293,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
benchmarking/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1392,7 +1371,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
config/branches/index.html

@ -957,27 +957,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1394,7 +1373,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
config/cache/index.html

@ -1002,27 +1002,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1439,7 +1418,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
config/deprecated_options/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

11
config/export-support.md~

@ -1,11 +0,0 @@
# export-support
In theory, this flag should not be exposed to the end user. It is a
low-level FUSE flag which indicates whether or not the kernel can send
certain kinds of messages to it for the purposes of using it with
NFS. mergerfs does support these messages but due to bugs and quirks
found in the kernel and mergerfs this option is provided just in case
it is needed for debugging.
Given that this flag is set when the FUSE connection is first
initiated it is not possible to change during run time.

26
config/export-support/index.html

@ -890,27 +890,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1485,7 +1464,8 @@
<h1 id="export-support">export-support</h1>
<ul>
<li><code>export-support=true|false</code>: Defaults to <code>true</code>.</li>
<li><code>export-support=true|false</code></li>
<li>Defaults to <code>true</code>.</li>
</ul>
<p>In theory, this flag should not be exposed to the end user. It is a
low-level FUSE flag which indicates whether or not the kernel can send

33
config/flush-on-close/index.html

@ -890,27 +890,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1376,7 +1355,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1543,13 +1522,13 @@
<p>By default, FUSE would issue a flush before the release of a file
descriptor. This was considered a bit aggressive and a feature added
to give the FUSE server the ability to choose when that happens.</p>
<p>Options:</p>
<ul>
<li>always</li>
<li>never</li>
<li>opened-for-write</li>
<li><code>flush-on-close=always</code></li>
<li><code>flush-on-close=never</code></li>
<li><code>flush-on-close=opened-for-write</code></li>
<li>Defaults to <code>opened-for-write</code>.</li>
</ul>
<p>For now it defaults to "opened-for-write" which is less aggressive
<p>For now it defaults to <code>opened-for-write</code> which is less aggressive
than the behavior before this feature was added. It should not be a
problem because the flush is really only relevant when a file is
written to. Given flush is irrelevant for many filesystems in the

16
config/follow-symlinks.md~

@ -1,16 +0,0 @@
# follow-symlinks
This feature, when enabled, will cause symlinks to be interpreted by mergerfs as their target (depending on the mode).
When there is a getattr/stat request for a file mergerfs will check if the file is a symlink and depending on the follow-symlinks setting will replace the information about the symlink with that of that which it points to.
When unlink'ing or rmdir'ing the followed symlink it will remove the symlink itself and not that which it points to.
never: Behave as normal. Symlinks are treated as such.
directory: Resolve symlinks only which point to directories.
regular: Resolve symlinks only which point to regular files.
all: Resolve all symlinks to that which they point to.
Symlinks which do not point to anything are left as is.
WARNING: This feature works but there might be edge cases yet found. If you find any odd behaviors please file a ticket on github.

24
config/follow-symlinks/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1498,6 +1477,7 @@ symlink itself and not that which it points to.</p>
<li><code>follow-symlinks=regular</code>: Resolve symlinks only which point to regular files.</li>
<li><code>follow-symlinks=all</code>: Resolve all symlinks to that which they point
to. Symlinks which do not point to anything are left as is.</li>
<li>Defaults to <code>never</code>.</li>
</ul>
<p><strong>WARNING:</strong> This feature should be considered experimental. There
might be edge cases yet found. If you find any odd behaviors please

23
config/func_readdir/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

248
config/functions_categories_and_policies/index.html

@ -631,57 +631,6 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#funcreaddir" class="md-nav__link">
<span class="md-ellipsis">
func.readdir
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ioctl" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
<nav class="md-nav" aria-label="ioctl">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#rename-and-link" class="md-nav__link">
<span class="md-ellipsis">
rename and link
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#statfs-statvfs" class="md-nav__link">
<span class="md-ellipsis">
statfs / statvfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#flush-on-close" class="md-nav__link">
<span class="md-ellipsis">
flush-on-close
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1035,27 +984,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1472,7 +1400,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1647,57 +1575,6 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#funcreaddir" class="md-nav__link">
<span class="md-ellipsis">
func.readdir
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ioctl" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
<nav class="md-nav" aria-label="ioctl">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#rename-and-link" class="md-nav__link">
<span class="md-ellipsis">
rename and link
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#statfs-statvfs" class="md-nav__link">
<span class="md-ellipsis">
statfs / statvfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#flush-on-close" class="md-nav__link">
<span class="md-ellipsis">
flush-on-close
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1946,129 +1823,6 @@ policies is not appropriate.</p>
</tr>
</tbody>
</table>
<h2 id="funcreaddir">func.readdir</h2>
<p>examples: <code>func.readdir=seq</code>, <code>func.readdir=cor:4</code></p>
<p><code>readdir</code> has policies to control how it manages reading directory
content.</p>
<table>
<thead>
<tr>
<th>Policy</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>seq</td>
<td>"sequential" : Iterate over branches in the order defined. This is the default and traditional behavior found prior to the readdir policy introduction. This will be increasingly slower the more banches are defined. Especially if waiting for drives to spinup or network filesystems to respond.</td>
</tr>
<tr>
<td>cosr</td>
<td>"concurrent open, sequential read" : Concurrently open branch directories using a thread pool and process them in order of definition. This keeps memory and CPU usage low while also reducing the time spent waiting on branches to respond. Number of threads defaults to the number of logical cores. Can be overwritten via the syntax <code>func.readdir=cosr:N</code> where <code>N</code> is the number of threads.</td>
</tr>
<tr>
<td>cor</td>
<td>"concurrent open and read" : Concurrently open branch directories and immediately start reading their contents using a thread pool. This will result in slightly higher memory and CPU usage but reduced latency. Particularly when using higher latency / slower speed network filesystem branches. Unlike <code>seq</code> and <code>cosr</code> the order of files could change due the async nature of the thread pool. Number of threads defaults to the number of logical cores. Can be overwritten via the syntax <code>func.readdir=cor:N</code> where <code>N</code> is the number of threads.</td>
</tr>
</tbody>
</table>
<p>Keep in mind that <code>readdir</code> mostly just provides a list of file names
in a directory and possibly some basic metadata about said files. To
know details about the files, as one would see from commands like
<code>find</code> or <code>ls</code>, it is required to call <code>stat</code> on the file which is
controlled by <code>fuse.getattr</code>.</p>
<h2 id="ioctl">ioctl</h2>
<p>When <code>ioctl</code> is used with an open file then it will use the file
handle which was created at the original <code>open</code> call. However, when
using <code>ioctl</code> with a directory mergerfs will use the <code>open</code> policy to
find the directory to act on.</p>
<h4 id="rename-and-link">rename and link</h4>
<p><strong>NOTE:</strong> If you're receiving errors from software when files are
moved / renamed / linked then you should consider changing the create
policy to one which is <strong>not</strong> path preserving, enabling
<code>ignorepponrename</code>, or contacting the author of the offending software
and requesting that <code>EXDEV</code> (cross device / improper link) be properly
handled.</p>
<p><code>rename</code> and <code>link</code> are tricky functions in a union
filesystem. <code>rename</code> only works within a single filesystem or
device. If a rename can't be done atomically due to the source and
destination paths existing on different mount points it will return
<strong>-1</strong> with <strong>errno = EXDEV</strong> (cross device / improper link). So if a
<code>rename</code>'s source and target are on different filesystems within the pool
it creates an issue.</p>
<p>Originally mergerfs would return EXDEV whenever a rename was requested
which was cross directory in any way. This made the code simple and
was technically compliant with POSIX requirements. However, many
applications fail to handle EXDEV at all and treat it as a normal
error or otherwise handle it poorly. Such apps include: gvfsd-fuse
v1.20.3 and prior, Finder / CIFS/SMB client in Apple OSX 10.9+,
NZBGet, Samba's recycling bin feature.</p>
<p>As a result a compromise was made in order to get most software to
work while still obeying mergerfs' policies. Below is the basic logic.</p>
<ul>
<li>If using a <strong>create</strong> policy which tries to preserve directory paths (epff,eplfs,eplus,epmfs)</li>
<li>Using the <strong>rename</strong> policy get the list of files to rename</li>
<li>For each file attempt rename:<ul>
<li>If failure with ENOENT (no such file or directory) run <strong>create</strong> policy</li>
<li>If create policy returns the same branch as currently evaluating then clone the path</li>
<li>Re-attempt rename</li>
</ul>
</li>
<li>If <strong>any</strong> of the renames succeed the higher level rename is considered a success</li>
<li>If <strong>no</strong> renames succeed the first error encountered will be returned</li>
<li>On success:<ul>
<li>Remove the target from all branches with no source file</li>
<li>Remove the source from all branches which failed to rename</li>
</ul>
</li>
<li>If using a <strong>create</strong> policy which does <strong>not</strong> try to preserve directory paths</li>
<li>Using the <strong>rename</strong> policy get the list of files to rename</li>
<li>Using the <strong>getattr</strong> policy get the target path</li>
<li>For each file attempt rename:<ul>
<li>If the source branch != target branch:</li>
<li>Clone target path from target branch to source branch</li>
<li>Rename</li>
</ul>
</li>
<li>If <strong>any</strong> of the renames succeed the higher level rename is considered a success</li>
<li>If <strong>no</strong> renames succeed the first error encountered will be returned</li>
<li>On success:<ul>
<li>Remove the target from all branches with no source file</li>
<li>Remove the source from all branches which failed to rename</li>
</ul>
</li>
</ul>
<p>The removals are subject to normal entitlement checks.</p>
<p>The above behavior will help minimize the likelihood of EXDEV being
returned but it will still be possible.</p>
<p><strong>link</strong> uses the same strategy but without the removals.</p>
<h4 id="statfs-statvfs">statfs / statvfs</h4>
<p><a href="http://linux.die.net/man/2/statvfs">statvfs</a> normalizes the source
filesystems based on the fragment size and sums the number of adjusted
blocks and inodes. This means you will see the combined space of all
sources. Total, used, and free. The sources however are dedupped based
on the filesystem so multiple sources on the same drive will not result in
double counting its space. Other filesystems mounted further down the tree
of the branch will not be included when checking the mount's stats.</p>
<p>The options <code>statfs</code> and <code>statfs_ignore</code> can be used to modify
<code>statfs</code> behavior.</p>
<h4 id="flush-on-close">flush-on-close</h4>
<p>https://lkml.kernel.org/linux-fsdevel/20211024132607.1636952-1-amir73il@gmail.com/T/</p>
<p>By default, FUSE would issue a flush before the release of a file
descriptor. This was considered a bit aggressive and a feature added
to give the FUSE server the ability to choose when that happens.</p>
<p>Options:</p>
<ul>
<li>always</li>
<li>never</li>
<li>opened-for-write</li>
</ul>
<p>For now it defaults to "opened-for-write" which is less aggressive
than the behavior before this feature was added. It should not be a
problem because the flush is really only relevant when a file is
written to. Given flush is irrelevant for many filesystems in the
future a branch specific flag may be added so only files opened on a
specific branch would be flushed on close.</p>

6
config/fuse_msg_size.md~

@ -1,6 +0,0 @@
# fuse_msg_size
FUSE applications communicate with the kernel over a special character device: /dev/fuse. A large portion of the overhead associated with FUSE is the cost of going back and forth between user space and kernel space over that device. Generally speaking, the fewer trips needed the better the performance will be. Reducing the number of trips can be done a number of ways. Kernel level caching and increasing message sizes being two significant ones. When it comes to reads and writes if the message size is doubled the number of trips are approximately halved.
In Linux 4.20 a new feature was added allowing the negotiation of the max message size. Since the size is in multiples of pages the feature is called max_pages. There is a maximum max_pages value of 256 (1MiB) and minimum of 1 (4KiB). The default used by Linux >=4.20, and hardcoded value used before 4.20, is 32 (128KiB). In mergerfs it's referred to as fuse_msg_size to make it clear what it impacts and provide some abstraction.
Since there should be no downsides to increasing fuse_msg_size / max_pages, outside a minor bump in RAM usage due to larger message buffers, mergerfs defaults the value to 256. On kernels before 4.20 the value has no effect. The reason the value is configurable is to enable experimentation and benchmarking. See the BENCHMARKING section for examples.

27
config/fuse_msg_size/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1484,6 +1463,10 @@
<h1 id="fuse_msg_size">fuse_msg_size</h1>
<ul>
<li><code>fuse_msg_size=UINT</code></li>
<li>Defaults to <code>256</code></li>
</ul>
<p>FUSE applications communicate with the kernel over a special character
device: <code>/dev/fuse</code>. A large portion of the overhead associated with
FUSE is the cost of going back and forth between user space and kernel

47
config/inodecalc.md~

@ -1,47 +0,0 @@
# inodecalc
Inodes (st_ino) are unique identifiers within a filesystem. Each
mounted filesystem has device ID (st_dev) as well and together they
can uniquely identify a file on the whole of the system. Entries on
the same device with the same inode are in fact references to the same
underlying file. It is a many to one relationship between names and an
inode. Directories, however, do not have multiple links on most
systems due to the complexity they add.
FUSE allows the server (mergerfs) to set inode values but not device
IDs. Creating an inode value is somewhat complex in mergerfs' case as
files aren't really in its control. If a policy changes what directory
or file is to be selected or something changes out of band it becomes
unclear what value should be used. Most software does not to care what
the values are but those that do often break if a value changes
unexpectedly. The tool find will abort a directory walk if it sees a
directory inode change. NFS can return stale handle errors if the
inode changes out of band. File dedup tools will usually leverage
device ids and inodes as a shortcut in searching for duplicate files
and would resort to full file comparisons should it find different
inode values.
mergerfs offers multiple ways to calculate the inode in hopes of
covering different usecases.
* `passthrough`: Passes through the underlying inode value. Mostly
intended for testing as using this does not address any of the
problems mentioned above and could confuse file deduplication
software as inodes from different filesystems can be the same.
* `path-hash`: Hashes the relative path of the entry in question. The
underlying file's values are completely ignored. This means the
inode value will always be the same for that file path. This is
useful when using NFS and you make changes out of band such as copy
data between branches. This also means that entries that do point to
the same file will not be recognizable via inodes. That does not
mean hard links don't work. They will.
* `path-hash32`: 32bit version of path-hash.
* `devino-hash`: Hashes the device id and inode of the underlying
entry. This won't prevent issues with NFS should the policy pick a
different file or files move out of band but will present the same
inode for underlying files that do too.
* `devino-hash32`: 32bit version of devino-hash.
hybrid-hash: Performs path-hash on directories and devino-hash on other file types. Since directories can't have hard links the static value won't make a difference and the files will get values useful for finding duplicates. Probably the best to use if not using NFS. As such it is the default.
hybrid-hash32: 32bit version of hybrid-hash.

23
config/inodecalc/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

1590
config/ioctl/index.html
File diff suppressed because it is too large
View File

11
config/link-exdev.md~

@ -1,11 +0,0 @@
# link-exdev
If using path preservation and a `link` fails with `EXDEV` make a call
to symlink where the target is the oldlink and the linkpath is the
newpath. The target value is determined by the value of link-exdev.
passthrough: Return EXDEV as normal.
rel-symlink: A relative path from the newpath.
abs-base-symlink: An absolute value using the underlying branch.
abs-pool-symlink: An absolute value using the mergerfs mount point.
NOTE: It is possible that some applications check the file they link. In those cases, it is possible it will error or complain.

24
config/link-exdev/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1495,6 +1474,7 @@ the newpath. The target value is determined by the value of
underlying branch.</li>
<li><code>link-exdev=abs-pool-symlink</code>: An absolute value using the mergerfs
mount point.</li>
<li>Defaults to <code>passthrough</code>.</li>
</ul>
<p><strong>NOTE:</strong> It is possible that some applications check the file they
link. In those cases, it is possible it will error or complain.</p>

2
config/link_cow.md~

@ -0,0 +1,2 @@
# link_cow

34
config/link_cow/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1484,6 +1463,17 @@
<h1 id="link_cow">link_cow</h1>
<ul>
<li><code>link_cow=true|false</code></li>
<li>Defaults to <code>false</code></li>
</ul>
<p>This feature offers similar functionality to what
<a href="https://manpages.ubuntu.com/manpages/noble/man1/cow-shell.1.html">cow-shell</a>
offers. </p>
<p>When enabled if mergerfs is asked to open a file to write and the link
count on the file is greater than 1 it will copy the file to a
temporary new file and then rename it over the original. This will
atomically "break" the link. After that it will open the new file.</p>

20
config/nfsopenhack.md~

@ -1,20 +0,0 @@
# nfsopenhack
NFS is not fully POSIX compliant and historically certain behaviors,
such as opening files with O_EXCL, are not or not well supported. When
mergerfs (or any FUSE filesystem) is exported over NFS some of these
issues come up due to how NFS and FUSE interact.
This hack addresses the issue where the creation of a file with a
read-only mode but with a read/write or write only flag. Normally this
is perfectly valid but NFS chops the one open call into multiple
calls. Exactly how it is translated depends on the configuration and
versions of the NFS server and clients but it results in a permission
error because a normal user is not allowed to open a read-only file as
writable.
Even though it's a more niche situation this hack breaks normal
security and behavior and as such is `off` by default. If set to `git`
it will only perform the hack when the path in question includes
`/.git/`. `all` will result in it applying anytime a read-only file
which is empty is opened for writing.

30
config/nfsopenhack/index.html

@ -16,7 +16,7 @@
<link rel="prev" href="../xattr/">
<link rel="next" href="../ioctl/">
<link rel="next" href="../statfs/">
<link rel="icon" href="../../assets/images/favicon.png">
@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1489,6 +1468,7 @@
<li><code>nfsopenhack=git</code>: Apply hack if path includes <code>/.git/</code>.</li>
<li><code>nfsopenhack=all</code>: Apply hack on all empty read-only files opened
for writing.</li>
<li>Defaults to <code>off</code>.</li>
</ul>
<p>NFS is not fully POSIX compliant and historically certain behaviors,
such as opening files with <code>O_EXCL</code>, are not or not well
@ -1558,13 +1538,13 @@ which is empty is opened for writing.</p>
<a href="../ioctl/" class="md-footer__link md-footer__link--next" aria-label="Next: ioctl">
<a href="../statfs/" class="md-footer__link md-footer__link--next" aria-label="Next: statfs / statvfs">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
ioctl
statfs / statvfs
</div>
</div>
<div class="md-footer__button md-icon">

16
config/nullrw.md~

@ -1,16 +0,0 @@
# nullrw
Due to how FUSE works there is an overhead to all requests made to a
FUSE filesystem that wouldn't exist for an in kernel one. Meaning that
even a simple passthrough will have some slowdown. However, generally
the overhead is minimal in comparison to the cost of the underlying
I/O. By disabling the underlying I/O we can test the theoretical
performance boundaries.
By enabling `nullrw` mergerfs will work as it always does **except**
that all reads and writes will be no-ops. A write will succeed (the
size of the write will be returned as if it were successful) but
mergerfs does nothing with the data it was given. Similarly a read
will return the size requested but won't touch the buffer.
See the [benchmarking](../benchmarking.md) section for suggestions on how to test.

27
config/nullrw/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1484,6 +1463,10 @@
<h1 id="nullrw">nullrw</h1>
<ul>
<li><code>nullrw=true|false</code></li>
<li>Defaults to <code>false</code>.</li>
</ul>
<p>Due to how FUSE works there is an overhead to all requests made to a
FUSE filesystem that wouldn't exist for an in kernel one. Meaning that
even a simple passthrough will have some slowdown. However, generally

23
config/options/index.html

@ -948,27 +948,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1385,7 +1364,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

15
config/pin-threads.md~

@ -1,15 +0,0 @@
# pin-threads
Simple strategies for pinning read and/or process threads. If process
threads are not enabled then the strategy simply works on the read
threads. Invalid values are ignored.
* `pin-threads=R1L`: All read threads pinned to a single logical CPU.
* `pin-threads=R1P`: All read threads pinned to a single physical CPU.
* `pin-threads=RP1L`: All read and process threads pinned to a single logical CPU.
RP1P: All read and process threads pinned to a single physical CPU.
R1LP1L: All read threads pinned to a single logical CPU, all process threads pinned to a (if possible) different logical CPU.
R1PP1P: All read threads pinned to a single physical CPU, all process threads pinned to a (if possible) different logical CPU.
RPSL: All read and process threads are spread across all logical CPUs.
RPSP: All read and process threads are spread across all physical CPUs.
R1PPSP: All read threads are pinned to a single physical CPU while process threads are spread across all other physical CPUs.

23
config/pin-threads/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

2
config/readahead.md~

@ -0,0 +1,2 @@
# readahead

54
config/readahead/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1484,6 +1463,37 @@
<h1 id="readahead">readahead</h1>
<p>Sets the mergerfs and underlying filesystem <code>readahead</code> values. The
value unit is in kibibytes.</p>
<ul>
<li><code>readahead=1024</code></li>
</ul>
<p>While the max size of messages sent between the kernel and mergerfs is
configurable via the <a href="../fuse_msg_size/">fuse_msg_size</a> option that
doesn't mean that is the size used by the kernel for read and
writes.</p>
<p>Linux has a max read/write size of 2GB. Since the max FUSE message
size is just over 1MB the kernel will break up read and write requests
with buffers larger than that 1MB.</p>
<p>When page caching is disabled (<code>cache.files=off</code>), besides the kernel
breaking up requests with larger buffers, requests are effectively one
for one to mergerfs. A read or write request for X bytes is made to
the kernel and a request for X bytes is made to mergerfs. No
<a href="https://en.wikipedia.org/wiki/Readahead">readahead</a> behavior will
occur because there is no page cache available for it to store that
data. In FUSE this is referred to as "direct IO". Note that "direct
IO" is not the same as <code>O_DIRECT</code>.</p>
<p>When page caching is enabled the kernel can and will utilize
<code>readahead</code>. However, there are two values which impact the size of
the <code>readahead</code> requests. The filesystem's <code>readahead</code> value and the
FUSE <code>max_readahead</code> value. Whichever is lowest is used. The default
<code>max_readahead</code> in mergerfs is maxed out meaning only the filesystem
<code>readahead</code> value is relevant.</p>
<p>Preferably this value would be set by the user externally since it is
a generic feature but there is no standard way to do so mergerfs added
this feature to make it easier to set.</p>
<p>There is currently no way to set separate values for different
branches through mergerfs.</p>

19
config/rename-exdev.md~

@ -1,19 +0,0 @@
# rename-exdev
If using path preservation and a `rename` fails with `EXDEV`:
1. Move file from **/branch/a/b/c** to **/branch/.mergerfs_rename_exdev/a/b/c**.
2. symlink the rename's `newpath` to the moved file.
The `target` value is determined by the value of `rename-exdev`.
- passthrough: Return EXDEV as normal.
- rel-symlink: A relative path from the `newpath`.
- abs-symlink: An absolute value using the mergerfs mount point.
NOTE: It is possible that some applications check the file they
rename. In those cases it is possible it will error or complain.
NOTE: The reason `abs-symlink` is not split into two like `link-exdev`
is due to the complexities in managing absolute base symlinks when
multiple `oldpaths` exist.

24
config/rename-exdev/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1495,6 +1474,7 @@
<li><code>rename-exdev=rel-symlink</code>: A relative path from the <code>newpath</code>.</li>
<li><code>rename-exdev=abs-symlink</code>: An absolute value using the mergerfs
mount point.</li>
<li>Defaults to <code>passthrough</code>.</li>
</ul>
<p><strong>NOTE:</strong> It is possible that some applications check the file they
rename. In those cases it is possible it will error or complain.</p>

23
config/rename_and_link/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

104
config/statfs/index.html

@ -13,7 +13,7 @@
<link rel="canonical" href="https://trapexit.github.io/mergerfs/config/statfs/">
<link rel="prev" href="../ioctl/">
<link rel="prev" href="../nfsopenhack/">
<link rel="next" href="../flush-on-close/">
@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
@ -921,6 +900,17 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
statfs / statvfs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
@ -931,6 +921,34 @@
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#statfs_ignore" class="md-nav__link">
<span class="md-ellipsis">
statfs_ignore
</span>
</a>
</li>
</ul>
</nav>
</li>
@ -1337,7 +1355,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1454,6 +1472,23 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#statfs_ignore" class="md-nav__link">
<span class="md-ellipsis">
statfs_ignore
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
@ -1484,6 +1519,12 @@
<h1 id="statfs-statvfs">statfs / statvfs</h1>
<ul>
<li><code>statfs=base</code>: Aggregate details from all branches using their base directory.</li>
<li><code>statfs=full</code>: Aggregate details using the full path of the file
requested. Limiting it to only branches where the file exists.</li>
<li>Defaults to <code>base</code>. </li>
</ul>
<p><a href="http://linux.die.net/man/2/statvfs">statvfs</a> normalizes the source
filesystems based on the fragment size and sums the number of adjusted
blocks and inodes. This means you will see the combined space of all
@ -1491,8 +1532,17 @@ sources. Total, used, and free. The sources however are dedupped based
on the filesystem so multiple sources on the same drive will not result in
double counting its space. Other filesystems mounted further down the tree
of the branch will not be included when checking the mount's stats.</p>
<p>The options <code>statfs</code> and <code>statfs_ignore</code> can be used to modify
<code>statfs</code> behavior.</p>
<h2 id="statfs_ignore">statfs_ignore</h2>
<p>Modifies how <code>statfs</code> works. Will cause it to ignore branches of a
certain mode.</p>
<ul>
<li><code>statfs_ignore=none</code>: Include all branches.</li>
<li><code>statfs_ignore=ro</code>: Ignore available space for branches mounted as
read-only or have a mode <code>RO</code> or <code>NC</code>.</li>
<li><code>statfs_ignore=nc</code>: Ignore available space for branches with a mode
of <code>NC</code>.</li>
<li>Defaults to <code>none</code>.</li>
</ul>
@ -1528,7 +1578,7 @@ of the branch will not be included when checking the mount's stats.</p>
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../ioctl/" class="md-footer__link md-footer__link--prev" aria-label="Previous: ioctl">
<a href="../nfsopenhack/" class="md-footer__link md-footer__link--prev" aria-label="Previous: nfsopenhack">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
@ -1538,7 +1588,7 @@ of the branch will not be included when checking the mount's stats.</p>
Previous
</span>
<div class="md-ellipsis">
ioctl
nfsopenhack
</div>
</div>
</a>

20
config/symlinkify.md~

@ -0,0 +1,20 @@
# symlinkify
Due to the levels of indirection introduced by mergerfs and the
underlying technology FUSE there can be varying levels of performance
degradation. This feature will turn non-directories which are not
writable into symlinks to the original file found by the `readlink`
policy after the mtime and ctime are older than the timeout.
**WARNING:** The current implementation has a known issue in which if
the file is open and being used when the file is converted to a
symlink then the application which has that file open will receive an
error when using it. This is unlikely to occur in practice but is
something to keep in mind.
**WARNING:** Some backup solutions, such as CrashPlan, do not backup
the target of a symlink. If using this feature it will be necessary to
point any backup software to the original filesystems or configure the
software to follow symlinks if such an option is
available. Alternatively, create two mounts. One for backup and one
for general consumption.

27
config/symlinkify/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1484,6 +1463,10 @@
<h1 id="symlinkify">symlinkify</h1>
<ul>
<li><code>symlinkify=true|false</code></li>
<li>Defaults to <code>false</code>.</li>
</ul>
<p>Due to the levels of indirection introduced by mergerfs and the
underlying technology FUSE there can be varying levels of performance
degradation. This feature will turn non-directories which are not

23
config/terminology/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

9
config/threads.md~

@ -0,0 +1,9 @@
# threads
## read-thread-count
## process-thread-count
## process-thread-queue-depth

63
config/threads/index.html

@ -957,27 +957,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1394,7 +1373,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1576,9 +1555,49 @@
<h1 id="threads">threads</h1>
<p>There are multiple thread pools used in mergerfs to provide
parallel behaviors.</p>
<h2 id="read-thread-count">read-thread-count</h2>
<p>The number of threads used to read (and possibly process) messages
from the kernel.</p>
<ul>
<li><code>read-thread-count=0</code>: Create a thread pool sized to the number of
logical CPUs.</li>
<li><code>read-thread-count=N</code> where <code>N&gt;0</code>: Create a thread pool of <code>N</code> threads.</li>
<li><code>read-thread-count=N</code> where <code>N&lt;0</code>: Create a thread pool of <code>CPUCount /
-N</code> threads.</li>
<li><code>read-thread-count=-1</code> where <code>process-thread-count=-1</code>: Creates <code>2</code>
read threads and <code>max(2,CPUCount-2)</code> process threads.</li>
<li>Defaults to <code>0</code>.</li>
</ul>
<p>When <code>process-thread-count=-1</code> (the default) this option sets the
number of threads which read and then process requests from the
kernel.</p>
<p>When <code>process-thread-count</code> is set to anything else mergerfs will
create two thread pools. A "read" thread pool which just reads from
the kernel and hands off requests to the "process" thread pool.</p>
<p>Generally, only 1 or 2 "read" threads are necessary.</p>
<h2 id="process-thread-count">process-thread-count</h2>
<p>When enabled this sets the number of threads in the message processing pool.</p>
<ul>
<li><code>process-thread-count=-1</code>: Process thread pool is disabled.</li>
<li><code>process-thread-count=0</code>: Create a thread pool sized to the number
of logical CPUs.</li>
<li><code>process-thread-count=N</code> where <code>N&gt;0</code>: Create a thread pool of <code>N</code> threads.</li>
<li><code>process-thread-count=N</code> where <code>N&lt;-1</code>: Create a thread pool of <code>CPUCount /
-N</code> threads.</li>
<li>Defaults to <code>-1</code>.</li>
</ul>
<h2 id="process-thread-queue-depth">process-thread-queue-depth</h2>
<ul>
<li><code>process-thread-queue-depth=N</code> where <code>N&gt;0</code>: Sets the number of outstanding
requests that a process thread can have to N. If requests come in
faster than can be processed and the max queue depth hit then
queuing the request will block in order to limit memory growth.</li>
<li><code>process-thread-queue-depth=0</code>: Sets the queue depth to the thread
pool count.</li>
<li>Defaults to <code>0</code>.</li>
</ul>

7
config/xattr.md~

@ -1,7 +0,0 @@
# xattr
Runtime extended attribute support can be managed via the `xattr` option. By default it will passthrough any xattr calls. Given xattr support is rarely used and can have significant performance implications mergerfs allows it to be disabled at runtime. The performance problems mostly comes when file caching is enabled. The kernel will send a `getxattr` for `security.capability` _before every single write_. It doesn't cache the responses to any `getxattr`. This might be addressed in the future but for now mergerfs can really only offer the following workarounds.
`noattr` will cause mergerfs to short circuit all xattr calls and return ENOATTR where appropriate. mergerfs still gets all the requests but they will not be forwarded on to the underlying filesystems. The runtime control will still function in this mode.
`nosys` will cause mergerfs to return ENOSYS for any xattr call. The difference with `noattr` is that the kernel will cache this fact and itself short circuit future calls. This is more efficient than `noattr` but will cause mergerfs' runtime control via the hidden file to stop working.

24
config/xattr/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1488,6 +1467,7 @@
<li><code>xattr=passthrough</code>: Passes through all requests to underlying file.</li>
<li><code>xattr=noattr</code>: mergerfs receives the request but returns <code>NOATTR</code>.</li>
<li><code>xattr=nosys</code>: Tells the kernel to reject all <code>xattr</code> requests.</li>
<li>Defaults to <code>passthrough</code>.</li>
</ul>
<p>Runtime extended attribute support can be managed via the <code>xattr</code>
option. By default it will passthrough any xattr calls. Given xattr

23
error_handling/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1392,7 +1371,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
faq/compatibility_and_integration/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1394,7 +1373,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
faq/configuration_and_policies/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1394,7 +1373,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

87
faq/limit_drive_spinup/index.html

@ -24,7 +24,7 @@
<title>Limit drive spinup - mergerfs</title>
<title>Limiting drive spinup - mergerfs</title>
@ -76,7 +76,7 @@
<div data-md-component="skip">
<a href="#what-if-you-assume-no-out-of-band-changes-and-cache-everything" class="md-skip">
<a href="#limiting-drive-spinup" class="md-skip">
Skip to content
</a>
@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
</div>
@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1329,12 +1308,14 @@
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1345,7 +1326,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1357,6 +1338,8 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
@ -1365,6 +1348,16 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#how-can-i-setup-my-system-to-limit-drive-spinup" class="md-nav__link">
<span class="md-ellipsis">
How can I setup my system to limit drive spinup?
</span>
</a>
<nav class="md-nav" aria-label="How can I setup my system to limit drive spinup?">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#what-if-you-assume-no-out-of-band-changes-and-cache-everything" class="md-nav__link">
<span class="md-ellipsis">
What if you assume no out of band changes and cache everything?
@ -1372,8 +1365,8 @@
</a>
</li>
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#what-if-you-only-query-already-active-drives" class="md-nav__link">
<span class="md-ellipsis">
What if you only query already active drives?
@ -1381,14 +1374,19 @@
</a>
</li>
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#is-there-anything-that-can-be-done-where-mergerfs-is-involved" class="md-nav__link">
<span class="md-ellipsis">
Is there anything that can be done where mergerfs is involved?
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1504,6 +1502,8 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
@ -1512,6 +1512,16 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#how-can-i-setup-my-system-to-limit-drive-spinup" class="md-nav__link">
<span class="md-ellipsis">
How can I setup my system to limit drive spinup?
</span>
</a>
<nav class="md-nav" aria-label="How can I setup my system to limit drive spinup?">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#what-if-you-assume-no-out-of-band-changes-and-cache-everything" class="md-nav__link">
<span class="md-ellipsis">
What if you assume no out of band changes and cache everything?
@ -1519,8 +1529,8 @@
</a>
</li>
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#what-if-you-only-query-already-active-drives" class="md-nav__link">
<span class="md-ellipsis">
What if you only query already active drives?
@ -1528,14 +1538,19 @@
</a>
</li>
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#is-there-anything-that-can-be-done-where-mergerfs-is-involved" class="md-nav__link">
<span class="md-ellipsis">
Is there anything that can be done where mergerfs is involved?
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1569,8 +1584,8 @@
<h1>Limit drive spinup</h1>
<h1 id="limiting-drive-spinup">Limiting drive spinup</h1>
<h2 id="how-can-i-setup-my-system-to-limit-drive-spinup">How can I setup my system to limit drive spinup?</h2>
<p>TL;DR: You really can't. Not through mergerfs alone.</p>
<p>mergerfs is a proxy. Not a cache. It proxies calls between client software and underlying filesystems. If a client does an <code>open</code>, <code>readdir</code>, <code>stat</code>, etc. it must translate that into something that makes sense across N filesystems. For <code>readdir</code> that means running the call against all branches and aggregating the output. For <code>open</code> that means finding the file to open and doing so. The only way to find the file to open is to scan across all branches and sort the results and pick one. There is no practical way to do otherwise. Especially given so many mergerfs users expect out of band changes to "just work."</p>
<p>The best way to limit spinup of drives is to limit their usage at the client level. Meaning keeping software from interacting with the filesystem all together.</p>

23
faq/recommendations_and_warnings/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1385,7 +1364,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
faq/reliability_and_scalability/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1385,7 +1364,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

27
faq/technical_behavior_and_limitations/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1457,7 +1436,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1929,13 +1908,13 @@ removed to simplify the codebase.</p>
<a href="../limit_drive_spinup/" class="md-footer__link md-footer__link--next" aria-label="Next: Limit drive spinup">
<a href="../limit_drive_spinup/" class="md-footer__link md-footer__link--next" aria-label="Next: Limiting drive spinup">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</div>
</div>
<div class="md-footer__button md-icon">

23
faq/usage_and_functionality/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1439,7 +1418,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
index.html

@ -968,27 +968,6 @@
<li class="md-nav__item">
<a href="config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="config/statfs/" class="md-nav__link">
@ -1405,7 +1384,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
known_issues_bugs/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1539,7 +1518,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
media_and_publicity/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1325,7 +1304,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
performance/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1335,7 +1314,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
project_comparisons/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1455,7 +1434,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
quickstart/index.html

@ -1120,27 +1120,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1557,7 +1536,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

27
related_projects/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1325,7 +1304,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1660,7 +1639,7 @@ out-of-date versions.</p>
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../faq/limit_drive_spinup/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Limit drive spinup">
<a href="../faq/limit_drive_spinup/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Limiting drive spinup">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
@ -1670,7 +1649,7 @@ out-of-date versions.</p>
Previous
</span>
<div class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</div>
</div>
</a>

23
remote_filesystems/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1401,7 +1380,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
runtime_interfaces/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1464,7 +1443,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

2
search/search_index.json
File diff suppressed because it is too large
View File

23
setup/build/index.html

@ -948,27 +948,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1385,7 +1364,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
setup/installation/index.html

@ -1041,27 +1041,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1478,7 +1457,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
setup/upgrade/index.html

@ -900,27 +900,6 @@
<li class="md-nav__item">
<a href="../../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/statfs/" class="md-nav__link">
@ -1337,7 +1316,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

102
sitemap.xml

@ -2,202 +2,198 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://trapexit.github.io/mergerfs/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/benchmarking/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/error_handling/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/known_issues_bugs/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/media_and_publicity/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/performance/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/project_comparisons/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/quickstart/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/related_projects/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/remote_filesystems/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/runtime_interfaces/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/sponsorship_and_donations/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/support/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/tips_notes/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/tooling/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/branches/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/cache/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/deprecated_options/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/export-support/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/flush-on-close/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/follow-symlinks/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/func_readdir/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/functions_categories_and_policies/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/fuse_msg_size/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/inodecalc/</loc>
<lastmod>2025-01-01</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/ioctl/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/link-exdev/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/link_cow/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/nfsopenhack/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/nullrw/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/options/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/pin-threads/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/readahead/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/rename-exdev/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/rename_and_link/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/statfs/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/symlinkify/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/terminology/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/threads/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/config/xattr/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/compatibility_and_integration/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/configuration_and_policies/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/limit_drive_spinup/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/recommendations_and_warnings/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/reliability_and_scalability/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/technical_behavior_and_limitations/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/faq/usage_and_functionality/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/setup/build/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/setup/installation/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
<url>
<loc>https://trapexit.github.io/mergerfs/setup/upgrade/</loc>
<lastmod>2025-01-01</lastmod>
<lastmod>2025-01-02</lastmod>
</url>
</urlset>

BIN
sitemap.xml.gz

27
sponsorship_and_donations/index.html

@ -886,27 +886,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1323,7 +1302,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1483,8 +1462,8 @@
<p><a href="https://github.com/trapexit/support">https://github.com/trapexit/support</a></p>
<p>Development and support of a project like mergerfs requires a
significant amount of time and effort. The software is released under
the very liberal ISC license and is therefore free to use for personal
or commercial uses.</p>
the very liberal <a href="https://opensource.org/license/isc-license-txt">ISC</a>
license and is therefore free to use for personal or commercial uses.</p>
<p>If you are a non-commercial user and find mergerfs and its support valuable
and would like to support the project financially it would be very
much appreciated.</p>

66
support/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1325,7 +1304,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>
@ -1450,21 +1429,6 @@
</span>
</a>
<nav class="md-nav" aria-label="Contact / Issue submission">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#donations" class="md-nav__link">
<span class="md-ellipsis">
Donations
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1537,21 +1501,6 @@
</span>
</a>
<nav class="md-nav" aria-label="Contact / Issue submission">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#donations" class="md-nav__link">
<span class="md-ellipsis">
Donations
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1627,19 +1576,6 @@ directly.</a></strong></p>
<li>discord: <a href="https://discord.gg/MpAr69V">https://discord.gg/MpAr69V</a></li>
<li>reddit: <a href="https://www.reddit.com/r/mergerfs">https://www.reddit.com/r/mergerfs</a></li>
</ul>
<h4 id="donations">Donations</h4>
<p>https://github.com/trapexit/support</p>
<p>Development and support of a project like mergerfs requires a
significant amount of time and effort. The software is released under
the very liberal ISC license and is therefore free to use for personal
or commercial uses.</p>
<p>If you are a personal user and find mergerfs and its support valuable
and would like to support the project financially it would be very
much appreciated.</p>
<p>If you are using mergerfs commercially please consider sponsoring the
project to ensure it continues to be maintained and receive
updates. If custom features are needed feel free to <a href="mailto:support@spawn.link">contact me
directly</a>.</p>

23
tips_notes/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1335,7 +1314,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

23
tooling/index.html

@ -888,27 +888,6 @@
<li class="md-nav__item">
<a href="../config/ioctl/" class="md-nav__link">
<span class="md-ellipsis">
ioctl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
@ -1416,7 +1395,7 @@
<span class="md-ellipsis">
Limit drive spinup
Limiting drive spinup
</span>

Loading…
Cancel
Save