Despite the changelog not seeming too large there was a lot of internal reorganization and cleanup in preparation for these and future features. I tried to test the release to ensure no bugs or backwards compatibility issues (outside of some changes to some default values) but given the diversity and quantity of changes I could have missed something. Please submit a ticket if you find any problems: https://trapexit.github.io/mergerfs/latest/support/
Major Changes and New Features
- IO passthrough - Near native read/write performance (on supported Linux versions, read docs for limitations.)
- IO priority proxying - When performing file IO use the same IO priority as the requesting app.
- create policy default changed from
epmfstopfrd. - Full rework of documentation: https://trapexit.github.io/mergerfs/
- Updated default inode calculation to make it more stable across reboots.
- Improved secondary group cache which will expire over time and can be cleared as needed.
nofailmount argument passthrough- mergerfs will now set its
oom_score_adjvalue to reduce likelihood of being killed by OOM killer. - statx support (allows for btime to be queried)
Other Changes
- Lots of internal improvements and restructuring.
- Addition of fsck.mergerfs and mergerfs.collect-info tools.
- Enable auto mmap enablement when using cache.files=off (not relevant when io passthrough is used)
- Support for more than 256 page sized FUSE messages (not relevant when io passthrough is used)
- Ability to wait for branches to mount
- Improved config / option management allowing FUSE and mount options to be placed in a config file.
- Changes which improve performance when using xattrs and cache.files!=off (not relevant when io passthrough is used)
- More logging and details to syslog (available via
journalctl -t mergerfswhere used)
Full Git Log
- Suggest cache.files=auto-full rather than partial by @trapexit in #1320
- Add support for 'direct-io-allow-mmap' if supported by kernel by @trapexit in #1321
- Update README.md by @techie2000 in #1342
- Add missing --relative flag to rsync in percent-full mover script by @grunthos503 in #1346
- Add FAQ entry on 'move' and 'copy' by @trapexit in #1377
- add mkdocs first draft by @oregonpillow in #1382
- Rework mkdocs based documentation by @trapexit in #1386
- Fix pip install in mkdocs workflow by @trapexit in #1387
- Update README to point to docs, update project comparisons by @trapexit in #1388
- Update funding and cirrus builds by @trapexit in #1389
- Add tiered cache details to docs by @trapexit in #1390
- Move fuse.c and fuse_lowlevel.c to C++ by @trapexit in #1391
- Send invalidate node request outside lock by @trapexit in #1392
- fix edit uri by @oregonpillow in #1395
- Improve FreeBSD compatibility by @trapexit in #1398
- Readability changes to mkdocs installation by @oregonpillow in #1399
- Doc and mover script updates by @trapexit in #1402
- Misc doc updates by @trapexit in #1407
- Add details about user namespacing and root squashing by @trapexit in #1408
- Add details about logging to syslog by @trapexit in #1409
- Rework questions on what settings and policies to use by @trapexit in #1412
- Update quickstart.md by @theHenMan in #1413
- Update terminology.md by @theHenMan in #1414
- Update docs on out-of-band usage by @trapexit in #1415
- Add FAQ section on common perceived problems by @trapexit in #1416
- Add FAQ entry regarding inotify by @trapexit in #1423
- Misc doc updates by @trapexit in #1425
- Misc doc updates by @trapexit in #1426
- Update docs on default create policy by @trapexit in #1429
- Add links to options docs page to individual pages by @trapexit in #1431
- Support Linux v6.13 FUSE max_page_limit by @trapexit in #1433
- Change misc defaults by @trapexit in #1434
- Replace usage of wyhash with rapidhash by @trapexit in #1435
- Update docs regarding error handling by @trapexit in #1438
- Add statx support by @trapexit in #1439
- Add doc pages for minfreespace and moveonenospc + other misc updates by @trapexit in #1441
- Change the "devino" inode calculation by @trapexit in #1443
- Add FAQ entry regarding OS support by @trapexit in #1444
- Misc doc updates + add logo by @trapexit in #1445
- Improve mount waiting + misc doc improvements by @trapexit in #1447
- Add config option to control default_permissions by @trapexit in #1448
- Fixed a minor typo by @Solipsistmonkey in #1450
- Rework thread pool for increased stability + config and doc updates by @trapexit in #1453
- Add podman release build tooling + misc build fixes by @trapexit in #1455
- Update installation.md for SUSE by @gizak in #1449
- Add versioning to docs using 'mike' by @trapexit in #1456
- Add details to docs about FreeBSD limitations by @trapexit in #1457
- Update README.md to fix link by @trapexit in #1464
- Rework policies to return branches rather than path strings by @trapexit in #1466
- Fix incorrect dyn cast by @trapexit in #1467
- Add debugging of mutexes by @trapexit in #1470
- Add support for FUSE passthrough by @trapexit in #1472
- Misc cleanup by @trapexit in #1473
- Spawn "mount" on branches when waiting for mounts enabled by @trapexit in #1476
- Misc doc updates by @trapexit in #1477
- Add RHEL/CentOS 10 build support by @trapexit in #1479
- Add fsck.mergerfs tool by @trapexit in #1483
- Set default read thread count to 0 by @trapexit in #1484
- Remove linux only getdents in favor of readdir for FreeBSD sake by @trapexit in #1485
- Misc cleanup by @trapexit in #1486
- Rework movefile and cow break to use copyfile by @trapexit in #1488
- Misc documentation changes by @trapexit in #1489
- Add mergerfs.collect-info by @trapexit in #1491
- Update the secondary group cache by @trapexit in #1492
- Ensure passthrough and keep_cache are mutually exclusive by @trapexit in #1493
- Clear O_NOFOLLOW when opening a relative fd by @trapexit in #1494
- Rework of runtime interface by @trapexit in #1498
- Move everything to negative errno return types by @trapexit in #1499
- Cleanup copy functions by @trapexit in #1500
- Build improvements by @trapexit in #1501
- More makefile tweaks, build log, smaller git clones by @trapexit in #1503
- Add setting of oom_score_adj by @trapexit in #1504
- Misc documentation updates by @trapexit in #1505
- Add Debian 13 build targets by @trapexit in #1506
- Rework calculation of branch for release make targets by @trapexit in #1507
- Fix constructing string from attrval setxattr config by @trapexit in #1508
- Allow empty lines in config ini files by @Max-F-Helm in #1509
- Updates to docs, add nonraid, more intro to fs details by @trapexit in #1512
- Misc changes by @trapexit in #1513
- Fix string manipulation functions after refactor by @trapexit in #1514
- Update readme to match index of mkdocs by @trapexit in #1515
- More build process updates by @trapexit in #1516
- Misc updates of docs by @trapexit in #1518
- Add Ubuntu 25.04 builds by @trapexit in #1519
- Revert removal of readdir init setup, simplify cfg usage by @trapexit in #1520
- Use std::filesystem::path for fusepath by @trapexit in #1522
- idmap mount support by @trapexit in #1523
- Misc docs updates by @trapexit in #1524
- Fix broken doc links by @trapexit in #1525
- Update moveonenospc.md by @pjv in #1527
- Add script to generate docs from scratch and push to github by @trapexit in #1530
- Misc doc updates by @trapexit in #1531
- Fix typo in visualization and add new vid to docs by @trapexit in #1532
- Add getdents based readdir functions for Linux by @trapexit in #1533
- Add ability to proxy ioprio of client apps by @trapexit in #1534
- Remove need for and use of ioprio header by @trapexit in #1535
- Misc fixes, mostly for FreeBSD by @trapexit in #1536
- Misc build fixes by @trapexit in #1537
- Fix dirent64::namelen calculation by @trapexit in #1538
- Fix rename path generation by @trapexit in #1540
- Make allow-idmap optional (default: false) by @trapexit in #1541
- Allow setting of passthrough max-stack-depth by @trapexit in #1542
- Rework how fuse request context is handled by @trapexit in #1543
- Misc docs updates by @trapexit in #1544
- Rework config, centralize fuse config by @trapexit in #1547
- Misc docs updates by @trapexit in #1549
- Fix lack of include for fmt by @trapexit in #1550
- Config options docs updates by @trapexit in #1551
- Update fuse-msg-size docs by @trapexit in #1552
- Fix variable names of fuse-msg-size and posix-acl by @trapexit in #1553
- Misc updates to arg parsing by @trapexit in #1554
- Fix manpage links for 2.41.0-rc3 by @satmandu in #1555
- Add more debugging options to makefiles and cleanup by @trapexit in #1556
- Mention how mmap error when direct io is enabled by @trapexit in #1557
- Further tweaks to config parsing and error reporting by @trapexit in #1559
- Improve mergerfs intro in docs by @trapexit in #1563
- Ensure backward compatibility with remember & noforget by @trapexit in #1566
- Add ability to passthrough 'nofail' mount option by @trapexit in #1567
- Add container image building by @trapexit in #1568
- Add container image details by @trapexit in #1569
New Contributors
- @techie2000 made their first contribution in #1342
- @oregonpillow made their first contribution in #1382
- @theHenMan made their first contribution in #1413
- @Solipsistmonkey made their first contribution in #1450
- @gizak made their first contribution in #1449
- @Max-F-Helm made their first contribution in #1509
- @pjv made their first contribution in #1527
- @satmandu made their first contribution in #1555
Full Changelog: 2.40.2...2.41.0