mergerfs/latest/project_comparisons/index.html

3516 lines
No EOL
79 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="mergerfs - a featureful union filesystem">
<link rel="canonical" href="https://trapexit.github.io/mergerfs/latest/project_comparisons/">
<link rel="prev" href="../known_issues_bugs/">
<link rel="next" href="../benchmarking/">
<link rel="icon" href="../logo.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
<title>Project Comparisons - mergerfs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#project-comparisons" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="mergerfs" class="md-header__button md-logo" aria-label="mergerfs" data-md-component="logo">
<img src="../logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
mergerfs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Project Comparisons
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<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>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
mergerfs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="mergerfs" class="md-nav__button md-logo" aria-label="mergerfs" data-md-component="logo">
<img src="../logo.png" alt="logo">
</a>
mergerfs
</label>
<div class="md-nav__source">
<a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
mergerfs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../quickstart/" class="md-nav__link">
<span class="md-ellipsis">
QuickStart
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../setup/installation/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../setup/upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../setup/build/" class="md-nav__link">
<span class="md-ellipsis">
Build
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../terminology/" class="md-nav__link">
<span class="md-ellipsis">
Terminology
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../intro_to_filesystems/" class="md-nav__link">
<span class="md-ellipsis">
Intro to Filesystems
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Config
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Config
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../config/options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/deprecated_options/" class="md-nav__link">
<span class="md-ellipsis">
Deprecated Options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/branches/" class="md-nav__link">
<span class="md-ellipsis">
branches
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/branches-mount-timeout/" class="md-nav__link">
<span class="md-ellipsis">
branches-mount-timeout
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/functions_categories_policies/" class="md-nav__link">
<span class="md-ellipsis">
functions, categories and policies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/minfreespace/" class="md-nav__link">
<span class="md-ellipsis">
minfreespace
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/func_readdir/" class="md-nav__link">
<span class="md-ellipsis">
func.readdir
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/rename_and_link/" class="md-nav__link">
<span class="md-ellipsis">
rename and link
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/moveonenospc/" class="md-nav__link">
<span class="md-ellipsis">
moveonenospc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/cache/" class="md-nav__link">
<span class="md-ellipsis">
caching
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/passthrough/" class="md-nav__link">
<span class="md-ellipsis">
passthrough.io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/readahead/" class="md-nav__link">
<span class="md-ellipsis">
readahead
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/inodecalc/" class="md-nav__link">
<span class="md-ellipsis">
inodecalc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/threads/" class="md-nav__link">
<span class="md-ellipsis">
threads
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/pin-threads/" class="md-nav__link">
<span class="md-ellipsis">
pin-threads
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/proxy-ioprio/" class="md-nav__link">
<span class="md-ellipsis">
proxy-ioprio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/link-cow/" class="md-nav__link">
<span class="md-ellipsis">
link-cow
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/fuse-msg-size/" class="md-nav__link">
<span class="md-ellipsis">
fuse-msg-size
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/follow-symlinks/" class="md-nav__link">
<span class="md-ellipsis">
follow-symlinks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/link-exdev/" class="md-nav__link">
<span class="md-ellipsis">
link-exdev
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/rename-exdev/" class="md-nav__link">
<span class="md-ellipsis">
rename-exdev
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/symlinkify/" class="md-nav__link">
<span class="md-ellipsis">
symlinkify
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/nullrw/" class="md-nav__link">
<span class="md-ellipsis">
nullrw
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/xattr/" class="md-nav__link">
<span class="md-ellipsis">
xattr
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/nfsopenhack/" class="md-nav__link">
<span class="md-ellipsis">
nfsopenhack
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/statfs/" class="md-nav__link">
<span class="md-ellipsis">
statfs / statvfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/flush-on-close/" class="md-nav__link">
<span class="md-ellipsis">
flush-on-close
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/export-support/" class="md-nav__link">
<span class="md-ellipsis">
export-support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/kernel-permissions-check/" class="md-nav__link">
<span class="md-ellipsis">
kernel-permissions-check
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../config/lazy-umount-mountpoint/" class="md-nav__link">
<span class="md-ellipsis">
lazy-umount-mountpoint
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../error_handling_and_logging/" class="md-nav__link">
<span class="md-ellipsis">
Error Handling and Logging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../resource_usage/" class="md-nav__link">
<span class="md-ellipsis">
Resource Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../runtime_interface/" class="md-nav__link">
<span class="md-ellipsis">
Runtime Interface
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../remote_filesystems/" class="md-nav__link">
<span class="md-ellipsis">
Remote Filesystems
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tips_notes/" class="md-nav__link">
<span class="md-ellipsis">
Tips and Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../known_issues_bugs/" class="md-nav__link">
<span class="md-ellipsis">
Known Issues and Bugs
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<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">
Project Comparisons
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Project Comparisons
</span>
</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="#mhddfs" class="md-nav__link">
<span class="md-ellipsis">
mhddfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#aufs" class="md-nav__link">
<span class="md-ellipsis">
aufs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unionfs" class="md-nav__link">
<span class="md-ellipsis">
unionfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unionfs-fuse" class="md-nav__link">
<span class="md-ellipsis">
unionfs-fuse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#overlayfs" class="md-nav__link">
<span class="md-ellipsis">
overlayfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fuse-overlayfs" class="md-nav__link">
<span class="md-ellipsis">
fuse-overlayfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#raid0-jbod-span-drive-concatenation-striping" class="md-nav__link">
<span class="md-ellipsis">
RAID0, JBOD, SPAN, drive concatenation, striping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#raid5-raid6" class="md-nav__link">
<span class="md-ellipsis">
RAID5, RAID6
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lvm" class="md-nav__link">
<span class="md-ellipsis">
LVM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mdadm" class="md-nav__link">
<span class="md-ellipsis">
mdadm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#device-mapper" class="md-nav__link">
<span class="md-ellipsis">
device mapper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unraid" class="md-nav__link">
<span class="md-ellipsis">
Unraid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nonraid" class="md-nav__link">
<span class="md-ellipsis">
NonRAID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zfs" class="md-nav__link">
<span class="md-ellipsis">
ZFS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zfs-anyraid" class="md-nav__link">
<span class="md-ellipsis">
ZFS AnyRAID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bcachefs" class="md-nav__link">
<span class="md-ellipsis">
bcachefs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#btrfs-multi-device-filesystems" class="md-nav__link">
<span class="md-ellipsis">
Btrfs multi-device filesystems
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#stablebits-drivepool" class="md-nav__link">
<span class="md-ellipsis">
StableBit's DrivePool
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#windows-storage-spaces" class="md-nav__link">
<span class="md-ellipsis">
Windows Storage Spaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plan-9-binds" class="md-nav__link">
<span class="md-ellipsis">
Plan 9 binds
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#9p" class="md-nav__link">
<span class="md-ellipsis">
9P
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#snapraid-pooling" class="md-nav__link">
<span class="md-ellipsis">
SnapRAID pooling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rclone-union" class="md-nav__link">
<span class="md-ellipsis">
rclone union
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#distributed-filesystems" class="md-nav__link">
<span class="md-ellipsis">
distributed filesystems
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nofs" class="md-nav__link">
<span class="md-ellipsis">
nofs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#policyfs" class="md-nav__link">
<span class="md-ellipsis">
PolicyFS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#greyhole" class="md-nav__link">
<span class="md-ellipsis">
Greyhole
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../benchmarking/" class="md-nav__link">
<span class="md-ellipsis">
Benchmarking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tooling/" class="md-nav__link">
<span class="md-ellipsis">
Tooling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../extended_usage_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Extended Usage Patterns
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_18" >
<label class="md-nav__link" for="__nav_18" id="__nav_18_label" tabindex="0">
<span class="md-ellipsis">
FAQ
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_18">
<span class="md-nav__icon md-icon"></span>
FAQ
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../faq/why_isnt_it_working/" class="md-nav__link">
<span class="md-ellipsis">
"Why isn't it working?"
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/configuration_and_policies/" class="md-nav__link">
<span class="md-ellipsis">
Configuration and Policies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/usage_and_functionality/" class="md-nav__link">
<span class="md-ellipsis">
Usage and Functionality
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/reliability_and_scalability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability and Scalability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/compatibility_and_integration/" class="md-nav__link">
<span class="md-ellipsis">
Compatibility and Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/technical_behavior_and_limitations/" class="md-nav__link">
<span class="md-ellipsis">
Technical Behavior and Limitations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/have_you_considered/" class="md-nav__link">
<span class="md-ellipsis">
"Have You Considered?"
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/downsides/" class="md-nav__link">
<span class="md-ellipsis">
Downsides
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/limit_drive_spinup/" class="md-nav__link">
<span class="md-ellipsis">
Limiting drive spinup
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../related_projects/" class="md-nav__link">
<span class="md-ellipsis">
Related Projects
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../media_and_publicity/" class="md-nav__link">
<span class="md-ellipsis">
Media and Publicity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../support/" class="md-nav__link">
<span class="md-ellipsis">
Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sponsorship_and_donations/" class="md-nav__link">
<span class="md-ellipsis">
Sponsorship and Donations
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<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="#mhddfs" class="md-nav__link">
<span class="md-ellipsis">
mhddfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#aufs" class="md-nav__link">
<span class="md-ellipsis">
aufs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unionfs" class="md-nav__link">
<span class="md-ellipsis">
unionfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unionfs-fuse" class="md-nav__link">
<span class="md-ellipsis">
unionfs-fuse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#overlayfs" class="md-nav__link">
<span class="md-ellipsis">
overlayfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fuse-overlayfs" class="md-nav__link">
<span class="md-ellipsis">
fuse-overlayfs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#raid0-jbod-span-drive-concatenation-striping" class="md-nav__link">
<span class="md-ellipsis">
RAID0, JBOD, SPAN, drive concatenation, striping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#raid5-raid6" class="md-nav__link">
<span class="md-ellipsis">
RAID5, RAID6
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lvm" class="md-nav__link">
<span class="md-ellipsis">
LVM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mdadm" class="md-nav__link">
<span class="md-ellipsis">
mdadm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#device-mapper" class="md-nav__link">
<span class="md-ellipsis">
device mapper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unraid" class="md-nav__link">
<span class="md-ellipsis">
Unraid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nonraid" class="md-nav__link">
<span class="md-ellipsis">
NonRAID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zfs" class="md-nav__link">
<span class="md-ellipsis">
ZFS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zfs-anyraid" class="md-nav__link">
<span class="md-ellipsis">
ZFS AnyRAID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bcachefs" class="md-nav__link">
<span class="md-ellipsis">
bcachefs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#btrfs-multi-device-filesystems" class="md-nav__link">
<span class="md-ellipsis">
Btrfs multi-device filesystems
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#stablebits-drivepool" class="md-nav__link">
<span class="md-ellipsis">
StableBit's DrivePool
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#windows-storage-spaces" class="md-nav__link">
<span class="md-ellipsis">
Windows Storage Spaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plan-9-binds" class="md-nav__link">
<span class="md-ellipsis">
Plan 9 binds
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#9p" class="md-nav__link">
<span class="md-ellipsis">
9P
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#snapraid-pooling" class="md-nav__link">
<span class="md-ellipsis">
SnapRAID pooling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rclone-union" class="md-nav__link">
<span class="md-ellipsis">
rclone union
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#distributed-filesystems" class="md-nav__link">
<span class="md-ellipsis">
distributed filesystems
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nofs" class="md-nav__link">
<span class="md-ellipsis">
nofs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#policyfs" class="md-nav__link">
<span class="md-ellipsis">
PolicyFS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#greyhole" class="md-nav__link">
<span class="md-ellipsis">
Greyhole
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/trapexit/mergerfs/edit/master/mkdocs/docs/project_comparisons.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<a href="https://github.com/trapexit/mergerfs/raw/master/mkdocs/docs/project_comparisons.md" title="View source of this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
</a>
<h1 id="project-comparisons">Project Comparisons</h1>
<p>There are no solutions, only trade-offs.</p>
<p>This page includes both direct pooling alternatives and adjacent storage
technologies that solve different problems. Compare their operating layer,
failure domain, redundancy model, and platform requirements rather than only
their apparent pool capacity.</p>
<h2 id="mhddfs">mhddfs</h2>
<ul>
<li><a href="https://romanrm.net/mhddfs">https://romanrm.net/mhddfs</a></li>
</ul>
<p>mhddfs is, like mergerfs, a FUSE-based filesystem which can pool
multiple filesystems together.</p>
<p>mhddfs had not been updated in over a decade and has known stability
and security issues. mergerfs provides a superset of mhddfs' features
and offers better performance. As of 2020, the author of mhddfs has
<a href="https://romanrm.net/mhddfs#update">moved to using mergerfs.</a></p>
<ul>
<li><strong>Better than mergerfs for:</strong> Nothing?</li>
<li><strong>Worse than mergerfs for:</strong> most modern deployments due to maintenance
status, feature coverage, and reliability.</li>
</ul>
<p>Below is an example of mhddfs and mergerfs set up to behave similarly.
mhddfs falls back to the drive with the most free space when every drive
has less than <code>mlimit</code> free; mergerfs with
<a href="../config/minfreespace/">minfreespace</a> filters those branches instead and
may fail the create if none qualify.</p>
<div class="language-sh highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>mhddfs<span class="w"> </span>-o<span class="w"> </span><span class="nv">mlimit</span><span class="o">=</span>4G,allow_other<span class="w"> </span>/mnt/hdd/disk0,/mnt/hdd/disk1<span class="w"> </span>/mnt/pool
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>mergerfs<span class="w"> </span>-o<span class="w"> </span><span class="nv">minfreespace</span><span class="o">=</span>4G,category.create<span class="o">=</span>ff<span class="w"> </span>/mnt/hdd/disk0:/mnt/hdd/disk1<span class="w"> </span>/mnt/pool
</span></code></pre></div>
<h2 id="aufs">aufs</h2>
<ul>
<li><a href="https://aufs.sourceforge.net">https://aufs.sourceforge.net</a></li>
<li><a href="https://en.wikipedia.org/wiki/Aufs">https://en.wikipedia.org/wiki/Aufs</a></li>
</ul>
<p>aufs, another union filesystem, is a kernel-based overlay filesystem
with basic file creation placement policies.</p>
<p>Compared with mergerfs, aufs focuses on kernel-level overlay and
copy-on-write behavior, while mergerfs focuses on userspace pooling of
existing filesystems with richer branch placement policies.</p>
<p>aufs failed to be included in the mainline kernel and is no longer
available in most Linux distros, making it harder to get installed for
the average user. Development has been largely dormant for years.</p>
<p>While aufs can often offer better peak performance due to being
primarily kernel-based (at least when
<a href="../config/passthrough/">passthrough.io</a> is disabled in mergerfs),
mergerfs provides more configurability and is generally easier to use.
mergerfs, however, does not offer the overlay / copy-on-write (CoW)
features which aufs has.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> kernel-level overlay/CoW workloads where
that behavior is required.</li>
<li><strong>Worse than mergerfs for:</strong> users needing a widely packaged,
actively-maintained, easy-to-deploy pooling solution.</li>
</ul>
<h2 id="unionfs">unionfs</h2>
<ul>
<li><a href="https://unionfs.filesystems.org">https://unionfs.filesystems.org</a></li>
</ul>
<p>unionfs for Linux is a "stackable unification file system" which
functions like many other union filesystems. It was last released for
Linux v3.14 back in 2014.</p>
<p>Compared with mergerfs, unionfs is an older kernel union filesystem
implementation while mergerfs is a modern, actively-maintained
FUSE-based pooling filesystem with broader policy controls.</p>
<p>Documentation is sparse so a comparison of features is not possible
but given the lack of maintenance and support for modern kernels there
is little reason to consider it as a solution.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> historical or legacy environments that
already depend on this specific kernel unionfs behavior.</li>
<li><strong>Worse than mergerfs for:</strong> practical modern deployments due to
limited maintenance, aging kernel support, and sparse documentation.</li>
</ul>
<h2 id="unionfs-fuse">unionfs-fuse</h2>
<ul>
<li><a href="https://github.com/rpodgorny/unionfs-fuse">https://github.com/rpodgorny/unionfs-fuse</a></li>
</ul>
<p>unionfs-fuse is a FUSE-based union filesystem focused on overlay
behavior, including copy-on-write (CoW) style layering of writable
content over read-only content.</p>
<p>Compared with mergerfs, unionfs-fuse's primary feature is
overlay/CoW-style layering, while mergerfs' primary feature is
policy-based pooling and placement across multiple regular writable
filesystems.</p>
<p>As a FUSE filesystem, unionfs-fuse can often be mounted by an
unprivileged user when the system's FUSE configuration permits it. Kernel
solutions such as unionfs, aufs, and overlayfs normally require additional
privileges.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> overlay-style unions with copy-on-write
semantics in userspace.</li>
<li><strong>Worse than mergerfs for:</strong> flexible create-policy-based pooling of
many writable filesystems.</li>
</ul>
<h2 id="overlayfs">overlayfs</h2>
<ul>
<li><a href="https://docs.kernel.org/filesystems/overlayfs.html">https://docs.kernel.org/filesystems/overlayfs.html</a></li>
</ul>
<p>overlayfs is effectively the successor to unionfs, unionfs-fuse, and
aufs and is widely used by Linux container platforms such as Docker and
Podman. Both overlayfs and FUSE were originally created by Miklos
Szeredi.</p>
<p>If your use case is layering a writable filesystem on top of read-only
filesystems then you should look first to overlayfs. Its feature set
however is very different from mergerfs and solves different problems.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> container and image-layering workflows
where copy-on-write semantics are central.</li>
<li><strong>Worse than mergerfs for:</strong> heterogeneous pooling use cases that need
flexible branch selection policies across many existing filesystems.</li>
</ul>
<h2 id="fuse-overlayfs">fuse-overlayfs</h2>
<ul>
<li><a href="https://github.com/containers/fuse-overlayfs">https://github.com/containers/fuse-overlayfs</a></li>
</ul>
<p>fuse-overlayfs implements overlayfs-style lower, upper, and work directories
in userspace. Its primary use case is rootless containers, where a kernel
overlayfs mount may not be available.</p>
<p>Like unionfs-fuse and kernel overlayfs, it provides layering and copy-up
semantics rather than mergerfs-style placement across a pool of writable
filesystems.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> rootless container and other unprivileged
overlay workloads.</li>
<li><strong>Worse than mergerfs for:</strong> general storage pooling across independent
writable filesystems.</li>
</ul>
<h2 id="raid0-jbod-span-drive-concatenation-striping">RAID0, JBOD, SPAN, drive concatenation, striping</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0">RAID0</a></li>
<li><a href="https://en.wikipedia.org/wiki/Non-RAID_drive_architectures#JBOD">JBOD</a></li>
<li><a href="https://en.wikipedia.org/wiki/Non-RAID_drive_architectures#Concatenation_(SPAN,_BIG)">SPAN</a></li>
<li><a href="https://en.wikipedia.org/wiki/Data_striping">striping</a></li>
</ul>
<p>"JBOD" is ambiguous: it can also mean disks exposed independently with
no aggregation. In this section it refers only to concatenated or spanned
layouts.</p>
<p>These are block device technologies which, in some form, aggregate
devices into what appears to be a single device on which a traditional
filesystem can be used. The filesystem has no understanding of the
underlying block layout and, should one of those underlying devices
fail or be removed, the filesystem will be missing that chunk, which
could contain critical information, and the whole filesystem may
become unrecoverable. Even if the data from the filesystem is
recoverable, doing so may require specialized tooling.</p>
<p>In contrast, with mergerfs you can format devices as you normally
would, or take existing filesystems and combine them in a pool to
aggregate their storage. The failure of any one device will have no
impact on the other devices. The downside to mergerfs' approach is
that you do not actually have contiguous space as large as you would
with those other technologies. That means you cannot create a file
larger than 1TB on a pool of two 1TB filesystems.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> creating one contiguous block device and
maximizing single-file size/performance characteristics.</li>
<li><strong>Worse than mergerfs for:</strong> failure isolation and straightforward
per-disk recovery when a device dies.</li>
</ul>
<h2 id="raid5-raid6">RAID5, RAID6</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5">RAID5</a></li>
<li><a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6">RAID6</a></li>
</ul>
<p>RAID5, RAID6, and similar technologies aggregate multiple devices at
the block level and provide one or more live parity schemes that can
allow the pool to continue to run should one device fail and rebuild
the data once the device is replaced.</p>
<p>mergerfs offers no parity or redundancy features so in that regard the
technologies are not comparable. <a href="https://www.snapraid.it">SnapRAID</a> or
NonRAID (see <a href="#nonraid">below</a>) can be used in combination with mergerfs
to provide redundancy. Unlike traditional RAID5 or RAID6, SnapRAID works
with drives of different sizes and can have more than 2 parity drives.
Parity calculations with SnapRAID are not done in real-time but
NonRAID's are.</p>
<p>For more details and comparison of SnapRAID to related technologies
see <a href="https://www.snapraid.it/compare">https://www.snapraid.it/compare</a>.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> live parity protection and continued array
operation through configured disk failures.</li>
<li><strong>Worse than mergerfs for:</strong> incremental mixed-size pooling with simple
per-filesystem independence.</li>
</ul>
<h2 id="lvm">LVM</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)">https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)</a></li>
<li><a href="https://sourceware.org/lvm2">https://sourceware.org/lvm2</a></li>
</ul>
<p>LVM is a block-level volume management system for Linux. It combines
physical devices into volume groups and creates logical volumes on top,
with features like snapshots, resizing, and thin provisioning.</p>
<p>Compared with mergerfs, LVM operates below the filesystem while mergerfs
operates above filesystems. With LVM, filesystems are created on logical
volumes and do not know about the underlying disks. If a linear or
striped logical volume spans multiple disks and one disk fails, the
filesystem can become unreadable. With mergerfs, each disk typically has
its own independent filesystem, so a single disk failure affects only the
data on that disk.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> block-level features like thin
provisioning, snapshots, and online resizing.</li>
<li><strong>Worse than mergerfs for:</strong> incremental mixed-disk pooling where
per-disk failure isolation and per-disk native access are priorities.</li>
</ul>
<h2 id="mdadm">mdadm</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Mdadm">https://en.wikipedia.org/wiki/Mdadm</a></li>
<li><a href="https://docs.kernel.org/admin-guide/md.html">https://docs.kernel.org/admin-guide/md.html</a></li>
</ul>
<p><code>mdadm</code> is Linux userspace tooling for configuring and managing software
RAID arrays provided by the kernel <code>md</code> driver. It can build RAID0/1/4/5/6/10
and related layouts, monitor arrays, and handle rebuild workflows.</p>
<p>Like RAID technologies discussed above, <code>mdadm</code> arrays aggregate devices
at the block layer and present one virtual device to a filesystem. That
can provide performance and/or redundancy depending on RAID level, but it
also means the filesystem depends on the array layout. mergerfs does not
provide block-level RAID; it pools already-formatted filesystems and can
be combined with tools like SnapRAID or NonRAID when redundancy is needed.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> kernel software RAID with real-time
redundancy and array-level performance tuning.</li>
<li><strong>Worse than mergerfs for:</strong> flexible mixed-size drive pooling where
per-filesystem independence and simple incremental expansion matter.</li>
</ul>
<h2 id="device-mapper">device mapper</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Device_mapper">https://en.wikipedia.org/wiki/Device_mapper</a></li>
<li><a href="https://docs.kernel.org/admin-guide/device-mapper/index.html">https://docs.kernel.org/admin-guide/device-mapper/index.html</a></li>
</ul>
<p>Device mapper is a kernel framework for creating virtual block devices
from one or more underlying devices. Technologies such as LVM,
<code>dm-crypt</code>, <code>dm-cache</code>, <code>dm-thin</code>, and multipath are built on top of it.</p>
<p>Because device mapper works at the block layer, it is not directly
comparable to mergerfs. It is complementary: you can use device mapper
for block-level functionality (encryption, caching, thin provisioning,
etc.) and then place filesystems on those devices, which mergerfs can
later pool if desired.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> block-layer transformations such as
transparent encryption, caching, and provisioning features.</li>
<li><strong>Worse than mergerfs for:</strong> presenting one unified pathname-level view
across many independent, already-formatted filesystems.</li>
</ul>
<h2 id="unraid">Unraid</h2>
<ul>
<li><a href="https://unraid.net">https://unraid.net</a></li>
</ul>
<p>Unraid is a full OS platform that offers pooled storage with integrated
real-time parity. Compared with mergerfs, its main advantage is that it
bundles pooling and parity in one product, while mergerfs is a
standalone Linux pooling filesystem without built-in redundancy. For
some users mergerfs' Linux distro-agnostic and fully open-source
approach is also preferable.</p>
<p>For semi-static data, mergerfs + <a href="https://www.snapraid.it">SnapRAID</a>
provides a similar, but not real-time, solution.
<a href="https://github.com/qvr/nonraid">NonRAID</a> (see <a href="#nonraid">below</a>) is a
fork of Unraid's parity calculation solution and can also be used with
mergerfs.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> turnkey pooling plus integrated real-time
parity in one product.</li>
<li><strong>Worse than mergerfs for:</strong> users who prefer a Linux distro-agnostic,
fully open-source component approach.</li>
</ul>
<h2 id="nonraid">NonRAID</h2>
<ul>
<li><a href="https://github.com/qvr/nonraid">https://github.com/qvr/nonraid</a></li>
</ul>
<p><a href="https://github.com/qvr/nonraid#how-it-works">NonRAID</a> is a fork of
Unraid's storage array kernel driver. Effectively it is like RAID5 at
the block device layer without treating the collection of devices as a
single device. Each device gets a virtual block device associated with
it which can be formatted with the filesystem of the user's choice and
will be individually accessible. Similar to SnapRAID but real-time.</p>
<p>Compared with mergerfs, NonRAID adds kernel-level real-time parity while
still allowing per-disk filesystems, whereas mergerfs focuses on pooling
views and placement policies without parity.</p>
<p>Given each device has its own filesystem like a traditional setup it can
be used with mergerfs for those looking for a unified view.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> real-time parity protection without
traditional RAID striping behavior.</li>
<li><strong>Worse than mergerfs for:</strong> users who want the simplest setup and do
not need parity, since it adds operational complexity.</li>
</ul>
<h2 id="zfs">ZFS</h2>
<ul>
<li><a href="https://openzfs.github.io/openzfs-docs">https://openzfs.github.io/openzfs-docs</a></li>
</ul>
<p>ZFS is an advanced filesystem that combines storage pooling,
snapshots, data integrity checking, and built-in RAID-like redundancy
all in one package. It offers features like transparent compression,
encryption, and automatic data repair.</p>
<p>Compared with mergerfs, ZFS is a full storage stack that manages disks
directly with integrated integrity and redundancy features, while
mergerfs is a lightweight FUSE layer that pools existing filesystems
without built-in redundancy.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> integrated data integrity, snapshots,
checksumming, and built-in redundancy.</li>
<li><strong>Worse than mergerfs for:</strong> low-overhead incremental pooling of
existing filesystems with minimal planning.</li>
</ul>
<h2 id="zfs-anyraid">ZFS AnyRAID</h2>
<ul>
<li><a href="https://docs.hexos.com/blog/2025-05-22">Announcement</a></li>
<li><a href="https://docs.hexos.com/blog/2026-7-15">Development update</a></li>
</ul>
<p>ZFS AnyRAID is under development to support mixed-capacity disks while
retaining ZFS redundancy. The planned layouts include mirrored and RAID-Z
variants, along with rebalancing and pool contraction work.</p>
<p>Availability is still landing in OpenZFS. Published notes indicate initial
mirror layouts may ship in a 2.4.x release, with broader RAID-Z variants,
rebalancing, and pool contraction targeted for later releases. Treat
release and downstream product-integration dates as roadmap targets
rather than commitments.</p>
<p>Where available, AnyRAID would offer some of the mixed-size flexibility
associated with mergerfs while retaining redundancy inside ZFS. mergerfs
provides mixed-size, add-drives-anytime pooling today, but without
built-in redundancy; SnapRAID or NonRAID can provide separate
protection.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> users who want mixed-capacity flexibility
and built-in live redundancy in one filesystem stack.</li>
<li><strong>Worse than mergerfs for:</strong> users who need production availability now or
want to pool existing filesystems without migrating data.</li>
</ul>
<h2 id="bcachefs">bcachefs</h2>
<ul>
<li><a href="https://bcachefs.org">https://bcachefs.org</a></li>
</ul>
<p>bcachefs is a modern copy-on-write filesystem for Linux designed for
multi-device storage aggregation. It includes integrated features such as
checksumming, snapshots, compression, encryption, and redundancy.</p>
<p>Compared with mergerfs, bcachefs is a full integrated filesystem, while
mergerfs is a lightweight pooling layer over existing filesystems. Beginning
with Linux 6.18, bcachefs is no longer distributed in the mainline kernel; the
project now distributes it as an external DKMS module. It remains actively
developed, but deployments must account for kernel compatibility and its
shorter operational history.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> integrated CoW filesystem features,
checksumming, snapshots, compression, and built-in multi-device
redundancy.</li>
<li><strong>Worse than mergerfs for:</strong> pooling existing filesystems without
reformatting, mainline-kernel availability, and per-disk native access.</li>
</ul>
<h2 id="btrfs-multi-device-filesystems">Btrfs multi-device filesystems</h2>
<ul>
<li><a href="https://btrfs.readthedocs.io/en/latest/Volume-management.html">https://btrfs.readthedocs.io/en/latest/Volume-management.html</a></li>
</ul>
<p>Btrfs can combine multiple devices in one filesystem and select separate
allocation profiles for data and metadata. The <code>single</code> data profile spreads
one copy of data across available devices without redundancy; other profiles
provide mirroring, striping, or parity with different capacity and failure
trade-offs.</p>
<p>Compared with mergerfs, multi-device Btrfs is one integrated filesystem,
while mergerfs pools separate existing filesystems. Losing a device from a
<code>single</code> profile can make the whole Btrfs filesystem incomplete. Redundant
profiles change that risk, but the member devices still are not independently
mountable filesystems.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> integrated checksumming, snapshots, balancing,
and selectable redundancy profiles.</li>
<li><strong>Worse than mergerfs for:</strong> pooling existing mixed filesystem types,
per-disk native access, and failure isolation without redundancy.</li>
</ul>
<h2 id="stablebits-drivepool">StableBit's DrivePool</h2>
<ul>
<li><a href="https://stablebit.com/DrivePool/Features">https://stablebit.com/DrivePool/Features</a></li>
</ul>
<p>DrivePool is a commercial storage pooling product for Windows that
combines multiple drives into a single volume and includes balancing
and optional duplication capabilities.</p>
<p>Compared with mergerfs, DrivePool emphasizes integrated balancing and
duplication features in a Windows-first product, while mergerfs
emphasizes Linux FUSE pooling with policy-based create placement and
external-tool composability.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> Windows users needing built-in
rebalancing and native file duplication features.</li>
<li><strong>Worse than mergerfs for:</strong> Linux-native deployments and users who
prefer open-source tooling and composable external utilities.</li>
</ul>
<h2 id="windows-storage-spaces">Windows Storage Spaces</h2>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows-server/storage/storage-spaces/overview">https://learn.microsoft.com/en-us/windows-server/storage/storage-spaces/overview</a></li>
</ul>
<p>Windows Storage Spaces is Microsoft's block-level storage virtualization
platform for Windows. It aggregates physical disks into storage pools from
which virtual disks can be created with simple, mirror, or parity layouts.
Supported Windows Server configurations can also use faster media as a
Storage Bus Cache.</p>
<p>Unlike mergerfs, Storage Spaces manages the member devices below the
filesystem and stripes or mirrors data according to the selected layout.
This can provide integrated resilience and one contiguous volume, but member
disks are not independently readable filesystems. mergerfs instead pools
existing filesystems and leaves their files directly accessible.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> Windows environments needing integrated
pooling, resilience, and tiering in the platform stack.</li>
<li><strong>Worse than mergerfs for:</strong> Linux hosts and lightweight pooling where
minimal overhead and per-filesystem independence are preferred.</li>
</ul>
<h2 id="plan-9-binds">Plan 9 binds</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs#Union_directories_and_namespaces">https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs#Union_directories_and_namespaces</a></li>
</ul>
<p>Plan 9 has a native bind mechanism that can compose paths and
filesystems into a single namespace view, including union-like
directory behavior.</p>
<p>Compared with mergerfs, Plan 9 binds are an OS-native namespace feature
with simple ordered behavior, while mergerfs provides Linux-focused
filesystem pooling with a larger set of configurable branch policies.</p>
<p>Plan 9 isn't a widely used OS so this comparison is mostly academic.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> native Plan 9 environments where
namespace composition is a core OS feature.</li>
<li><strong>Worse than mergerfs for:</strong> Linux users due to ecosystem relevance and
practical deployment availability.</li>
</ul>
<h2 id="9p">9P</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/9P_(protocol)">https://en.wikipedia.org/wiki/9P_(protocol)</a></li>
</ul>
<p><a href="https://en.wikipedia.org/wiki/9P_(protocol)">9P</a> is a filesystem
protocol from the Plan 9 operating system used to access files over a
network between systems.</p>
<p>Compared with mergerfs, 9P is a network filesystem protocol, while
mergerfs is a local Linux FUSE filesystem for pooling directories and
filesystems under one mount with branch policies. Like the Plan 9 binds
comparison above, this is mostly academic for typical mergerfs users.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> lightweight network filesystem protocol
use between compatible systems.</li>
<li><strong>Worse than mergerfs for:</strong> local Linux filesystem pooling because it
does not provide mergerfs-like branch policies or pooling semantics.</li>
</ul>
<h2 id="snapraid-pooling">SnapRAID pooling</h2>
<ul>
<li><a href="https://www.snapraid.it/manual">https://www.snapraid.it/manual</a></li>
</ul>
<p><a href="https://www.snapraid.it/manual">SnapRAID</a> has a pooling feature which
creates "a read-only virtual view of all the files in your array using
symbolic links."</p>
<p>Compared with mergerfs, SnapRAID pooling is a symlink-generated,
read-only view refreshed by SnapRAID operations, while mergerfs is a
live mounted filesystem that supports normal read/write behavior.</p>
<p>As mentioned in the description, this "view" is just the creation of
the same directory layout with symlinks to all files. This means that
reads (and writes) to files are at native speeds, but it is not
practical to use as a target for writing new files, and it is only
updated when <code>snapraid pool</code> is run. Note that some software treats
symlinks differently than regular files. For instance, some backup
software will skip symlinks by default.</p>
<p>mergerfs has the feature <a href="../config/symlinkify/">symlinkify</a> which
provides a similar behavior but is more flexible in that it is not
read-only. That said there can still be some software that won't like
that kind of setup.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> read-only, native-speed directory views
of SnapRAID-managed content.</li>
<li><strong>Worse than mergerfs for:</strong> general read/write pooled filesystem use
and always-live view updates.</li>
</ul>
<h2 id="rclone-union">rclone union</h2>
<ul>
<li><a href="https://rclone.org/union">https://rclone.org/union</a></li>
</ul>
<p>rclone's <a href="https://rclone.org/union">union</a> backend allows you to
create a union of multiple rclone backends and was inspired by
<a href="https://rclone.org/union/#behavior-policies">mergerfs</a>. Because
rclone knows more about the underlying backends than mergerfs can, it
can be more efficient than creating a similar union with <code>rclone mount</code>
and mergerfs.</p>
<p>Compared with mergerfs, rclone union is backend-aware and optimized for
cloud/remote storage abstractions, while mergerfs is optimized for local
POSIX filesystem pooling and branch policies.</p>
<p>However, it is not uncommon to see users set up rclone mounts and
combine them with local or other remote filesystems using mergerfs
given the differing feature sets and focuses of the two projects.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> remote-backend-heavy workloads where
backend-aware behavior improves cloud storage handling.</li>
<li><strong>Worse than mergerfs for:</strong> local POSIX pooling scenarios where direct
filesystem semantics and broad local tool compatibility matter.</li>
</ul>
<h2 id="distributed-filesystems">distributed filesystems</h2>
<ul>
<li><a href="https://www.openafs.org">AFS</a></li>
<li><a href="https://docs.ceph.com/en/latest/cephfs/">Ceph/CephFS</a></li>
<li><a href="https://www.gluster.org">GlusterFS</a></li>
<li><a href="https://lizardfs.com">LizardFS</a></li>
<li><a href="https://moosefs.com">MooseFS</a></li>
<li>etc.</li>
</ul>
<p>Distributed remote filesystems come in many forms. Some offer POSIX
filesystem compliance and some do not. Some provide remote block
devices or object stores on which a POSIX or POSIX-like filesystem is
built. Some are effectively distributed union filesystems with
duplication.</p>
<p>Compared with mergerfs, distributed filesystems focus on multi-node
storage, replication, and cluster behavior, while mergerfs focuses on
single-host local pooling of existing filesystems.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> multi-node or geographically distributed
workloads with built-in replication and high availability.</li>
<li><strong>Worse than mergerfs for:</strong> single-host and homelab pooling where low
overhead and operational simplicity are key.</li>
</ul>
<h2 id="nofs">nofs</h2>
<ul>
<li><a href="https://github.com/chapmanjacobd/nofs">https://github.com/chapmanjacobd/nofs</a></li>
</ul>
<p>nofs is a tool that provides mergerfs-like functionality for combining
multiple filesystems/directories into a unified view but does so
entirely through subcommands which replicate traditional POSIX
commands rather than providing a proper filesystem. It takes a lot of
inspiration from mergerfs in that it supports policy-based branch
selection (mfs, ff, pfrd, epmfs, and others), read-only and no-create
branch modes, and recreates POSIX-like commands such as <code>ls</code>, <code>find</code>,
<code>which</code>, <code>cp</code>, <code>mv</code>, and <code>rm</code>.</p>
<p>Compared with mergerfs, nofs is command-driven rather than a mounted
filesystem, so mergerfs is the option for transparent system-wide
pooling through normal POSIX filesystem calls.</p>
<p>Given its design nofs is not suited for general usage as third-party
applications will not be able to take advantage of the unioning
behavior it offers. It is primarily for simpler situations where
mergerfs cannot be used.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> constrained environments where a FUSE
mount is not possible but command-style union behavior is acceptable.</li>
<li><strong>Worse than mergerfs for:</strong> transparent system-wide filesystem pooling
usable by arbitrary third-party applications.</li>
</ul>
<h2 id="policyfs">PolicyFS</h2>
<ul>
<li><a href="https://policyfs.org">https://policyfs.org</a></li>
<li><a href="https://github.com/hieutdo/policyfs">https://github.com/hieutdo/policyfs</a></li>
</ul>
<p>PolicyFS is a Linux FUSE storage daemon that unifies multiple storage
paths under a single mountpoint, similarly to mergerfs. Its
distinguishing features are explicit path-pattern-based routing rules
for placement, and an optional SQLite metadata index that can serve
<code>readdir</code> and <code>getattr</code> operations without spinning up HDDs.</p>
<p>Compared with mergerfs, PolicyFS emphasizes explicit path-based routing,
scheduled SSD-to-HDD movement, and optional metadata indexing. mergerfs
emphasizes a broader policy-driven pooling model with longer operational
history and wider application compatibility. mergerfs does not try to prevent
metadata operations from waking branches because doing so fundamentally
<a href="../faq/limit_drive_spinup/">conflicts with other features.</a></p>
<p>PolicyFS's indexed storage deliberately defers some delete, rename, and
attribute operations until a maintenance job runs. Out-of-band changes require
the index to be refreshed, and its documentation identifies limits around
<code>O_DIRECT</code>, advisory locks, NFS re-export, and full POSIX coverage. Those are
material trade-offs, not only maturity differences.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> explicit path-based routing, scheduled
tiering, and metadata indexing designed to reduce HDD spin-ups.</li>
<li><strong>Worse than mergerfs for:</strong> broad POSIX compatibility, immediate mutation
semantics on every branch, and long-established operational behavior.</li>
</ul>
<h2 id="greyhole">Greyhole</h2>
<ul>
<li><a href="https://www.greyhole.net">https://www.greyhole.net</a></li>
<li><a href="https://github.com/gboudreau/Greyhole">https://github.com/gboudreau/Greyhole</a></li>
</ul>
<p>Greyhole is an open-source storage pooling application that works via
Samba. Rather than implementing a FUSE filesystem, it hooks into Samba
VFS to intercept file operations and distribute files across multiple
drives, with optional per-share redundancy.</p>
<p>Compared with mergerfs, Greyhole is Samba-centric and includes
integrated share-level redundancy, while mergerfs is a general-purpose
Linux FUSE mount for local pooling via standard POSIX filesystem calls.</p>
<ul>
<li><strong>Better than mergerfs for:</strong> Samba-centric environments that need
built-in per-share redundancy in the same tool.</li>
<li><strong>Worse than mergerfs for:</strong> general-purpose local filesystem pooling
outside Samba, and for heavy small-file churn workloads.</li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../known_issues_bugs/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Known Issues and Bugs">
<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>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Known Issues and Bugs
</div>
</div>
</a>
<a href="../benchmarking/" class="md-footer__link md-footer__link--next" aria-label="Next: Benchmarking">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Benchmarking
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.action.view", "content.code.copy", "content.code.select", "navigation.footer", "navigation.instant", "navigation.instant.prefetch", "navigation.path", "navigation.top", "navigation.tracking", "optimize", "search.share", "search.suggest", "toc.follow"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
</body>
</html>