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.

1810 lines
42 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/tooling/">
  8. <link rel="prev" href="../benchmarking/">
  9. <link rel="next" href="../usage_patterns/">
  10. <link rel="icon" href="../assets/images/favicon.png">
  11. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.50">
  12. <title>Tooling - mergerfs</title>
  13. <link rel="stylesheet" href="../assets/stylesheets/main.a40c8224.min.css">
  14. <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
  15. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  16. <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">
  17. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  18. <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>
  19. </head>
  20. <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
  21. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  22. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  23. <label class="md-overlay" for="__drawer"></label>
  24. <div data-md-component="skip">
  25. <a href="#tooling" class="md-skip">
  26. Skip to content
  27. </a>
  28. </div>
  29. <div data-md-component="announce">
  30. </div>
  31. <header class="md-header md-header--shadow" data-md-component="header">
  32. <nav class="md-header__inner md-grid" aria-label="Header">
  33. <a href=".." title="mergerfs" class="md-header__button md-logo" aria-label="mergerfs" data-md-component="logo">
  34. <img src="../logo.jpeg" alt="logo">
  35. </a>
  36. <label class="md-header__button md-icon" for="__drawer">
  37. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  38. </label>
  39. <div class="md-header__title" data-md-component="header-title">
  40. <div class="md-header__ellipsis">
  41. <div class="md-header__topic">
  42. <span class="md-ellipsis">
  43. mergerfs
  44. </span>
  45. </div>
  46. <div class="md-header__topic" data-md-component="header-topic">
  47. <span class="md-ellipsis">
  48. Tooling
  49. </span>
  50. </div>
  51. </div>
  52. </div>
  53. <form class="md-header__option" data-md-component="palette">
  54. <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">
  55. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
  56. <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>
  57. </label>
  58. <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">
  59. <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
  60. <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>
  61. </label>
  62. <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">
  63. <label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
  64. <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>
  65. </label>
  66. </form>
  67. <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>
  68. <label class="md-header__button md-icon" for="__search">
  69. <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>
  70. </label>
  71. <div class="md-search" data-md-component="search" role="dialog">
  72. <label class="md-search__overlay" for="__search"></label>
  73. <div class="md-search__inner" role="search">
  74. <form class="md-search__form" name="search">
  75. <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>
  76. <label class="md-search__icon md-icon" for="__search">
  77. <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>
  78. <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>
  79. </label>
  80. <nav class="md-search__options" aria-label="Search">
  81. <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">
  82. <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>
  83. </a>
  84. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  85. <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>
  86. </button>
  87. </nav>
  88. </form>
  89. <div class="md-search__output">
  90. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  91. <div class="md-search-result" data-md-component="search-result">
  92. <div class="md-search-result__meta">
  93. Initializing search
  94. </div>
  95. <ol class="md-search-result__list" role="presentation"></ol>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. <div class="md-header__source">
  102. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  103. <div class="md-source__icon md-icon">
  104. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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>
  105. </div>
  106. <div class="md-source__repository">
  107. mergerfs
  108. </div>
  109. </a>
  110. </div>
  111. </nav>
  112. </header>
  113. <div class="md-container" data-md-component="container">
  114. <main class="md-main" data-md-component="main">
  115. <div class="md-main__inner md-grid">
  116. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  117. <div class="md-sidebar__scrollwrap">
  118. <div class="md-sidebar__inner">
  119. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  120. <label class="md-nav__title" for="__drawer">
  121. <a href=".." title="mergerfs" class="md-nav__button md-logo" aria-label="mergerfs" data-md-component="logo">
  122. <img src="../logo.jpeg" alt="logo">
  123. </a>
  124. mergerfs
  125. </label>
  126. <div class="md-nav__source">
  127. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  128. <div class="md-source__icon md-icon">
  129. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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>
  130. </div>
  131. <div class="md-source__repository">
  132. mergerfs
  133. </div>
  134. </a>
  135. </div>
  136. <ul class="md-nav__list" data-md-scrollfix>
  137. <li class="md-nav__item">
  138. <a href=".." class="md-nav__link">
  139. <span class="md-ellipsis">
  140. Home
  141. </span>
  142. </a>
  143. </li>
  144. <li class="md-nav__item">
  145. <a href="../quickstart/" class="md-nav__link">
  146. <span class="md-ellipsis">
  147. QuickStart
  148. </span>
  149. </a>
  150. </li>
  151. <li class="md-nav__item md-nav__item--nested">
  152. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
  153. <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
  154. <span class="md-ellipsis">
  155. Installation
  156. </span>
  157. <span class="md-nav__icon md-icon"></span>
  158. </label>
  159. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
  160. <label class="md-nav__title" for="__nav_3">
  161. <span class="md-nav__icon md-icon"></span>
  162. Installation
  163. </label>
  164. <ul class="md-nav__list" data-md-scrollfix>
  165. <li class="md-nav__item">
  166. <a href="../setup/installation/" class="md-nav__link">
  167. <span class="md-ellipsis">
  168. Installation
  169. </span>
  170. </a>
  171. </li>
  172. <li class="md-nav__item">
  173. <a href="../setup/upgrade/" class="md-nav__link">
  174. <span class="md-ellipsis">
  175. Upgrade
  176. </span>
  177. </a>
  178. </li>
  179. <li class="md-nav__item">
  180. <a href="../setup/build/" class="md-nav__link">
  181. <span class="md-ellipsis">
  182. Build
  183. </span>
  184. </a>
  185. </li>
  186. </ul>
  187. </nav>
  188. </li>
  189. <li class="md-nav__item md-nav__item--nested">
  190. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
  191. <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
  192. <span class="md-ellipsis">
  193. Config
  194. </span>
  195. <span class="md-nav__icon md-icon"></span>
  196. </label>
  197. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
  198. <label class="md-nav__title" for="__nav_4">
  199. <span class="md-nav__icon md-icon"></span>
  200. Config
  201. </label>
  202. <ul class="md-nav__list" data-md-scrollfix>
  203. <li class="md-nav__item">
  204. <a href="../config/terminology/" class="md-nav__link">
  205. <span class="md-ellipsis">
  206. Terminology
  207. </span>
  208. </a>
  209. </li>
  210. <li class="md-nav__item">
  211. <a href="../config/options/" class="md-nav__link">
  212. <span class="md-ellipsis">
  213. Options
  214. </span>
  215. </a>
  216. </li>
  217. <li class="md-nav__item">
  218. <a href="../config/deprecated_options/" class="md-nav__link">
  219. <span class="md-ellipsis">
  220. Deprecated Options
  221. </span>
  222. </a>
  223. </li>
  224. <li class="md-nav__item">
  225. <a href="../config/branches/" class="md-nav__link">
  226. <span class="md-ellipsis">
  227. branches
  228. </span>
  229. </a>
  230. </li>
  231. <li class="md-nav__item">
  232. <a href="../config/functions_categories_and_policies/" class="md-nav__link">
  233. <span class="md-ellipsis">
  234. functions, categories and policies
  235. </span>
  236. </a>
  237. </li>
  238. <li class="md-nav__item">
  239. <a href="../config/func_readdir/" class="md-nav__link">
  240. <span class="md-ellipsis">
  241. func.readdir
  242. </span>
  243. </a>
  244. </li>
  245. <li class="md-nav__item">
  246. <a href="../config/rename_and_link/" class="md-nav__link">
  247. <span class="md-ellipsis">
  248. rename and link
  249. </span>
  250. </a>
  251. </li>
  252. <li class="md-nav__item">
  253. <a href="../config/cache/" class="md-nav__link">
  254. <span class="md-ellipsis">
  255. caching
  256. </span>
  257. </a>
  258. </li>
  259. <li class="md-nav__item">
  260. <a href="../config/readahead/" class="md-nav__link">
  261. <span class="md-ellipsis">
  262. readahead
  263. </span>
  264. </a>
  265. </li>
  266. <li class="md-nav__item">
  267. <a href="../config/inodecalc/" class="md-nav__link">
  268. <span class="md-ellipsis">
  269. inodecalc
  270. </span>
  271. </a>
  272. </li>
  273. <li class="md-nav__item">
  274. <a href="../config/threads/" class="md-nav__link">
  275. <span class="md-ellipsis">
  276. threads
  277. </span>
  278. </a>
  279. </li>
  280. <li class="md-nav__item">
  281. <a href="../config/pin-threads/" class="md-nav__link">
  282. <span class="md-ellipsis">
  283. pin-threads
  284. </span>
  285. </a>
  286. </li>
  287. <li class="md-nav__item">
  288. <a href="../config/link_cow/" class="md-nav__link">
  289. <span class="md-ellipsis">
  290. link_cow
  291. </span>
  292. </a>
  293. </li>
  294. <li class="md-nav__item">
  295. <a href="../config/fuse_msg_size/" class="md-nav__link">
  296. <span class="md-ellipsis">
  297. fuse_msg_size
  298. </span>
  299. </a>
  300. </li>
  301. <li class="md-nav__item">
  302. <a href="../config/follow-symlinks/" class="md-nav__link">
  303. <span class="md-ellipsis">
  304. follow-symlinks
  305. </span>
  306. </a>
  307. </li>
  308. <li class="md-nav__item">
  309. <a href="../config/link-exdev/" class="md-nav__link">
  310. <span class="md-ellipsis">
  311. link-exdev
  312. </span>
  313. </a>
  314. </li>
  315. <li class="md-nav__item">
  316. <a href="../config/rename-exdev/" class="md-nav__link">
  317. <span class="md-ellipsis">
  318. rename-exdev
  319. </span>
  320. </a>
  321. </li>
  322. <li class="md-nav__item">
  323. <a href="../config/symlinkify/" class="md-nav__link">
  324. <span class="md-ellipsis">
  325. symlinkify
  326. </span>
  327. </a>
  328. </li>
  329. <li class="md-nav__item">
  330. <a href="../config/nullrw/" class="md-nav__link">
  331. <span class="md-ellipsis">
  332. nullrw
  333. </span>
  334. </a>
  335. </li>
  336. <li class="md-nav__item">
  337. <a href="../config/xattr/" class="md-nav__link">
  338. <span class="md-ellipsis">
  339. xattr
  340. </span>
  341. </a>
  342. </li>
  343. <li class="md-nav__item">
  344. <a href="../config/nfsopenhack/" class="md-nav__link">
  345. <span class="md-ellipsis">
  346. nfsopenhack
  347. </span>
  348. </a>
  349. </li>
  350. <li class="md-nav__item">
  351. <a href="../config/statfs/" class="md-nav__link">
  352. <span class="md-ellipsis">
  353. statfs / statvfs
  354. </span>
  355. </a>
  356. </li>
  357. <li class="md-nav__item">
  358. <a href="../config/flush-on-close/" class="md-nav__link">
  359. <span class="md-ellipsis">
  360. flush-on-close
  361. </span>
  362. </a>
  363. </li>
  364. <li class="md-nav__item">
  365. <a href="../config/export-support/" class="md-nav__link">
  366. <span class="md-ellipsis">
  367. export-support
  368. </span>
  369. </a>
  370. </li>
  371. </ul>
  372. </nav>
  373. </li>
  374. <li class="md-nav__item">
  375. <a href="../error_handling/" class="md-nav__link">
  376. <span class="md-ellipsis">
  377. Error Handling
  378. </span>
  379. </a>
  380. </li>
  381. <li class="md-nav__item">
  382. <a href="../runtime_interfaces/" class="md-nav__link">
  383. <span class="md-ellipsis">
  384. Runtime Interfaces
  385. </span>
  386. </a>
  387. </li>
  388. <li class="md-nav__item">
  389. <a href="../remote_filesystems/" class="md-nav__link">
  390. <span class="md-ellipsis">
  391. Remote Filesystems
  392. </span>
  393. </a>
  394. </li>
  395. <li class="md-nav__item">
  396. <a href="../tips_notes/" class="md-nav__link">
  397. <span class="md-ellipsis">
  398. Tips and Notes
  399. </span>
  400. </a>
  401. </li>
  402. <li class="md-nav__item">
  403. <a href="../known_issues_bugs/" class="md-nav__link">
  404. <span class="md-ellipsis">
  405. Known Issues and Bugs
  406. </span>
  407. </a>
  408. </li>
  409. <li class="md-nav__item">
  410. <a href="../project_comparisons/" class="md-nav__link">
  411. <span class="md-ellipsis">
  412. Project Comparisons
  413. </span>
  414. </a>
  415. </li>
  416. <li class="md-nav__item">
  417. <a href="../performance/" class="md-nav__link">
  418. <span class="md-ellipsis">
  419. Tweaking Performance
  420. </span>
  421. </a>
  422. </li>
  423. <li class="md-nav__item">
  424. <a href="../benchmarking/" class="md-nav__link">
  425. <span class="md-ellipsis">
  426. Benchmarking
  427. </span>
  428. </a>
  429. </li>
  430. <li class="md-nav__item md-nav__item--active">
  431. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  432. <label class="md-nav__link md-nav__link--active" for="__toc">
  433. <span class="md-ellipsis">
  434. Tooling
  435. </span>
  436. <span class="md-nav__icon md-icon"></span>
  437. </label>
  438. <a href="./" class="md-nav__link md-nav__link--active">
  439. <span class="md-ellipsis">
  440. Tooling
  441. </span>
  442. </a>
  443. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  444. <label class="md-nav__title" for="__toc">
  445. <span class="md-nav__icon md-icon"></span>
  446. Table of contents
  447. </label>
  448. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  449. <li class="md-nav__item">
  450. <a href="#preloadso" class="md-nav__link">
  451. <span class="md-ellipsis">
  452. preload.so
  453. </span>
  454. </a>
  455. <nav class="md-nav" aria-label="preload.so">
  456. <ul class="md-nav__list">
  457. <li class="md-nav__item">
  458. <a href="#casual-usage" class="md-nav__link">
  459. <span class="md-ellipsis">
  460. casual usage
  461. </span>
  462. </a>
  463. </li>
  464. <li class="md-nav__item">
  465. <a href="#docker-and-podman-usage" class="md-nav__link">
  466. <span class="md-ellipsis">
  467. Docker and Podman usage
  468. </span>
  469. </a>
  470. </li>
  471. <li class="md-nav__item">
  472. <a href="#systemd-unit" class="md-nav__link">
  473. <span class="md-ellipsis">
  474. systemd unit
  475. </span>
  476. </a>
  477. </li>
  478. </ul>
  479. </nav>
  480. </li>
  481. <li class="md-nav__item">
  482. <a href="#misc" class="md-nav__link">
  483. <span class="md-ellipsis">
  484. Misc
  485. </span>
  486. </a>
  487. </li>
  488. </ul>
  489. </nav>
  490. </li>
  491. <li class="md-nav__item">
  492. <a href="../usage_patterns/" class="md-nav__link">
  493. <span class="md-ellipsis">
  494. Usage Patterns
  495. </span>
  496. </a>
  497. </li>
  498. <li class="md-nav__item md-nav__item--nested">
  499. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_15" >
  500. <label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
  501. <span class="md-ellipsis">
  502. FAQ
  503. </span>
  504. <span class="md-nav__icon md-icon"></span>
  505. </label>
  506. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
  507. <label class="md-nav__title" for="__nav_15">
  508. <span class="md-nav__icon md-icon"></span>
  509. FAQ
  510. </label>
  511. <ul class="md-nav__list" data-md-scrollfix>
  512. <li class="md-nav__item">
  513. <a href="../faq/reliability_and_scalability/" class="md-nav__link">
  514. <span class="md-ellipsis">
  515. Reliability and Scalability
  516. </span>
  517. </a>
  518. </li>
  519. <li class="md-nav__item">
  520. <a href="../faq/usage_and_functionality/" class="md-nav__link">
  521. <span class="md-ellipsis">
  522. Usage and Functionality
  523. </span>
  524. </a>
  525. </li>
  526. <li class="md-nav__item">
  527. <a href="../faq/configuration_and_policies/" class="md-nav__link">
  528. <span class="md-ellipsis">
  529. Configuration and Policies
  530. </span>
  531. </a>
  532. </li>
  533. <li class="md-nav__item">
  534. <a href="../faq/compatibility_and_integration/" class="md-nav__link">
  535. <span class="md-ellipsis">
  536. Compatibility and Integration
  537. </span>
  538. </a>
  539. </li>
  540. <li class="md-nav__item">
  541. <a href="../faq/recommendations_and_warnings/" class="md-nav__link">
  542. <span class="md-ellipsis">
  543. Recommendations and Warnings
  544. </span>
  545. </a>
  546. </li>
  547. <li class="md-nav__item">
  548. <a href="../faq/technical_behavior_and_limitations/" class="md-nav__link">
  549. <span class="md-ellipsis">
  550. Technical Behavior and Limitations
  551. </span>
  552. </a>
  553. </li>
  554. <li class="md-nav__item">
  555. <a href="../faq/limit_drive_spinup/" class="md-nav__link">
  556. <span class="md-ellipsis">
  557. Limiting drive spinup
  558. </span>
  559. </a>
  560. </li>
  561. </ul>
  562. </nav>
  563. </li>
  564. <li class="md-nav__item">
  565. <a href="../related_projects/" class="md-nav__link">
  566. <span class="md-ellipsis">
  567. Related Projects
  568. </span>
  569. </a>
  570. </li>
  571. <li class="md-nav__item">
  572. <a href="../media_and_publicity/" class="md-nav__link">
  573. <span class="md-ellipsis">
  574. Media and Publicity
  575. </span>
  576. </a>
  577. </li>
  578. <li class="md-nav__item">
  579. <a href="../support/" class="md-nav__link">
  580. <span class="md-ellipsis">
  581. Support
  582. </span>
  583. </a>
  584. </li>
  585. <li class="md-nav__item">
  586. <a href="../sponsorship_and_donations/" class="md-nav__link">
  587. <span class="md-ellipsis">
  588. Sponsorship and Donations
  589. </span>
  590. </a>
  591. </li>
  592. </ul>
  593. </nav>
  594. </div>
  595. </div>
  596. </div>
  597. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  598. <div class="md-sidebar__scrollwrap">
  599. <div class="md-sidebar__inner">
  600. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  601. <label class="md-nav__title" for="__toc">
  602. <span class="md-nav__icon md-icon"></span>
  603. Table of contents
  604. </label>
  605. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  606. <li class="md-nav__item">
  607. <a href="#preloadso" class="md-nav__link">
  608. <span class="md-ellipsis">
  609. preload.so
  610. </span>
  611. </a>
  612. <nav class="md-nav" aria-label="preload.so">
  613. <ul class="md-nav__list">
  614. <li class="md-nav__item">
  615. <a href="#casual-usage" class="md-nav__link">
  616. <span class="md-ellipsis">
  617. casual usage
  618. </span>
  619. </a>
  620. </li>
  621. <li class="md-nav__item">
  622. <a href="#docker-and-podman-usage" class="md-nav__link">
  623. <span class="md-ellipsis">
  624. Docker and Podman usage
  625. </span>
  626. </a>
  627. </li>
  628. <li class="md-nav__item">
  629. <a href="#systemd-unit" class="md-nav__link">
  630. <span class="md-ellipsis">
  631. systemd unit
  632. </span>
  633. </a>
  634. </li>
  635. </ul>
  636. </nav>
  637. </li>
  638. <li class="md-nav__item">
  639. <a href="#misc" class="md-nav__link">
  640. <span class="md-ellipsis">
  641. Misc
  642. </span>
  643. </a>
  644. </li>
  645. </ul>
  646. </nav>
  647. </div>
  648. </div>
  649. </div>
  650. <div class="md-content" data-md-component="content">
  651. <article class="md-content__inner md-typeset">
  652. <a href="https://github.com/trapexit/mergerfs/edit/master/mkdocs/docs/tooling.md" title="Edit this page" class="md-content__button md-icon">
  653. <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>
  654. </a>
  655. <a href="https://github.com/trapexit/mergerfs/raw/master/mkdocs/docs/tooling.md" title="View source of this page" class="md-content__button md-icon">
  656. <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>
  657. </a>
  658. <h1 id="tooling">Tooling</h1>
  659. <h2 id="preloadso">preload.so</h2>
  660. <p>EXPERIMENTAL</p>
  661. <p>For some time there has been work to enable passthrough IO in
  662. FUSE. Passthrough IO would allow for near native performance with
  663. regards to reads and writes (at the expense of certain mergerfs
  664. features.) In Linux v6.9 that feature made its way into the kernel
  665. however in a somewhat limited form which is incompatible with aspects
  666. of how mergerfs currently functions. While work will continue to
  667. support passthrough IO in mergerfs this library was created to offer
  668. similar functionality in a more limited way.</p>
  669. <p><code>/usr/lib/mergerfs/preload.so</code></p>
  670. <p>This <a href="https://man7.org/linux/man-pages/man8/ld.so.8.html#ENVIRONMENT">preloadable
  671. library</a>
  672. overrides the creation and opening of files in order to simulate
  673. passthrough file IO. It catches the open/creat/fopen calls, has
  674. mergerfs do the call, queries mergerfs for the branch the file exists
  675. on, reopens the file on the underlying filesystem and returns that
  676. instead. Meaning that you will get native read/write performance
  677. because mergerfs is no longer part of the workflow. Keep in mind that
  678. this also means certain mergerfs features that work by interrupting
  679. the read/write workflow, such as <code>moveonenospc</code>, will no longer work.</p>
  680. <p>Also, understand that this will only work on dynamically linked
  681. software. Anything statically compiled will not work. Many GoLang and
  682. Rust apps are statically compiled.</p>
  683. <p>The library will not interfere with non-mergerfs filesystems. The
  684. library is written to always fallback to returning the mergerfs opened
  685. file on error.</p>
  686. <p>While the library was written to account for a number of edgecases
  687. there could be some yet accounted for so please report any oddities.</p>
  688. <p>Thank you to
  689. <a href="https://github.com/nohajc/mergerfs-io-passthrough">nohajc</a> for
  690. prototyping the idea.</p>
  691. <h3 id="casual-usage">casual usage</h3>
  692. <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><span class="nv">LD_PRELOAD</span><span class="o">=</span>/usr/lib/mergerfs/preload.so<span class="w"> </span>touch<span class="w"> </span>/mnt/mergerfs/filename
  693. </span></code></pre></div>
  694. <p>Or run <code>export LD_PRELOAD=/usr/lib/mergerfs/preload.so</code> in your shell
  695. or place it in your shell config file to have it be picked up by all
  696. software ran from your shell.</p>
  697. <h3 id="docker-and-podman-usage">Docker and Podman usage</h3>
  698. <p>Assume <code>/mnt/fs0</code> and <code>/mnt/fs1</code> are pooled with mergerfs at <code>/media</code>.</p>
  699. <p>All mergerfs branch paths <em>must</em> be bind mounted into the container at
  700. the same path as found on the host so the preload library can see
  701. them.</p>
  702. <p><strong>NOTE:</strong> Since a container can have its own OS setup there is no
  703. guarentee that <code>preload.so</code> from the host install will be compatible
  704. with the loader found in the container. If that is true it simply
  705. won't work and shouldn't cause any issues.</p>
  706. <div class="language-sh highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>docker<span class="w"> </span>run<span class="w"> </span><span class="se">\</span>
  707. </span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span>-e<span class="w"> </span><span class="nv">LD_PRELOAD</span><span class="o">=</span>/usr/lib/mergerfs/preload.so<span class="w"> </span><span class="se">\</span>
  708. </span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span>-v<span class="w"> </span>/usr/lib/mergerfs/preload.so:/usr/lib/mergerfs/preload.so:ro<span class="w"> </span><span class="se">\</span>
  709. </span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span>-v<span class="w"> </span>/media:/media<span class="w"> </span><span class="se">\</span>
  710. </span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span>-v<span class="w"> </span>/mnt:/mnt<span class="w"> </span><span class="se">\</span>
  711. </span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span>ubuntu:latest<span class="w"> </span><span class="se">\</span>
  712. </span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span>bash
  713. </span></code></pre></div>
  714. <p>or more explicitly</p>
  715. <div class="language-sh highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>docker<span class="w"> </span>run<span class="w"> </span><span class="se">\</span>
  716. </span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span>-e<span class="w"> </span><span class="nv">LD_PRELOAD</span><span class="o">=</span>/usr/lib/mergerfs/preload.so<span class="w"> </span><span class="se">\</span>
  717. </span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span>-v<span class="w"> </span>/usr/lib/mergerfs/preload.so:/usr/lib/mergerfs/preload.so:ro<span class="w"> </span><span class="se">\</span>
  718. </span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span>-v<span class="w"> </span>/media:/media<span class="w"> </span><span class="se">\</span>
  719. </span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span>-v<span class="w"> </span>/mnt/fs0:/mnt/fs0<span class="w"> </span><span class="se">\</span>
  720. </span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span>-v<span class="w"> </span>/mnt/fs1:/mnt/fs1<span class="w"> </span><span class="se">\</span>
  721. </span><span id="__span-2-7"><a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span>ubuntu:latest<span class="w"> </span><span class="se">\</span>
  722. </span><span id="__span-2-8"><a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span>bash
  723. </span></code></pre></div>
  724. <h3 id="systemd-unit">systemd unit</h3>
  725. <p>Use the <code>Environment</code> option to set the LD_PRELOAD variable.</p>
  726. <ul>
  727. <li><a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#Command%20lines">https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#Command%20lines</a></li>
  728. <li><a href="https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service">https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service</a></li>
  729. </ul>
  730. <div class="language-text highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>[Service]
  731. </span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>Environment=LD_PRELOAD=/usr/lib/mergerfs/preload.so
  732. </span></code></pre></div>
  733. <h2 id="misc">Misc</h2>
  734. <ul>
  735. <li>https://github.com/trapexit/mergerfs-tools</li>
  736. <li>mergerfs.ctl: A tool to make it easier to query and configure mergerfs at runtime</li>
  737. <li>mergerfs.fsck: Provides permissions and ownership auditing and the ability to fix them</li>
  738. <li>mergerfs.dedup: Will help identify and optionally remove duplicate files</li>
  739. <li>mergerfs.dup: Ensure there are at least N copies of a file across the pool</li>
  740. <li>mergerfs.balance: Rebalance files across filesystems by moving them from the most filled to the least filled</li>
  741. <li>mergerfs.consolidate: move files within a single mergerfs directory to the filesystem with most free space</li>
  742. <li>https://github.com/trapexit/scorch</li>
  743. <li>scorch: A tool to help discover silent corruption of files and keep track of files</li>
  744. <li>https://github.com/trapexit/bbf</li>
  745. <li>bbf (bad block finder): a tool to scan for and 'fix' hard drive bad blocks and find the files using those blocks</li>
  746. </ul>
  747. </article>
  748. </div>
  749. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  750. </div>
  751. <button type="button" class="md-top md-icon" data-md-component="top" hidden>
  752. <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>
  753. Back to top
  754. </button>
  755. </main>
  756. <footer class="md-footer">
  757. <nav class="md-footer__inner md-grid" aria-label="Footer" >
  758. <a href="../benchmarking/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Benchmarking">
  759. <div class="md-footer__button md-icon">
  760. <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>
  761. </div>
  762. <div class="md-footer__title">
  763. <span class="md-footer__direction">
  764. Previous
  765. </span>
  766. <div class="md-ellipsis">
  767. Benchmarking
  768. </div>
  769. </div>
  770. </a>
  771. <a href="../usage_patterns/" class="md-footer__link md-footer__link--next" aria-label="Next: Usage Patterns">
  772. <div class="md-footer__title">
  773. <span class="md-footer__direction">
  774. Next
  775. </span>
  776. <div class="md-ellipsis">
  777. Usage Patterns
  778. </div>
  779. </div>
  780. <div class="md-footer__button md-icon">
  781. <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>
  782. </div>
  783. </a>
  784. </nav>
  785. <div class="md-footer-meta md-typeset">
  786. <div class="md-footer-meta__inner md-grid">
  787. <div class="md-copyright">
  788. Made with
  789. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  790. Material for MkDocs
  791. </a>
  792. </div>
  793. </div>
  794. </div>
  795. </footer>
  796. </div>
  797. <div class="md-dialog" data-md-component="dialog">
  798. <div class="md-dialog__inner md-typeset"></div>
  799. </div>
  800. <script id="__config" type="application/json">{"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", "toc.follow"], "search": "../assets/javascripts/workers/search.f8cc74c7.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>
  801. <script src="../assets/javascripts/bundle.60a45f97.min.js"></script>
  802. </body>
  803. </html>