mirror of https://github.com/trapexit/mergerfs.git
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.
1594 lines
39 KiB
1594 lines
39 KiB
|
|
<!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/pages/documentation/caching/">
|
|
|
|
|
|
<link rel="prev" href="../tooling/">
|
|
|
|
|
|
<link rel="next" href="../performance/">
|
|
|
|
|
|
<link rel="icon" href="../../../assets/images/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
|
|
|
|
|
|
|
|
<title>CACHING - mergerfs</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../../assets/stylesheets/main.6f8fc17f.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">
|
|
|
|
|
|
<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="#caching" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</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.jpeg" 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">
|
|
|
|
CACHING
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<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">
|
|
|
|
<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>
|
|
|
|
</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 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>
|
|
</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.jpeg" 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 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>
|
|
</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">
|
|
About
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Documentation
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Documentation
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../how_it_works/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
HOW IT WORKS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</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="../basic_setup/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
BASIC SETUP
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../options/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
OPTIONS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../functions_categories_and_policies/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
FUNCTIONS, CATEGORIES and POLICIES
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../error_handling/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
ERROR HANDLING
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../install/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
INSTALL
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../build/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
BUILD
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../upgrade/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
UPGRADE
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../runtime_interfaces/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
RUNTIME INTERFACES
|
|
</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 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">
|
|
CACHING
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
CACHING
|
|
</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="#page-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
page caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#entry-attribute-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
entry & attribute caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#writeback-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
writeback caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#statfs-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
statfs caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#symlink-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
symlink caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#readdir-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
readdir caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#tiered-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
tiered caching
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="tiered caching">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#time-based-expiring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
time based expiring
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#percentage-full-expiring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
percentage full expiring
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</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="../benchmarking/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
BENCHMARKING
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../tips_notes/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
TIPS / NOTES
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../known_issues_bugs/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
KNOWN ISSUES / BUGS
|
|
</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="../mergerfs_versus_x/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
mergerfs versus X
|
|
</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="../links/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
LINKS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</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">
|
|
FAQ
|
|
</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>
|
|
FAQ
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<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/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/general_information_and_overview/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
General Information and Overview
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../faq/recommendations_and_warnings/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Recommendations and Warnings
|
|
</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/usage_and_functionality/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Usage and Functionality
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Wiki
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Wiki
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/projects_using_mergerfs/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Projects incorporating mergerfs directly in some way
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/installing_mergerfs_on_a_synology_nas/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Installing mergerfs on a synology nas
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/testimonials/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Testimonials
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/real_world_deployments/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
trapexit's (mergerfs' author)
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/systemd/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
systemd
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/kernel_issues_and_bugs/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Kernel issues and bugs
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/featured_media_and_publicity/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Featured Media and Publicity
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/limit_drive_spinup/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Limit drive spinup
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../wiki/links/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Links
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</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="#page-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
page caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#entry-attribute-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
entry & attribute caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#writeback-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
writeback caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#statfs-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
statfs caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#symlink-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
symlink caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#readdir-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
readdir caching
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#tiered-caching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
tiered caching
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="tiered caching">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#time-based-expiring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
time based expiring
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#percentage-full-expiring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
percentage full expiring
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</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/tree/master/mkdocs/docs/pages/documentation/caching.md" title="Edit this page" class="md-content__button md-icon">
|
|
|
|
<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>
|
|
|
|
|
|
|
|
|
|
<h1 id="caching">CACHING</h1>
|
|
<h4 id="page-caching">page caching</h4>
|
|
<p>https://en.wikipedia.org/wiki/Page_cache</p>
|
|
<ul>
|
|
<li>cache.files=off: Disables page caching. Underlying files cached,
|
|
mergerfs files are not.</li>
|
|
<li>cache.files=partial: Enables page caching. Underlying files cached,
|
|
mergerfs files cached while open.</li>
|
|
<li>cache.files=full: Enables page caching. Underlying files cached,
|
|
mergerfs files cached across opens.</li>
|
|
<li>cache.files=auto-full: Enables page caching. Underlying files
|
|
cached, mergerfs files cached across opens if mtime and size are
|
|
unchanged since previous open.</li>
|
|
<li>cache.files=libfuse: follow traditional libfuse <code>direct_io</code>,
|
|
<code>kernel_cache</code>, and <code>auto_cache</code> arguments.</li>
|
|
<li>cache.files=per-process: Enable page caching (equivalent to
|
|
<code>cache.files=partial</code>) only for processes whose 'comm' name matches
|
|
one of the values defined in <code>cache.files.process-names</code>. If the
|
|
name does not match the file open is equivalent to
|
|
<code>cache.files=off</code>.</li>
|
|
</ul>
|
|
<p>FUSE, which mergerfs uses, offers a number of page caching modes. mergerfs tries to simplify their use via the <code>cache.files</code>
|
|
option. It can and should replace usage of <code>direct_io</code>,
|
|
<code>kernel_cache</code>, and <code>auto_cache</code>.</p>
|
|
<p>Due to mergerfs using FUSE and therefore being a userland process
|
|
proxying existing filesystems the kernel will double cache the content
|
|
being read and written through mergerfs. Once from the underlying
|
|
filesystem and once from mergerfs (it sees them as two separate
|
|
entities). Using <code>cache.files=off</code> will keep the double caching from
|
|
happening by disabling caching of mergerfs but this has the side
|
|
effect that <em>all</em> read and write calls will be passed to mergerfs
|
|
which may be slower than enabling caching, you lose shared <code>mmap</code>
|
|
support which can affect apps such as rtorrent, and no read-ahead will
|
|
take place. The kernel will still cache the underlying filesystem data
|
|
but that only helps so much given mergerfs will still process all
|
|
requests.</p>
|
|
<p>If you do enable file page caching,
|
|
<code>cache.files=partial|full|auto-full</code>, you should also enable
|
|
<code>dropcacheonclose</code> which will cause mergerfs to instruct the kernel to
|
|
flush the underlying file's page cache when the file is closed. This
|
|
behavior is the same as the rsync fadvise / drop cache patch and Feh's
|
|
nocache project.</p>
|
|
<p>If most files are read once through and closed (like media) it is best
|
|
to enable <code>dropcacheonclose</code> regardless of caching mode in order to
|
|
minimize buffer bloat.</p>
|
|
<p>It is difficult to balance memory usage, cache bloat & duplication,
|
|
and performance. Ideally, mergerfs would be able to disable caching for
|
|
the files it reads/writes but allow page caching for itself. That
|
|
would limit the FUSE overhead. However, there isn't a good way to
|
|
achieve this. It would need to open all files with O_DIRECT which
|
|
places limitations on what the underlying filesystems would be
|
|
supported and complicates the code.</p>
|
|
<p>kernel documentation: https://www.kernel.org/doc/Documentation/filesystems/fuse-io.txt</p>
|
|
<h4 id="entry-attribute-caching">entry & attribute caching</h4>
|
|
<p>Given the relatively high cost of FUSE due to the kernel <-> userspace
|
|
round trips there are kernel side caches for file entries and
|
|
attributes. The entry cache limits the <code>lookup</code> calls to mergerfs
|
|
which ask if a file exists. The attribute cache limits the need to
|
|
make <code>getattr</code> calls to mergerfs which provide file attributes (mode,
|
|
size, type, etc.). As with the page cache these should not be used if
|
|
the underlying filesystems are being manipulated at the same time as
|
|
it could lead to odd behavior or data corruption. The options for
|
|
setting these are <code>cache.entry</code> and <code>cache.negative_entry</code> for the
|
|
entry cache and <code>cache.attr</code> for the attributes
|
|
cache. <code>cache.negative_entry</code> refers to the timeout for negative
|
|
responses to lookups (non-existent files).</p>
|
|
<h4 id="writeback-caching">writeback caching</h4>
|
|
<p>When <code>cache.files</code> is enabled the default is for it to perform
|
|
writethrough caching. This behavior won't help improve performance as
|
|
each write still goes one for one through the filesystem. By enabling
|
|
the FUSE writeback cache small writes may be aggregated by the kernel
|
|
and then sent to mergerfs as one larger request. This can greatly
|
|
improve the throughput for apps which write to files
|
|
inefficiently. The amount the kernel can aggregate is limited by the
|
|
size of a FUSE message. Read the <code>fuse_msg_size</code> section for more
|
|
details.</p>
|
|
<p>There is a small side effect as a result of enabling writeback
|
|
caching. Underlying files won't ever be opened with O_APPEND or
|
|
O_WRONLY. The former because the kernel then manages append mode and
|
|
the latter because the kernel may request file data from mergerfs to
|
|
populate the write cache. The O_APPEND change means that if a file is
|
|
changed outside of mergerfs it could lead to corruption as the kernel
|
|
won't know the end of the file has changed. That said any time you use
|
|
caching you should keep from using the same file outside of mergerfs
|
|
at the same time.</p>
|
|
<p>Note that if an application is properly sizing writes then writeback
|
|
caching will have little or no effect. It will only help with writes
|
|
of sizes below the FUSE message size (128K on older kernels, 1M on
|
|
newer).</p>
|
|
<h4 id="statfs-caching">statfs caching</h4>
|
|
<p>Of the syscalls used by mergerfs in policies the <code>statfs</code> / <code>statvfs</code>
|
|
call is perhaps the most expensive. It's used to find out the
|
|
available space of a filesystem and whether it is mounted
|
|
read-only. Depending on the setup and usage pattern these queries can
|
|
be relatively costly. When <code>cache.statfs</code> is enabled all calls to
|
|
<code>statfs</code> by a policy will be cached for the number of seconds its set
|
|
to.</p>
|
|
<p>Example: If the create policy is <code>mfs</code> and the timeout is 60 then for
|
|
that 60 seconds the same filesystem will be returned as the target for
|
|
creates because the available space won't be updated for that time.</p>
|
|
<h4 id="symlink-caching">symlink caching</h4>
|
|
<p>As of version 4.20 Linux supports symlink caching. Significant
|
|
performance increases can be had in workloads which use a lot of
|
|
symlinks. Setting <code>cache.symlinks=true</code> will result in requesting
|
|
symlink caching from the kernel only if supported. As a result it's
|
|
safe to enable it on systems prior to 4.20. That said it is disabled
|
|
by default for now. You can see if caching is enabled by querying the
|
|
xattr <code>user.mergerfs.cache.symlinks</code> but given it must be requested at
|
|
startup you can not change it at runtime.</p>
|
|
<h4 id="readdir-caching">readdir caching</h4>
|
|
<p>As of version 4.20 Linux supports readdir caching. This can have a
|
|
significant impact on directory traversal. Especially when combined
|
|
with entry (<code>cache.entry</code>) and attribute (<code>cache.attr</code>)
|
|
caching. Setting <code>cache.readdir=true</code> will result in requesting
|
|
readdir caching from the kernel on each <code>opendir</code>. If the kernel
|
|
doesn't support readdir caching setting the option to <code>true</code> has no
|
|
effect. This option is configurable at runtime via xattr
|
|
<code>user.mergerfs.cache.readdir</code>.</p>
|
|
<h4 id="tiered-caching">tiered caching</h4>
|
|
<p>Some storage technologies support what some call "tiered" caching. The
|
|
placing of usually smaller, faster storage as a transparent cache to
|
|
larger, slower storage. NVMe, SSD, Optane in front of traditional HDDs
|
|
for instance.</p>
|
|
<p>mergerfs does not natively support any sort of tiered caching. Most
|
|
users have no use for such a feature and its inclusion would
|
|
complicate the code. However, there are a few situations where a cache
|
|
filesystem could help with a typical mergerfs setup.</p>
|
|
<ol>
|
|
<li>Fast network, slow filesystems, many readers: You've a 10+Gbps network
|
|
with many readers and your regular filesystems can't keep up.</li>
|
|
<li>Fast network, slow filesystems, small'ish bursty writes: You have a
|
|
10+Gbps network and wish to transfer amounts of data less than your
|
|
cache filesystem but wish to do so quickly.</li>
|
|
</ol>
|
|
<p>With #1 it's arguable if you should be using mergerfs at all. RAID
|
|
would probably be the better solution. If you're going to use mergerfs
|
|
there are other tactics that may help: spreading the data across
|
|
filesystems (see the mergerfs.dup tool) and setting <code>func.open=rand</code>,
|
|
using <code>symlinkify</code>, or using dm-cache or a similar technology to add
|
|
tiered cache to the underlying device.</p>
|
|
<p>With #2 one could use dm-cache as well but there is another solution
|
|
which requires only mergerfs and a cronjob.</p>
|
|
<ol>
|
|
<li>Create 2 mergerfs pools. One which includes just the slow devices
|
|
and one which has both the fast devices (SSD,NVME,etc.) and slow
|
|
devices.</li>
|
|
<li>The 'cache' pool should have the cache filesystems listed first.</li>
|
|
<li>The best <code>create</code> policies to use for the 'cache' pool would
|
|
probably be <code>ff</code>, <code>epff</code>, <code>lfs</code>, or <code>eplfs</code>. The latter two under
|
|
the assumption that the cache filesystem(s) are far smaller than the
|
|
backing filesystems. If using path preserving policies remember that
|
|
you'll need to manually create the core directories of those paths
|
|
you wish to be cached. Be sure the permissions are in sync. Use
|
|
<code>mergerfs.fsck</code> to check / correct them. You could also set the
|
|
slow filesystems mode to <code>NC</code> though that'd mean if the cache
|
|
filesystems fill you'd get "out of space" errors.</li>
|
|
<li>Enable <code>moveonenospc</code> and set <code>minfreespace</code> appropriately. To make
|
|
sure there is enough room on the "slow" pool you might want to set
|
|
<code>minfreespace</code> to at least as large as the size of the largest
|
|
cache filesystem if not larger. This way in the worst case the
|
|
whole of the cache filesystem(s) can be moved to the other drives.</li>
|
|
<li>Set your programs to use the cache pool.</li>
|
|
<li>Save one of the below scripts or create you're own.</li>
|
|
<li>Use <code>cron</code> (as root) to schedule the command at whatever frequency
|
|
is appropriate for your workflow.</li>
|
|
</ol>
|
|
<h5 id="time-based-expiring">time based expiring</h5>
|
|
<p>Move files from cache to backing pool based only on the last time the
|
|
file was accessed. Replace <code>-atime</code> with <code>-amin</code> if you want minutes
|
|
rather than days. May want to use the <code>fadvise</code> / <code>--drop-cache</code>
|
|
version of rsync or run rsync with the tool "nocache".</p>
|
|
<p><em>NOTE:</em> The arguments to these scripts include the cache
|
|
<strong>filesystem</strong> itself. Not the pool with the cache filesystem. You
|
|
could have data loss if the source is the cache pool.</p>
|
|
<p><a href="https://raw.githubusercontent.com/trapexit/mergerfs/refs/heads/latest-release/tools/mergerfs.time-based-mover">mergerfs.time-based-mover</a></p>
|
|
<h5 id="percentage-full-expiring">percentage full expiring</h5>
|
|
<p>Move the oldest file from the cache to the backing pool. Continue till
|
|
below percentage threshold.</p>
|
|
<p><em>NOTE:</em> The arguments to these scripts include the cache
|
|
<strong>filesystem</strong> itself. Not the pool with the cache filesystem. You
|
|
could have data loss if the source is the cache pool.</p>
|
|
<p><a href="https://raw.githubusercontent.com/trapexit/mergerfs/refs/heads/latest-release/tools/mergerfs.percent-full-mover">mergerfs.percent-full-mover</a></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<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">{"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>
|
|
|
|
|
|
<script src="../../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html>
|