@ -1,17 +1,64 @@
# Tooling
## mergerfs.collect-info
A tool included in recent releases of `mergerfs` which collects
details about your system and configuration to help providing
[support ](support.md ).
```text
$ mergerfs.collect-info
* Please have mergerfs mounted before running this tool.
* Upload the following file to your GitHub ticket or put on https://pastebin.com when requesting support.
* /tmp/mergerfs.info.txt
```
## fsck.mergerfs
A tool to help diagnose and solve mergerfs pool issues. Primarily
related to mismatched permissions and ownership.
```text
$ fsck.mergerfs --help
fsck.mergerfs: A tool to help diagnose and solve mergerfs pool issues
USAGE: fsck.mergerfs [OPTIONS] path
POSITIONALS:
path TEXT:DIR REQUIRED mergerfs path
OPTIONS:
-h, --help Print this help message and exit
--fix TEXT:{none,manual,newest,largest} [none]
Will attempt to 'fix' the problem by chown+chmod or copying files
based on a selected file.
* none: Do nothing. Just print details.
* manual: User selects source file.
* newest: Use file with most recent mtime.
* largest: Use file with largest size.
--check-size BOOLEAN [false]
Considers file size in calculating differences
--copy-file BOOLEAN [false]
Copy file rather than chown/chmod to fix
```
## preload.so
EXPERIMENTAL
For some time there has been work to enable passthrough IO in
FUSE. Passthrough IO would allow for near native performance with
regards to reads and writes (at the expense of certain mergerfs
features.) In Linux v6.9 that feature made its way into the kernel
however in a somewhat limited form which is incompatible with aspects
of how mergerfs currently functions. While work will continue to
support passthrough IO in mergerfs this library was created to offer
similar functionality in a more limited way.
For some time there has been work to enable
[passthrough ](config/passthrough.md ) IO in FUSE. Passthrough IO would
allow for near native performance with regards to reads and writes (at
the expense of certain mergerfs features.) In Linux v6.9 that feature
made its way into the kernel however in a somewhat limited form which
is incompatible with aspects of how mergerfs functions and took longer
to implement as a result. This preloadable library was created as an
alternative to the FUSE [passthrough ](config/passthrough.md )
integration.
`/usr/lib/mergerfs/preload.so`
@ -24,11 +71,13 @@ on, reopens the file on the underlying filesystem and returns that
instead. Meaning that you will get native read/write performance
because mergerfs is no longer part of the workflow. Keep in mind that
this also means certain mergerfs features that work by interrupting
the read/write workflow, such as `moveonenospc` , will no longer work.
the read/write workflow, such as
[moveonenospc ](config/moveonenospc.md ), will no longer work.
Also, understand that this will only work on dynamically linked
software. Anything statically compiled will not work. Many GoLang and
Rust apps are statically compiled.
software (a that dynamically linked with the same general libc version
as the software being used with it.) Anything statically compiled will
not work. Many GoLang and Rust apps are statically compiled.
The library will not interfere with non-mergerfs filesystems. The
library is written to always fallback to returning the mergerfs opened
@ -41,6 +90,7 @@ Thank you to
[nohajc ](https://github.com/nohajc/mergerfs-io-passthrough ) for
prototyping the idea.
### casual usage
```sh
@ -49,7 +99,8 @@ LD_PRELOAD=/usr/lib/mergerfs/preload.so touch /mnt/mergerfs/filename
Or run `export LD_PRELOAD=/usr/lib/mergerfs/preload.so` in your shell
or place it in your shell config file to have it be picked up by all
software ran from your shell.
software ran from your shell. For instance, in `bash` , add the export
to `.bashrc` .
### Docker and Podman usage
@ -104,14 +155,18 @@ Environment=LD_PRELOAD=/usr/lib/mergerfs/preload.so
## Misc
- https://github.com/trapexit/mergerfs-tools
- mergerfs.ctl: A tool to make it easier to query and configure mergerfs at runtime
- mergerfs.fsck: Provides permissions and ownership auditing and the ability to fix them
- mergerfs.dedup: Will help identify and optionally remove duplicate files
- mergerfs.dup: Ensure there are at least N copies of a file across the pool
- mergerfs.balance: Rebalance files across filesystems by moving them from the most filled to the least filled
- mergerfs.consolidate: move files within a single mergerfs directory to the filesystem with most free space
- https://github.com/trapexit/scorch
- scorch: A tool to help discover silent corruption of files and keep track of files
- https://github.com/trapexit/bbf
- bbf (bad block finder): a tool to scan for and 'fix' hard drive bad blocks and find the files using those blocks
* https://github.com/trapexit/mergerfs-tools
* * *Keep in mind these tools are more to provide examples of custom
behaviors that can be build on top of mergerfs. They may not
have all the features you are looking for.**
* mergerfs.ctl: A tool to make it easier to query and configure mergerfs at runtime
* mergerfs.fsck: Provides permissions and ownership auditing and
the ability to fix them (should use `fsck.mergerfs` instead)
* mergerfs.dedup: Will help identify and optionally remove duplicate files
* mergerfs.dup: Ensure there are at least N copies of a file across the pool
* mergerfs.balance: Rebalance files across filesystems by moving them from the most filled to the least filled
* mergerfs.consolidate: move files within a single mergerfs directory to the filesystem with most free space
* https://github.com/trapexit/scorch
* scorch: A tool to help discover silent corruption of files and keep track of files
* https://github.com/trapexit/bbf
* bbf (bad block finder): a tool to scan for and 'fix' hard drive bad blocks and find the files using those blocks