{"id":13441012,"url":"https://github.com/trapexit/mergerfs","last_synced_at":"2025-05-14T14:09:22.324Z","repository":{"id":15337305,"uuid":"18067829","full_name":"trapexit/mergerfs","owner":"trapexit","description":"a featureful union filesystem","archived":false,"fork":false,"pushed_at":"2025-05-12T13:01:40.000Z","size":27307,"stargazers_count":4738,"open_issues_count":48,"forks_count":189,"subscribers_count":78,"default_branch":"master","last_synced_at":"2025-05-12T14:28:53.565Z","etag":null,"topics":["aufs","datahoarding","filesystem","fuse","jbod","kodi","libfuse","mergerfs","mhddfs","overlayfs","plex","subsonic","unionfs","xattr"],"latest_commit_sha":null,"homepage":"https://trapexit.github.io/mergerfs/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"donnemartin/data-science-ipython-notebooks","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trapexit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["trapexit"],"custom":["https://github.com/trapexit/support"]}},"created_at":"2014-03-24T15:43:21.000Z","updated_at":"2025-05-11T23:51:48.000Z","dependencies_parsed_at":"2023-02-16T04:15:55.394Z","dependency_job_id":"ab2326f3-29db-4bfb-9103-9bcdfa4f298f","html_url":"https://github.com/trapexit/mergerfs","commit_stats":{"total_commits":675,"total_committers":23,"mean_commits":"29.347826086956523","dds":"0.045925925925925926","last_synced_commit":"dd987db65c59548392d97ed3ae2b48c215b483f5"},"previous_names":[],"tags_count":95,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trapexit%2Fmergerfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trapexit%2Fmergerfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trapexit%2Fmergerfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trapexit%2Fmergerfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trapexit","download_url":"https://codeload.github.com/trapexit/mergerfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254110422,"owners_count":22016399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aufs","datahoarding","filesystem","fuse","jbod","kodi","libfuse","mergerfs","mhddfs","overlayfs","plex","subsonic","unionfs","xattr"],"created_at":"2024-07-31T03:01:28.854Z","updated_at":"2025-05-14T14:09:22.273Z","avatar_url":"https://github.com/trapexit.png","language":"C++","funding_links":["https://github.com/sponsors/trapexit","https://github.com/trapexit/support"],"categories":["C++","Install from Source","\u003ca name=\"cpp\"\u003e\u003c/a\u003eC++","others","xattr","File systems"],"sub_categories":["File systems","Download automation"],"readme":"# mergerfs - a featureful union filesystem\n\n**mergerfs** is a\n[FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) based\n[union filesystem](https://en.wikipedia.org/wiki/Union_mount) geared\ntowards simplifying storage and management of files across numerous\ncommodity storage devices. It is similar to **mhddfs**, **unionfs**,\nand **aufs**.\n\n## Features\n\n* Logically combine numerous filesystems/paths into a single\n  mount point\n* Combine paths of the same or different filesystems\n* Ability to add or remove filesystems/paths without impacting the\n  rest of the data\n* Unaffected by individual filesystem failure\n* Configurable file selection and creation placement\n* Works with filesystems of any size\n* Works with filesystems of almost any type\n* Ignore read-only filesystems when creating files\n* Hard link copy-on-write / CoW\n* Runtime configurable\n* Support for extended attributes (xattrs)\n* Support for file attributes (chattr)\n* Support for POSIX ACLs\n\n\n## Non-features\n\n* Read/write overlay on top of read-only filesystem like OverlayFS\n* File whiteout\n* RAID like parity calculation\n* Redundancy\n* Splitting of files across branches\n\n\n## How it works\n\nmergerfs logically merges multiple filesystem paths together. It acts\nas a proxy to the underlying filesystem paths. Combining the behaviors\nof some functions and being a selector for others.\n\nWhen the contents of a directory are requested mergerfs combines the\nlist of files from each directory, deduplicating entries, and returns\nthat list.\n\nWhen a file or directory is created a policy is first run to determine\nwhich branch will be selected for the creation.\n\nFor functions which change attributes or remove the file the behavior\nmay be applied to all instances found.\n\nRead more about [policies\nhere](https://trapexit.github.io/mergerfs/config/functions_categories_and_policies).\n\n\n### Visualization\n\n```\nA         +      B        =       C\n/disk1           /disk2           /merged\n|                |                |\n+-- /dir1        +-- /dir1        +-- /dir1\n|   |            |   |            |   |\n|   +-- file1    |   +-- file2    |   +-- file1\n|                |   +-- file3    |   +-- file2\n+-- /dir2        |                |   +-- file3\n|   |            +-- /dir3        |\n|   +-- file4        |            +-- /dir2\n|                     +-- file5   |   |\n+-- file6                         |   +-- file4\n                                  |\n                                  +-- /dir3\n                                  |   |\n                                  |   +-- file5\n                                  |\n                                  +-- file6\n```\n\n## QuickStart\n\nhttps://trapexit.github.io/mergerfs/quickstart/\n\n\n## Documentation\n\nhttps://trapexit.github.io/mergerfs\n\n\n## Support\n\nhttps://trapexit.github.io/mergerfs/support/\n\n\n## Sponsorship and Donations\n\n[https://github.com/trapexit/support](https://github.com/trapexit/support)\n\nDevelopment and support of a project like mergerfs requires a\nsignificant amount of time and effort. The software is released under\nthe very liberal [ISC](https://opensource.org/license/isc-license-txt)\nlicense and is therefore free to use for personal or commercial uses.\n\nIf you are a non-commercial user and find mergerfs and its support valuable\nand would like to support the project financially it would be very\nmuch appreciated.\n\nIf you are using mergerfs commercially please consider sponsoring the\nproject to ensure it continues to be maintained and receive\nupdates. If custom features are needed feel free to [contact me\ndirectly](mailto:support@spawn.link).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrapexit%2Fmergerfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrapexit%2Fmergerfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrapexit%2Fmergerfs/lists"}