mergerfs 2.32.3

mergerfs is a union filesystem for FUSE. It allows to join multiple source directories, declare priority mappings for file operations, to provide a joined view to the underlying files. It's similar to mhddfs, unionfs, and aufs; but allows for accessing standard and extended attributes.

Tags c fuse unionfs filesystem mapping
License MITL
State stable

Recent Releases

2.32.310 Feb 2021 07:45 minor feature: F50812a dirname should not return an empty string. 5e08357 update cirrus-ci builds. 44a9891 msp policies stopped before root path.
2.32.114 Dec 2020 03:18 minor feature: Lots of cleanup. New policies: prfd, eppfrd, msppfrd. Per branch minfreespace. Replace fasthash with wyhash for inode calculation and other hashing. fasthash had on some platforms. Better error handling for certain functions. 8990e24 README.md: add details on per branch minfreespace. F6e37c5 README.md: add details about error handling. 0484442 wyhash: use safety mode 1. 5a31843 rework some function error handling. 610c75f properly return const ref from tofrom string wrapper. 73e8ed7 Delete _template.md. 0b1af2b Update _report.md. 767039c option_parser: return 0 when requesting help or version. Fc34539 branches: add per branch minfreespace w/ original value as default. 27bd39f README.md: typos. 6311df7 optionally use lchmod depending on if on Linux or not (BSD). 15fb751 README.md: add note indicating only tagged releases are supported. 0468440 add ,ep,msp pfrd policies. 8675fce add fedora builds to cirrus-ci. 7fd629e add #warning to make it more obvious what versions of functions are used. 2fe20b8 clean up and separate out fs_ files. 2696079 break fs.hpp up into separate files. Ec15872 cleanup function signatures and definitions. 6cc6524 change category to enum class. 7e17310 libfuse cleanup: add more header include guards. F488deb libfuse/Makefile: support CXXFLAGS and LDFLAGS passed via environment. 678626e Makefile: support CXXFLAGS and LDFLAGS passed via environment. 0bc6711 libfuse/Makefile: support AR. A925fbe libfuse cleanup: extern cplusplus cleanup. Dc1b698 libfuse cleanup: remove single threaded. 3c761b7 libfuse cleanup: remove libfuse API compatibility. 3bfdd78 libfuse cleanup: remove cuse. 5f12fb6 libfuse cleanup: remove unnecessary files. F9b831e libfuse cleanup: reindent. Badf7e1 README.md: add XMR address. 3b38262 README.md: update support section with Open Collective and LBC. 0371b04 change from fasthash64 to wyhash. 1fe32e9 : add fakeroot needed for building.
2.32.030 Nov 2020 11:05 minor feature: 7edd3c6 config: invalid error check when parsing config file. 1b26f49 general cleanup, slight memory reduction. C3fffef msp policies: used wrong path to check existence. 7e583e3 use relative option for rsync.
2.31.028 Sep 2020 11:05 minor feature: Inodecalc: new argument that allows controlling how inodes are calculated. Can help with NFS stale file handle errors. Nfsopenhack: new argument that helps working around with certain with NFS not being fully POSIX compatible when exporting mergerfs. New msp policies: "most shared path". Like ep path preserving policies but will walk back the directory tree till something is found. Readdirplus: when a readdir happens mergerfs can stat files at the same time. Similar to the NFS feature. Might improve directory listing performance depending on use case. Config file: Allows you to put config arguments in a "ini" like file (key=val) and reference that in the mount options. New runtime API based on ioctl (will be removing the xattr based API in mergerfs 3.0). Moveonenospc: now uses policies just like the regular filesystem functions providing more control over where the file goes. Building on FreeBSD. Reworked readdir code in general and a NFS readdir race condition that is in libfuse. Inodecalc algo that makes mergerfs work better with some 32bit software that doesn't handle 64bit inode values. Inodecalc algo that helps with changing files out of band problems when exporting mergerfs through NFS. Deb package building that broken mounting as non-root. Misc updates to docs. General code cleanup. Prep for mergerfs v3.0 (which will be a breaking change with regard to options). 30d13b7 inodecalc: add 32bit versions of hashs. 5989d41 readdir: use getdents64 for compatibility with ARM64. 1d2a1ba README.md: move kernel to wiki. E639f3d README.md: update faq regarding Plex and page caching. 173193d Update templates. 0709b2e add missing options to usage. 15a0aed cleanup: move some config data structures to separate files. 8afe72d README: change back to listing fuse.mergerfs for fstab fstype. A93bd9f freebsd: misc cleanups to get freebsd compiling. 139e61e nfsopenhack: remove empty file check. 93218a3 NFS open/creat hack. 3ec137c policy: add "most shared path" policies. 3a67384 ty
2.30.031 Jul 2020 06:25 minor feature: 5ce428c rework makefiles + install mount tools. A646fe0 change inode conversion algo to reduce collision. 576ff36 add cache.writeback to xattrs. Bf4b390 update fuse_kernel.h. 4b9f3de add ctime support. 903d39f add writeback caching. 9952c58 add links to ZFS comparison. 66f0d9e add faq entry on files ending up on 1 branch. 0f2f78c python 2.6. 489ab23 make git2debcl work on Python 2 3. 3897852 add README segment on benchmarking. F4b8efc more FAQs. 4625a3c typos and update FAQ regarding policy preference. 322fa57 update docs: openvz kernel and new support links. 5eb3c8c add github sponsor and subscribestar to funding. 5d82756 Create FUNDING.yml.
2.24.013 Mar 2018 01:25 minor feature: 1d6d227 call 32bit versions of set/geteuid on 32bit platforms. 821d1b6 rebuild manpage. Ebe737e up makefile. 9104f25 misc updates to docs. C1d85ef expand support section of readme. Cc1f07e add info on creating a caching behavior.
2.23.118 Oct 2017 19:25 minor feature: 75ed37a add setting of thread pool size. 8043829 threads. 0708110 improve khash performance. A7b126c use pragma once in headers. A2bddec add 'ignore path preserving on rename' feature. Aea2b40 use temp files (then rename) when moving files for moveonenospc.
2.23.004 Jul 2017 03:45 minor feature: 75ed37a add setting of thread pool size. 8043829 threads. 0708110 improve khash performance. A7b126c use pragma once in headers. A2bddec add 'ignore path preserving on rename' feature. Aea2b40 use temp files (then rename) when moving files for moveonenospc.
2.22.005 Jun 2017 07:45 minor feature: De0985c add libfuse 2.9.7 to repo and build against libfuse.a. 87c2f2f add nullrw feature to facilitate benchmarking.
2.21.008 May 2017 07:05 minor feature: Cf2cb54 add info on inodes running out to faq on filled drives. 94ebccc try to clarify how path preserving policies work and other tweaks to docs. 4e7e74d update docs to include dropcacheonand warn about directory mtime. 6aa62d0 add option to drop file caches before closing files. 492d895 check metadata on chown/chmod errors when cloning.
2.20.021 Mar 2017 03:25 minor feature: Cf2cb54 add info on inodes running out to faq on filled drives. 94ebccc try to clarify how path preserving policies work and other tweaks to docs. 4e7e74d update docs to include dropcacheonand warn about directory mtime. 6aa62d0 add option to drop file caches before closing files. 492d895 check metadata on chown/chmod errors when cloning.
2.19.002 Feb 2017 19:25 minor feature: 9cc9bb9 misc document updates. 16e7c72 update documentation, focus on explaining double caching direct_io. A60d815 add ifndefs to all headers. E93c946 limit need to explicitly call.c_str(). 7b4e1ea remove clone command. 726b88e restructure error calculation. D67d5de check for system.posix_acl_default before setting umask. 1aa76a5 use different read and write functions when using direct_io.
2.18.017 Dec 2016 18:45 minor feature: 67b48fc compute inode in readdir. B1459c6 only remove src/version.hpp if git repo and git available. C8fa51c support setting of inodes (using use_ino option). 822204f replace std::set with klib's khash to increase readdir performance. 5f7a168 note that mergerfs should be run as root. 35075bb return clonepath errors.
2.17.017 Nov 2016 15:05 minor feature: 05d81db update manpage. 3c5351a ignore filesystems which return zeros for statfs. 3d2283f clang cpp doesn't like grep exiting early. 192bb9c remove usage of -D from install. 157dae0 define O_LARGEFILE and O_NOATIME if needed. 00c814d consolidate and simplify utime. 6d6fb45 check if fdatasync is available and return ENOSYS if not. 897f20b minor correction of spelling mistake. D0b6cd1 further abstraction of system calls. 1dc7bff wrap most posix filesystem functions. 8f594e1 add flock. Cd90193 add some more explination to the FAQ. Cd71af8 add mergerfs.ctl and scorch to tooling section. 3fb7f89 add EDQUOT to errors which trigger moveonenospc.
2.16.120 Sep 2016 09:45 minor feature: Dfa8269 update manpage. D9a7906 use SYS_setgroup32 syscall if available. B1f2e94 add information about page cache kernel panic.
2.16.015 Sep 2016 10:45 minor feature: A8cd9b7 recreate manpage. 7e423cd small tweaks to build on Debian kFreeBSD. 0395e7c futimes version of utimes wrapper. 9392317 #define typo. 1513c92 abstract posix_fadvise. 158dda9 minor typo. 1a698e5 rename include cpp files to have icpp extension. 2ee6b4f include sys/types.h to pick up ssize_t. 709dda5 support systems without ENODATA.
2.15.026 Aug 2016 19:25 minor feature: 49474f0 make futimes crossplatform. 34d38cb split sendfile wrapper into separate files. 192a9d5 make fs_attr compile on unsupported platforms. 40574bd use dynamic buffer for realpath. 064fd55 bump FUSE_USE_VERSION to 29. 45f757d add osx version of fallocate. 0fceb8e add epall and eprand policies. 7634eb1 replace nonstandard eaccess with POSIX.1-2008 faccessat. 47f184a typo and clarify feature.
2.14.013 Jul 2016 00:45 minor feature: A93ab6c add existing path first found policy. 43cbd9c move size calculations to use uint64_t. 9f36ead add license title. 30cdfa6 reiterate path preserving policies.
2.13.120 May 2016 12:25 minor feature: 3a50344 update man page. Be6341e create eplus (existing path, least used space) policy. F7d3e8b create lus (least used space) policy. 74ed1b0 faq update on direct writes. D0414d7 clean up information regarding fstab. Ef8d8f3 add fsname to readme. Cd15b7a further tweak language regarding policies wrt create category. 8643d35 make policy descriptions more explicit. 1cfe1c3 tweak doc language. Dbb13ef add details of mmap cache. 90ca14a add dual mount suggestion to mmap problem. Cfaf812 add details regarding rtorrent, mmap, and direct_io. 0c6c69e update readme to include mergerfs.dedup. 309cfee change tar.gz build url.
2.13.008 May 2016 22:25 minor feature: 3a50344 update man page. Be6341e create eplus (existing path, least used space) policy. F7d3e8b create lus (least used space) policy. 74ed1b0 faq update on direct writes. D0414d7 clean up information regarding fstab. Ef8d8f3 add fsname to readme. Cd15b7a further tweak language regarding policies wrt create category. 8643d35 make policy descriptions more explicit. 1cfe1c3 tweak doc language. Dbb13ef add details of mmap cache. 90ca14a add dual mount suggestion to mmap problem. Cfaf812 add details regarding rtorrent, mmap, and direct_io. 0c6c69e update readme to include mergerfs.dedup. 309cfee change tar.gz build url.
2.12.207 Mar 2016 13:25 minor feature: 6492fda update precompiled man page. 2061211 rename failing on non-path preserving policies. 4928944 clarify that rename uses the create policy to make decisions.
2.12.003 Mar 2016 11:25 minor feature: F4a4cc5 building of platform specific deb packages. Ef4c583 printing of versions with no changes. 4ecf3c5 clearly separate usage of statvfs from stat for file existance. 779143f add minfreespace checks to policy ff's create and remove fwfs. 4d7148c update readme with minfreespace and readonly details. 14886a2 add readonly and minfreespace filters to all policy for creates. 9819cf6 clonepath being called on wrong source. C56b488 creation of changelog. E593927 normalize error handling in rename policy. 7c85cd9 ff policy tweaks. 5cf3bb7 override standard libfuse version flag. 25a0399 minor tweaks to filesystem utility functions. 792c9b9 use stat/2 rather than statvfs/2 to find file drive.
2.11.023 Feb 2016 14:25 minor feature: A698a8a update / tweak readme. D4ec341 remove unnecessary policies. 5813d1e ignore drives mounted as readonly from create policies. A4e60d7 add eplfs info to readme.
2.9.022 Jan 2016 09:45 minor feature: 3e20adb remove clone test tool. E285bde update the precompiled man page. 853769b general tweaks to readme. Ea32575 make symlink function like mknod/mkdir. 1d1694b indexing of mknod targets. 93397ea remove incorrect warning about race condition with mkdir/mknod. 25265f4 dedup based on full statvfs struct rather than fsid. De776b7 remove tooling from repo. 62f8fc5 have link act similar to rename. 242af77 move from MIT to ISC license. 4c77ac4 all action functions return success should at least one succeed. B811522 update man page. 8a5c524 replace srcpoints with srcmounts. A3e6a03 rework rename algo to minimize likelihood of EXDEV being returned. Eb6d1a1 change to using template for policy class. 55c4a32 add artifacts to gitignore. 51ae7d1 change make to work with non-bash shells. C731b70 building without xattr. 9e24796 add mergerfs pid to xattrs.
2.8.031 Oct 2015 22:25 minor feature: 5e880bd use SYS_setgroups rather than setgroups. 8a651b0 add support section to readme and manpage. 93cedab misc flagged by clang scan-build. Fd4ce1b include distro and codename in deb package versions.
2.7.020 Oct 2015 11:45 minor feature: F3a6876 remove pandoc from build requirements. 30c29c9 remove manpage from root directory. 8ed11a0 if pandoc doesn't exist copy premade version. 46c8361 offer prebuilt manpage for platforms without easy access to pandoc. 02df441 update info on Samba client EXDEV. Fe79609 typo. 873c4a9 add link to gvfs-fuse patch. 4df9b2e add documentation on SMB client EXDEV / EIO. 1c7de2d minor integer casting. A10de2a update build dependencies for Fedora. 3d7d2cf add sbin directory to rpm spec. 5489952 enhance git2debcl to work with older python releases. 068fbc0 set rpm dependency to fuse. 5a76c41 create mount.mergerfs symlink. 58446f9 misc to compile on older platforms. 40f569b rewrite gid cache system. F6d396c audit (and ) file permissions and ownership. 53e3284 remove usage of UINT32_MAX macro. 09ffc8c provide usage text and version info.
2.6.028 Sep 2015 01:25 minor feature: swap deb and unsigned-deb make tagets. move on enospc when writing feature. make note about escaping glob tokens more explicit. include rpm-build in Fedora dependencies. include link to release page in readme. clean up options listing. create summary feature section.
2.5.015 Sep 2015 18:45 minor feature: Ce93529 realpath'ize all source mount points. 2d89947 non-sufsetxattr of user.mergerfs.minfreespace. E98b801 remove version.hpp on clean. B22528b add user.mergerfs.version xattr. E377d54 add user.mergerfs.policies xattr. 08d07b7 add building of rpm. 305f190 add basic instructions for building on Fedora. 8178bf5 refactor and simplify getxattr for user.mergerfs.*.
2.4.008 Sep 2015 09:25 minor feature: Ce93529 realpath'ize all source mount points. 2d89947 non-sufsetxattr of user.mergerfs.minfreespace. E98b801 remove version.hpp on clean. B22528b add user.mergerfs.version xattr. E377d54 add user.mergerfs.policies xattr. 08d07b7 add building of rpm. 305f190 add basic instructions for building on Fedora. 8178bf5 refactor and simplify getxattr for user.mergerfs.*.
2.3.004 Sep 2015 03:05 minor feature: Use correct variable for finding version. Add minfreespace check to epmfs create policy. Rework rename. Forgot to add EINVAL to policy. Create errno policies for simulating errors. epmfs failing to pick the existing path. Enhance deb building. Format README better for man pages.
2.2.007 Aug 2015 00:45 minor feature: Update README regarding options. Remove unused variable. Move requesting of FUSE flags to init from cli args. Config get and struct naming cleanup. Passthrough ioctl args without processing. Use gte rather than gt for mtime comparisons.
2.1.217 Jul 2015 12:45 minor feature: 80b2c35 add creation of full path for open. 983fa91 change fuse functions to use the fuse namespace. e5359eb remove unused readdir function. f00cd14 use pthread_getugid_np instead of gete u,g id on OSX.
2.1.009 Jul 2015 23:45 major feature: Add str to size_t conversion code. Add minfreespace to xattr interface. Add info on lfs and fwfs policies and minfreespace option. Rework category - fuse function table. Stop auto calculating and storing fullpath in policies. Create different policies based on category of use. Add category to policies so as to distinguish between creates and searches. Separate policies into individual modules. Move policy function type from fs to policy. Move Path object to separate file. Create lfs policy. First w/ free space policy. Create minfreespace option.
2.0.108 Jun 2015 12:05 minor bugfix: Fix readme typos and misc formatting. Add Tips and FAQ section to readme. Update readme with defaults option info. Fix calling of lgetxattr.
1.7.118 Feb 2015 03:45 minor feature: 283a2b2 Try RLIMIT_INFINITY first, then cur = max, then loop and try to increase till error. closes #50 1a1c9db close file after getting ioc flags. closes #48
1.7.008 Feb 2015 03:15 minor feature: d30cae2 add user.mergerfs.allpaths and user.mergerfs.relpath to getxattr 2e95c6e merge action and search category b411c63 Remove 'all' policy and simplify logic 1f90203 use standard platform macros. closes #43 c2cbb93 elevate privileges when calling clonepath. closes #41 6276ce9 handle EEXIST while cloning a path. closes #40 d1f3bd8 add clonepath tool 031b87f slight refactoring 5dd0729 remove longest common prefix from fsname. closes #38
1.6.014 Nov 2014 03:45 major bugfix: Bugfix to pass constant strings by reference. Provide stat to readdir filler. Support for support RHEL6 added.