You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1502 lines
38 KiB

  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <meta name="description" content="mergerfs - a featureful union filesystem">
  7. <link rel="canonical" href="https://trapexit.github.io/mergerfs/pages/faq/technical_behavior_and_limitations/">
  8. <link rel="prev" href="../recommendations_and_warnings/">
  9. <link rel="next" href="../usage_and_functionality/">
  10. <link rel="icon" href="../../../assets/images/favicon.png">
  11. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
  12. <title>Technical Behavior and Limitations - mergerfs</title>
  13. <link rel="stylesheet" href="../../../assets/stylesheets/main.6f8fc17f.min.css">
  14. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  15. <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">
  16. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  17. <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>
  18. </head>
  19. <body dir="ltr">
  20. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  21. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  22. <label class="md-overlay" for="__drawer"></label>
  23. <div data-md-component="skip">
  24. <a href="#technical-behavior-and-limitations" class="md-skip">
  25. Skip to content
  26. </a>
  27. </div>
  28. <div data-md-component="announce">
  29. </div>
  30. <header class="md-header md-header--shadow" data-md-component="header">
  31. <nav class="md-header__inner md-grid" aria-label="Header">
  32. <a href="../../.." title="mergerfs" class="md-header__button md-logo" aria-label="mergerfs" data-md-component="logo">
  33. <img src="../../../logo.jpeg" alt="logo">
  34. </a>
  35. <label class="md-header__button md-icon" for="__drawer">
  36. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  37. </label>
  38. <div class="md-header__title" data-md-component="header-title">
  39. <div class="md-header__ellipsis">
  40. <div class="md-header__topic">
  41. <span class="md-ellipsis">
  42. mergerfs
  43. </span>
  44. </div>
  45. <div class="md-header__topic" data-md-component="header-topic">
  46. <span class="md-ellipsis">
  47. Technical Behavior and Limitations
  48. </span>
  49. </div>
  50. </div>
  51. </div>
  52. <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>
  53. <label class="md-header__button md-icon" for="__search">
  54. <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>
  55. </label>
  56. <div class="md-search" data-md-component="search" role="dialog">
  57. <label class="md-search__overlay" for="__search"></label>
  58. <div class="md-search__inner" role="search">
  59. <form class="md-search__form" name="search">
  60. <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>
  61. <label class="md-search__icon md-icon" for="__search">
  62. <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>
  63. <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>
  64. </label>
  65. <nav class="md-search__options" aria-label="Search">
  66. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  67. <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>
  68. </button>
  69. </nav>
  70. </form>
  71. <div class="md-search__output">
  72. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  73. <div class="md-search-result" data-md-component="search-result">
  74. <div class="md-search-result__meta">
  75. Initializing search
  76. </div>
  77. <ol class="md-search-result__list" role="presentation"></ol>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. <div class="md-header__source">
  84. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  85. <div class="md-source__icon md-icon">
  86. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  87. </div>
  88. <div class="md-source__repository">
  89. mergerfs
  90. </div>
  91. </a>
  92. </div>
  93. </nav>
  94. </header>
  95. <div class="md-container" data-md-component="container">
  96. <main class="md-main" data-md-component="main">
  97. <div class="md-main__inner md-grid">
  98. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  99. <div class="md-sidebar__scrollwrap">
  100. <div class="md-sidebar__inner">
  101. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  102. <label class="md-nav__title" for="__drawer">
  103. <a href="../../.." title="mergerfs" class="md-nav__button md-logo" aria-label="mergerfs" data-md-component="logo">
  104. <img src="../../../logo.jpeg" alt="logo">
  105. </a>
  106. mergerfs
  107. </label>
  108. <div class="md-nav__source">
  109. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  110. <div class="md-source__icon md-icon">
  111. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  112. </div>
  113. <div class="md-source__repository">
  114. mergerfs
  115. </div>
  116. </a>
  117. </div>
  118. <ul class="md-nav__list" data-md-scrollfix>
  119. <li class="md-nav__item">
  120. <a href="../../.." class="md-nav__link">
  121. <span class="md-ellipsis">
  122. About
  123. </span>
  124. </a>
  125. </li>
  126. <li class="md-nav__item md-nav__item--nested">
  127. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
  128. <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
  129. <span class="md-ellipsis">
  130. Documentation
  131. </span>
  132. <span class="md-nav__icon md-icon"></span>
  133. </label>
  134. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
  135. <label class="md-nav__title" for="__nav_2">
  136. <span class="md-nav__icon md-icon"></span>
  137. Documentation
  138. </label>
  139. <ul class="md-nav__list" data-md-scrollfix>
  140. <li class="md-nav__item">
  141. <a href="../../documentation/how_it_works/" class="md-nav__link">
  142. <span class="md-ellipsis">
  143. HOW IT WORKS
  144. </span>
  145. </a>
  146. </li>
  147. <li class="md-nav__item">
  148. <a href="../../documentation/terminology/" class="md-nav__link">
  149. <span class="md-ellipsis">
  150. TERMINOLOGY
  151. </span>
  152. </a>
  153. </li>
  154. <li class="md-nav__item">
  155. <a href="../../documentation/basic_setup/" class="md-nav__link">
  156. <span class="md-ellipsis">
  157. BASIC SETUP
  158. </span>
  159. </a>
  160. </li>
  161. <li class="md-nav__item">
  162. <a href="../../documentation/options/" class="md-nav__link">
  163. <span class="md-ellipsis">
  164. OPTIONS
  165. </span>
  166. </a>
  167. </li>
  168. <li class="md-nav__item">
  169. <a href="../../documentation/functions_categories_and_policies/" class="md-nav__link">
  170. <span class="md-ellipsis">
  171. FUNCTIONS, CATEGORIES and POLICIES
  172. </span>
  173. </a>
  174. </li>
  175. <li class="md-nav__item">
  176. <a href="../../documentation/error_handling/" class="md-nav__link">
  177. <span class="md-ellipsis">
  178. ERROR HANDLING
  179. </span>
  180. </a>
  181. </li>
  182. <li class="md-nav__item">
  183. <a href="../../documentation/install/" class="md-nav__link">
  184. <span class="md-ellipsis">
  185. INSTALL
  186. </span>
  187. </a>
  188. </li>
  189. <li class="md-nav__item">
  190. <a href="../../documentation/build/" class="md-nav__link">
  191. <span class="md-ellipsis">
  192. BUILD
  193. </span>
  194. </a>
  195. </li>
  196. <li class="md-nav__item">
  197. <a href="../../documentation/upgrade/" class="md-nav__link">
  198. <span class="md-ellipsis">
  199. UPGRADE
  200. </span>
  201. </a>
  202. </li>
  203. <li class="md-nav__item">
  204. <a href="../../documentation/runtime_interfaces/" class="md-nav__link">
  205. <span class="md-ellipsis">
  206. RUNTIME INTERFACES
  207. </span>
  208. </a>
  209. </li>
  210. <li class="md-nav__item">
  211. <a href="../../documentation/tooling/" class="md-nav__link">
  212. <span class="md-ellipsis">
  213. TOOLING
  214. </span>
  215. </a>
  216. </li>
  217. <li class="md-nav__item">
  218. <a href="../../documentation/caching/" class="md-nav__link">
  219. <span class="md-ellipsis">
  220. CACHING
  221. </span>
  222. </a>
  223. </li>
  224. <li class="md-nav__item">
  225. <a href="../../documentation/performance/" class="md-nav__link">
  226. <span class="md-ellipsis">
  227. PERFORMANCE
  228. </span>
  229. </a>
  230. </li>
  231. <li class="md-nav__item">
  232. <a href="../../documentation/benchmarking/" class="md-nav__link">
  233. <span class="md-ellipsis">
  234. BENCHMARKING
  235. </span>
  236. </a>
  237. </li>
  238. <li class="md-nav__item">
  239. <a href="../../documentation/tips_notes/" class="md-nav__link">
  240. <span class="md-ellipsis">
  241. TIPS / NOTES
  242. </span>
  243. </a>
  244. </li>
  245. <li class="md-nav__item">
  246. <a href="../../documentation/known_issues_bugs/" class="md-nav__link">
  247. <span class="md-ellipsis">
  248. KNOWN ISSUES / BUGS
  249. </span>
  250. </a>
  251. </li>
  252. <li class="md-nav__item">
  253. <a href="../../documentation/remote_filesystems/" class="md-nav__link">
  254. <span class="md-ellipsis">
  255. Remote Filesystems
  256. </span>
  257. </a>
  258. </li>
  259. <li class="md-nav__item">
  260. <a href="../../documentation/mergerfs_versus_x/" class="md-nav__link">
  261. <span class="md-ellipsis">
  262. mergerfs versus X
  263. </span>
  264. </a>
  265. </li>
  266. <li class="md-nav__item">
  267. <a href="../../documentation/support/" class="md-nav__link">
  268. <span class="md-ellipsis">
  269. SUPPORT
  270. </span>
  271. </a>
  272. </li>
  273. <li class="md-nav__item">
  274. <a href="../../documentation/links/" class="md-nav__link">
  275. <span class="md-ellipsis">
  276. LINKS
  277. </span>
  278. </a>
  279. </li>
  280. </ul>
  281. </nav>
  282. </li>
  283. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  284. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
  285. <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
  286. <span class="md-ellipsis">
  287. FAQ
  288. </span>
  289. <span class="md-nav__icon md-icon"></span>
  290. </label>
  291. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
  292. <label class="md-nav__title" for="__nav_3">
  293. <span class="md-nav__icon md-icon"></span>
  294. FAQ
  295. </label>
  296. <ul class="md-nav__list" data-md-scrollfix>
  297. <li class="md-nav__item">
  298. <a href="../compatibility_and_integration/" class="md-nav__link">
  299. <span class="md-ellipsis">
  300. Compatibility and Integration
  301. </span>
  302. </a>
  303. </li>
  304. <li class="md-nav__item">
  305. <a href="../configuration_and_policies/" class="md-nav__link">
  306. <span class="md-ellipsis">
  307. Configuration and Policies
  308. </span>
  309. </a>
  310. </li>
  311. <li class="md-nav__item">
  312. <a href="../general_information_and_overview/" class="md-nav__link">
  313. <span class="md-ellipsis">
  314. General Information and Overview
  315. </span>
  316. </a>
  317. </li>
  318. <li class="md-nav__item">
  319. <a href="../recommendations_and_warnings/" class="md-nav__link">
  320. <span class="md-ellipsis">
  321. Recommendations and Warnings
  322. </span>
  323. </a>
  324. </li>
  325. <li class="md-nav__item md-nav__item--active">
  326. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  327. <label class="md-nav__link md-nav__link--active" for="__toc">
  328. <span class="md-ellipsis">
  329. Technical Behavior and Limitations
  330. </span>
  331. <span class="md-nav__icon md-icon"></span>
  332. </label>
  333. <a href="./" class="md-nav__link md-nav__link--active">
  334. <span class="md-ellipsis">
  335. Technical Behavior and Limitations
  336. </span>
  337. </a>
  338. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  339. <label class="md-nav__title" for="__toc">
  340. <span class="md-nav__icon md-icon"></span>
  341. Table of contents
  342. </label>
  343. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  344. <li class="md-nav__item">
  345. <a href="#do-hardlinks-work" class="md-nav__link">
  346. <span class="md-ellipsis">
  347. Do hardlinks work?
  348. </span>
  349. </a>
  350. </li>
  351. <li class="md-nav__item">
  352. <a href="#how-does-mergerfs-handle-moving-and-copying-of-files" class="md-nav__link">
  353. <span class="md-ellipsis">
  354. How does mergerfs handle moving and copying of files?
  355. </span>
  356. </a>
  357. </li>
  358. <li class="md-nav__item">
  359. <a href="#does-ficlone-or-ficlonerange-work" class="md-nav__link">
  360. <span class="md-ellipsis">
  361. Does FICLONE or FICLONERANGE work?
  362. </span>
  363. </a>
  364. </li>
  365. <li class="md-nav__item">
  366. <a href="#why-do-i-get-an-out-of-space-no-space-left-on-device-enospc-error-even-though-there-appears-to-be-lots-of-space-available" class="md-nav__link">
  367. <span class="md-ellipsis">
  368. Why do I get an "out of space" / "no space left on device" / ENOSPC error even though there appears to be lots of space available?
  369. </span>
  370. </a>
  371. </li>
  372. <li class="md-nav__item">
  373. <a href="#why-does-the-total-available-space-in-mergerfs-not-equal-outside" class="md-nav__link">
  374. <span class="md-ellipsis">
  375. Why does the total available space in mergerfs not equal outside?
  376. </span>
  377. </a>
  378. </li>
  379. <li class="md-nav__item">
  380. <a href="#i-notice-massive-slowdowns-of-writes-when-enabling-cachefiles" class="md-nav__link">
  381. <span class="md-ellipsis">
  382. I notice massive slowdowns of writes when enabling cache.files.
  383. </span>
  384. </a>
  385. </li>
  386. <li class="md-nav__item">
  387. <a href="#why-cant-i-see-my-files-directories" class="md-nav__link">
  388. <span class="md-ellipsis">
  389. Why can't I see my files / directories?
  390. </span>
  391. </a>
  392. </li>
  393. </ul>
  394. </nav>
  395. </li>
  396. <li class="md-nav__item">
  397. <a href="../usage_and_functionality/" class="md-nav__link">
  398. <span class="md-ellipsis">
  399. Usage and Functionality
  400. </span>
  401. </a>
  402. </li>
  403. </ul>
  404. </nav>
  405. </li>
  406. <li class="md-nav__item md-nav__item--nested">
  407. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
  408. <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
  409. <span class="md-ellipsis">
  410. Wiki
  411. </span>
  412. <span class="md-nav__icon md-icon"></span>
  413. </label>
  414. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
  415. <label class="md-nav__title" for="__nav_4">
  416. <span class="md-nav__icon md-icon"></span>
  417. Wiki
  418. </label>
  419. <ul class="md-nav__list" data-md-scrollfix>
  420. <li class="md-nav__item">
  421. <a href="../../wiki/projects_using_mergerfs/" class="md-nav__link">
  422. <span class="md-ellipsis">
  423. Projects incorporating mergerfs directly in some way
  424. </span>
  425. </a>
  426. </li>
  427. <li class="md-nav__item">
  428. <a href="../../wiki/installing_mergerfs_on_a_synology_nas/" class="md-nav__link">
  429. <span class="md-ellipsis">
  430. Installing mergerfs on a synology nas
  431. </span>
  432. </a>
  433. </li>
  434. <li class="md-nav__item">
  435. <a href="../../wiki/testimonials/" class="md-nav__link">
  436. <span class="md-ellipsis">
  437. Testimonials
  438. </span>
  439. </a>
  440. </li>
  441. <li class="md-nav__item">
  442. <a href="../../wiki/real_world_deployments/" class="md-nav__link">
  443. <span class="md-ellipsis">
  444. trapexit's (mergerfs' author)
  445. </span>
  446. </a>
  447. </li>
  448. <li class="md-nav__item">
  449. <a href="../../wiki/systemd/" class="md-nav__link">
  450. <span class="md-ellipsis">
  451. systemd
  452. </span>
  453. </a>
  454. </li>
  455. <li class="md-nav__item">
  456. <a href="../../wiki/kernel_issues_and_bugs/" class="md-nav__link">
  457. <span class="md-ellipsis">
  458. Kernel issues and bugs
  459. </span>
  460. </a>
  461. </li>
  462. <li class="md-nav__item">
  463. <a href="../../wiki/featured_media_and_publicity/" class="md-nav__link">
  464. <span class="md-ellipsis">
  465. Featured Media and Publicity
  466. </span>
  467. </a>
  468. </li>
  469. <li class="md-nav__item">
  470. <a href="../../wiki/limit_drive_spinup/" class="md-nav__link">
  471. <span class="md-ellipsis">
  472. Limit drive spinup
  473. </span>
  474. </a>
  475. </li>
  476. <li class="md-nav__item">
  477. <a href="../../wiki/links/" class="md-nav__link">
  478. <span class="md-ellipsis">
  479. Links
  480. </span>
  481. </a>
  482. </li>
  483. </ul>
  484. </nav>
  485. </li>
  486. </ul>
  487. </nav>
  488. </div>
  489. </div>
  490. </div>
  491. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  492. <div class="md-sidebar__scrollwrap">
  493. <div class="md-sidebar__inner">
  494. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  495. <label class="md-nav__title" for="__toc">
  496. <span class="md-nav__icon md-icon"></span>
  497. Table of contents
  498. </label>
  499. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  500. <li class="md-nav__item">
  501. <a href="#do-hardlinks-work" class="md-nav__link">
  502. <span class="md-ellipsis">
  503. Do hardlinks work?
  504. </span>
  505. </a>
  506. </li>
  507. <li class="md-nav__item">
  508. <a href="#how-does-mergerfs-handle-moving-and-copying-of-files" class="md-nav__link">
  509. <span class="md-ellipsis">
  510. How does mergerfs handle moving and copying of files?
  511. </span>
  512. </a>
  513. </li>
  514. <li class="md-nav__item">
  515. <a href="#does-ficlone-or-ficlonerange-work" class="md-nav__link">
  516. <span class="md-ellipsis">
  517. Does FICLONE or FICLONERANGE work?
  518. </span>
  519. </a>
  520. </li>
  521. <li class="md-nav__item">
  522. <a href="#why-do-i-get-an-out-of-space-no-space-left-on-device-enospc-error-even-though-there-appears-to-be-lots-of-space-available" class="md-nav__link">
  523. <span class="md-ellipsis">
  524. Why do I get an "out of space" / "no space left on device" / ENOSPC error even though there appears to be lots of space available?
  525. </span>
  526. </a>
  527. </li>
  528. <li class="md-nav__item">
  529. <a href="#why-does-the-total-available-space-in-mergerfs-not-equal-outside" class="md-nav__link">
  530. <span class="md-ellipsis">
  531. Why does the total available space in mergerfs not equal outside?
  532. </span>
  533. </a>
  534. </li>
  535. <li class="md-nav__item">
  536. <a href="#i-notice-massive-slowdowns-of-writes-when-enabling-cachefiles" class="md-nav__link">
  537. <span class="md-ellipsis">
  538. I notice massive slowdowns of writes when enabling cache.files.
  539. </span>
  540. </a>
  541. </li>
  542. <li class="md-nav__item">
  543. <a href="#why-cant-i-see-my-files-directories" class="md-nav__link">
  544. <span class="md-ellipsis">
  545. Why can't I see my files / directories?
  546. </span>
  547. </a>
  548. </li>
  549. </ul>
  550. </nav>
  551. </div>
  552. </div>
  553. </div>
  554. <div class="md-content" data-md-component="content">
  555. <article class="md-content__inner md-typeset">
  556. <a href="https://github.com/trapexit/mergerfs/tree/master/mkdocs/docs/pages/faq/technical_behavior_and_limitations.md" title="Edit this page" class="md-content__button md-icon">
  557. <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>
  558. </a>
  559. <h1 id="technical-behavior-and-limitations">Technical Behavior and Limitations</h1>
  560. <h2 id="do-hardlinks-work">Do hardlinks work?</h2>
  561. <p>Yes. See also the option <code>inodecalc</code> for how inode values are
  562. calculated.</p>
  563. <p>What mergerfs does not do is fake hard links across branches. Read
  564. the section "rename &amp; link" for how it works.</p>
  565. <p>Remember that hardlinks will NOT work across devices. That includes
  566. between the original filesystem and a mergerfs pool, between two
  567. separate pools of the same underlying filesystems, or bind mounts of
  568. paths within the mergerfs pool. The latter is common when using Docker
  569. or Podman. Multiple volumes (bind mounts) to the same underlying
  570. filesystem are considered different devices. There is no way to link
  571. between them. You should mount in the highest directory in the
  572. mergerfs pool that includes all the paths you need if you want links
  573. to work.</p>
  574. <h2 id="how-does-mergerfs-handle-moving-and-copying-of-files">How does mergerfs handle moving and copying of files?</h2>
  575. <p>This is a <em>very</em> common mistaken assumption regarding how filesystems
  576. work. There is no such thing as "move" or "copy." These concepts are
  577. high level behaviors made up of numerous independent steps and <em>not</em>
  578. individual filesystem functions.</p>
  579. <p>A "move" can include a "copy" so lets describe copy first.</p>
  580. <p>When an application copies a file from source to destination it can do
  581. so in a number of ways but the basics are the following.</p>
  582. <ol>
  583. <li><code>open</code> the source file.</li>
  584. <li><code>create</code> the destination file.</li>
  585. <li><code>read</code> a chunk of data from source and <code>write</code> to
  586. destination. Continue till it runs out of data to copy.</li>
  587. <li>Copy file metadata (<code>stat</code>) such as ownership (<code>chown</code>),
  588. permissions (<code>chmod</code>), timestamps (<code>utimes</code>), extended attributes
  589. (<code>getxattr</code>, <code>setxattr</code>), etc.</li>
  590. <li><code>close</code> source and destination files.</li>
  591. </ol>
  592. <p>"move" is typically a <code>rename(src,dst)</code> and if that errors with
  593. <code>EXDEV</code> (meaning the source and destination are on different
  594. filesystems) the application will "copy" the file as described above
  595. and then it removes (<code>unlink</code>) the source.</p>
  596. <p>The <code>rename(src,dst)</code>, <code>open(src)</code>, <code>create(dst)</code>, data copying,
  597. metadata copying, <code>unlink(src)</code>, etc. are entirely distinct and
  598. separate events. There is really no practical way to know that what is
  599. ultimately occurring is the "copying" of a file or what the source
  600. file would be. Since the source is not known there is no way to know
  601. how large a created file is destined to become. This is why it is
  602. impossible for mergerfs to choose the branch for a <code>create</code> based on
  603. file size. The only context provided when a file is created, besides
  604. the name, is the permissions, if it is to be read and/or written, and
  605. some low level settings for the operating system.</p>
  606. <p>All of this means that mergerfs can not make decisions when a file is
  607. created based on file size or the source of the data. That information
  608. is simply not available. At best mergerfs could respond to files
  609. reaching a certain size when writing data or when a file is closed.</p>
  610. <p>Related: if a user wished to have mergerfs perform certain activities
  611. based on the name of a file it is common and even best practice for a
  612. program to write to a temporary file first and then rename to its
  613. final destination. That temporary file name will typically be random
  614. and have no indication of the type of file being written.</p>
  615. <h2 id="does-ficlone-or-ficlonerange-work">Does FICLONE or FICLONERANGE work?</h2>
  616. <p>Unfortunately not. FUSE, the technology mergerfs is based on, does not
  617. support the <code>clone_file_range</code> feature needed for it to work. mergerfs
  618. won't even know such a request is made. The kernel will simply return
  619. an error back to the application making the request.</p>
  620. <p>Should FUSE gain the ability mergerfs will be updated to support it.</p>
  621. <h2 id="why-do-i-get-an-out-of-space-no-space-left-on-device-enospc-error-even-though-there-appears-to-be-lots-of-space-available">Why do I get an "out of space" / "no space left on device" / ENOSPC error even though there appears to be lots of space available?</h2>
  622. <p>First make sure you've read the sections above about policies, path
  623. preservation, branch filtering, and the options <strong>minfreespace</strong>,
  624. <strong>moveonenospc</strong>, <strong>statfs</strong>, and <strong>statfs_ignore</strong>.</p>
  625. <p>mergerfs is simply presenting a union of the content within multiple
  626. branches. The reported free space is an aggregate of space available
  627. within the pool (behavior modified by <strong>statfs</strong> and
  628. <strong>statfs_ignore</strong>). It does not represent a contiguous space. In the
  629. same way that read-only filesystems, those with quotas, or reserved
  630. space report the full theoretical space available.</p>
  631. <p>Due to path preservation, branch tagging, read-only status, and
  632. <strong>minfreespace</strong> settings it is perfectly valid that <code>ENOSPC</code> / "out
  633. of space" / "no space left on device" be returned. It is doing what
  634. was asked of it: filtering possible branches due to those
  635. settings. Only one error can be returned and if one of the reasons for
  636. filtering a branch was <strong>minfreespace</strong> then it will be returned as
  637. such. <strong>moveonenospc</strong> is only relevant to writing a file which is too
  638. large for the filesystem it's currently on.</p>
  639. <p>It is also possible that the filesystem selected has run out of
  640. inodes. Use <code>df -i</code> to list the total and available inodes per
  641. filesystem.</p>
  642. <p>If you don't care about path preservation then simply change the
  643. <code>create</code> policy to one which isn't. <code>mfs</code> is probably what most are
  644. looking for. The reason it's not default is because it was originally
  645. set to <code>epmfs</code> and changing it now would change people's setup. Such a
  646. setting change will likely occur in mergerfs 3.</p>
  647. <h2 id="why-does-the-total-available-space-in-mergerfs-not-equal-outside">Why does the total available space in mergerfs not equal outside?</h2>
  648. <p>Are you using ext2/3/4? With reserve for root? mergerfs uses available
  649. space for statfs calculations. If you've reserved space for root then
  650. it won't show up.</p>
  651. <p>You can remove the reserve by running: <code>tune2fs -m 0 &lt;device&gt;</code></p>
  652. <h2 id="i-notice-massive-slowdowns-of-writes-when-enabling-cachefiles">I notice massive slowdowns of writes when enabling cache.files.</h2>
  653. <p>When file caching is enabled in any form (<code>cache.files!=off</code>) it will
  654. issue <code>getxattr</code> requests for <code>security.capability</code> prior to <em>every
  655. single write</em>. This will usually result in performance degradation,
  656. especially when using a network filesystem (such as NFS or SMB.)
  657. Unfortunately at this moment, the kernel is not caching the response.</p>
  658. <p>To work around this situation mergerfs offers a few solutions.</p>
  659. <ol>
  660. <li>Set <code>security_capability=false</code>. It will short circuit any call and
  661. return <code>ENOATTR</code>. This still means though that mergerfs will
  662. receive the request before every write but at least it doesn't get
  663. passed through to the underlying filesystem.</li>
  664. <li>Set <code>xattr=noattr</code>. Same as above but applies to <em>all</em> calls to
  665. getxattr. Not just <code>security.capability</code>. This will not be cached
  666. by the kernel either but mergerfs' runtime config system will still
  667. function.</li>
  668. <li>Set <code>xattr=nosys</code>. Results in mergerfs returning <code>ENOSYS</code> which
  669. <em>will</em> be cached by the kernel. No future xattr calls will be
  670. forwarded to mergerfs. The downside is that also means the xattr
  671. based config and query functionality won't work either.</li>
  672. <li>Disable file caching. If you aren't using applications which use
  673. <code>mmap</code> it's probably simpler to just disable it altogether. The
  674. kernel won't send the requests when caching is disabled.</li>
  675. </ol>
  676. <h2 id="why-cant-i-see-my-files-directories">Why can't I see my files / directories?</h2>
  677. <p>It's almost always a permissions issue. Unlike mhddfs and
  678. unionfs-fuse, which runs as root and attempts to access content as
  679. such, mergerfs always changes its credentials to that of the
  680. caller. This means that if the user does not have access to a file or
  681. directory than neither will mergerfs. However, because mergerfs is
  682. creating a union of paths it may be able to read some files and
  683. directories on one filesystem but not another resulting in an
  684. incomplete set.</p>
  685. <p>Whenever you run into a split permission issue (seeing some but not
  686. all files) try using
  687. <a href="https://github.com/trapexit/mergerfs-tools">mergerfs.fsck</a> tool to
  688. check for and fix the mismatch. If you aren't seeing anything at all
  689. be sure that the basic permissions are correct. The user and group
  690. values are correct and that directories have their executable bit
  691. set. A common mistake by users new to Linux is to <code>chmod -R 644</code> when
  692. they should have <code>chmod -R u=rwX,go=rX</code>.</p>
  693. <p>If using a network filesystem such as NFS or SMB (Samba) be sure to
  694. pay close attention to anything regarding permissioning and
  695. users. Root squashing and user translation for instance has bitten a
  696. few mergerfs users. Some of these also affect the use of mergerfs from
  697. container platforms such as Docker.</p>
  698. </article>
  699. </div>
  700. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  701. </div>
  702. </main>
  703. <footer class="md-footer">
  704. <div class="md-footer-meta md-typeset">
  705. <div class="md-footer-meta__inner md-grid">
  706. <div class="md-copyright">
  707. Made with
  708. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  709. Material for MkDocs
  710. </a>
  711. </div>
  712. </div>
  713. </div>
  714. </footer>
  715. </div>
  716. <div class="md-dialog" data-md-component="dialog">
  717. <div class="md-dialog__inner md-typeset"></div>
  718. </div>
  719. <script id="__config" type="application/json">{"base": "../../..", "features": ["content.action.edit"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "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"}}</script>
  720. <script src="../../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
  721. </body>
  722. </html>