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.
		
		
		
		
		
			
		
			
				
					
					
						
							2555 lines
						
					
					
						
							58 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							2555 lines
						
					
					
						
							58 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/preview/intro_to_filesystems/"> | |
|        | |
|        | |
|         <link rel="prev" href="../terminology/"> | |
|        | |
|        | |
|         <link rel="next" href="../config/options/"> | |
|        | |
|        | |
|       <link rel="icon" href="../logo.png"> | |
|       <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.17"> | |
|      | |
|      | |
|        | |
|         <title>Intro to Filesystems - mergerfs</title> | |
|        | |
|      | |
|      | |
|       <link rel="stylesheet" href="../assets/stylesheets/main.7e37652d.min.css"> | |
|        | |
|          | |
|         <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> | |
|        | |
|        | |
| 
 | |
| 
 | |
|      | |
|      | |
|        | |
|      | |
|      | |
|        | |
|          | |
|          | |
|         <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
|         <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> | |
|         <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> | |
|        | |
|      | |
|      | |
|     <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> | |
|      | |
|        | |
| 
 | |
|      | |
|      | |
|      | |
|   </head> | |
|    | |
|    | |
|      | |
|      | |
|        | |
|      | |
|      | |
|      | |
|      | |
|     <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"> | |
|    | |
|      | |
|     <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |
|     <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |
|     <label class="md-overlay" for="__drawer"></label> | |
|     <div data-md-component="skip"> | |
|        | |
|          | |
|         <a href="#intro-to-filesystems" class="md-skip"> | |
|           Skip to content | |
|         </a> | |
|        | |
|     </div> | |
|     <div data-md-component="announce"> | |
|        | |
|     </div> | |
|      | |
|       <div data-md-color-scheme="default" data-md-component="outdated" hidden> | |
|          | |
|       </div> | |
|      | |
|      | |
|        | |
| 
 | |
|    | |
| 
 | |
| <header class="md-header md-header--shadow" data-md-component="header"> | |
|   <nav class="md-header__inner md-grid" aria-label="Header"> | |
|     <a href=".." title="mergerfs" class="md-header__button md-logo" aria-label="mergerfs" data-md-component="logo"> | |
|        | |
|   <img src="../logo.png" alt="logo"> | |
| 
 | |
|     </a> | |
|     <label class="md-header__button md-icon" for="__drawer"> | |
|        | |
|       <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> | |
|     </label> | |
|     <div class="md-header__title" data-md-component="header-title"> | |
|       <div class="md-header__ellipsis"> | |
|         <div class="md-header__topic"> | |
|           <span class="md-ellipsis"> | |
|             mergerfs | |
|           </span> | |
|         </div> | |
|         <div class="md-header__topic" data-md-component="header-topic"> | |
|           <span class="md-ellipsis"> | |
|              | |
|               Intro to Filesystems | |
|              | |
|           </span> | |
|         </div> | |
|       </div> | |
|     </div> | |
|      | |
|        | |
|         <form class="md-header__option" data-md-component="palette"> | |
|    | |
|      | |
|      | |
|      | |
|     <input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_0"> | |
|      | |
|       <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden> | |
|         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg> | |
|       </label> | |
|      | |
|    | |
|      | |
|      | |
|      | |
|     <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"  aria-label="Switch to dark mode"  type="radio" name="__palette" id="__palette_1"> | |
|      | |
|       <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden> | |
|         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> | |
|       </label> | |
|      | |
|    | |
|      | |
|      | |
|      | |
|     <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo"  aria-label="Switch to system preference"  type="radio" name="__palette" id="__palette_2"> | |
|      | |
|       <label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden> | |
|         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> | |
|       </label> | |
|      | |
|    | |
| </form> | |
|        | |
|      | |
|      | |
|       <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> | |
|      | |
|      | |
|      | |
|        | |
|        | |
|         <label class="md-header__button md-icon" for="__search"> | |
|            | |
|           <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> | |
|         </label> | |
|         <div class="md-search" data-md-component="search" role="dialog"> | |
|   <label class="md-search__overlay" for="__search"></label> | |
|   <div class="md-search__inner" role="search"> | |
|     <form class="md-search__form" name="search"> | |
|       <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> | |
|       <label class="md-search__icon md-icon" for="__search"> | |
|          | |
|         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> | |
|          | |
|         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> | |
|       </label> | |
|       <nav class="md-search__options" aria-label="Search"> | |
|          | |
|           <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> | |
|              | |
|             <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> | |
|           </a> | |
|          | |
|         <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> | |
|            | |
|           <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> | |
|         </button> | |
|       </nav> | |
|        | |
|         <div class="md-search__suggest" data-md-component="search-suggest"></div> | |
|        | |
|     </form> | |
|     <div class="md-search__output"> | |
|       <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> | |
|         <div class="md-search-result" data-md-component="search-result"> | |
|           <div class="md-search-result__meta"> | |
|             Initializing search | |
|           </div> | |
|           <ol class="md-search-result__list" role="presentation"></ol> | |
|         </div> | |
|       </div> | |
|     </div> | |
|   </div> | |
| </div> | |
|        | |
|      | |
|      | |
|       <div class="md-header__source"> | |
|         <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source"> | |
|   <div class="md-source__icon md-icon"> | |
|      | |
|     <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg> | |
|   </div> | |
|   <div class="md-source__repository"> | |
|     mergerfs | |
|   </div> | |
| </a> | |
|       </div> | |
|      | |
|   </nav> | |
|    | |
| </header> | |
|      | |
|     <div class="md-container" data-md-component="container"> | |
|        | |
|        | |
|          | |
|            | |
|          | |
|        | |
|       <main class="md-main" data-md-component="main"> | |
|         <div class="md-main__inner md-grid"> | |
|            | |
|              | |
|                | |
|               <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > | |
|                 <div class="md-sidebar__scrollwrap"> | |
|                   <div class="md-sidebar__inner"> | |
|                      | |
| 
 | |
| 
 | |
| 
 | |
| <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |
|   <label class="md-nav__title" for="__drawer"> | |
|     <a href=".." title="mergerfs" class="md-nav__button md-logo" aria-label="mergerfs" data-md-component="logo"> | |
|        | |
|   <img src="../logo.png" alt="logo"> | |
| 
 | |
|     </a> | |
|     mergerfs | |
|   </label> | |
|    | |
|     <div class="md-nav__source"> | |
|       <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source"> | |
|   <div class="md-source__icon md-icon"> | |
|      | |
|     <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg> | |
|   </div> | |
|   <div class="md-source__repository"> | |
|     mergerfs | |
|   </div> | |
| </a> | |
|     </div> | |
|    | |
|   <ul class="md-nav__list" data-md-scrollfix> | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href=".." class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Home | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../quickstart/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     QuickStart | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|      | |
|      | |
|      | |
|      | |
|      | |
|     <li class="md-nav__item md-nav__item--nested"> | |
|        | |
|          | |
|          | |
|         <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > | |
|          | |
|            | |
|           <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> | |
|              | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Installation | |
|      | |
|   </span> | |
|    | |
| 
 | |
|             <span class="md-nav__icon md-icon"></span> | |
|           </label> | |
|          | |
|         <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> | |
|           <label class="md-nav__title" for="__nav_3"> | |
|             <span class="md-nav__icon md-icon"></span> | |
|             Installation | |
|           </label> | |
|           <ul class="md-nav__list" data-md-scrollfix> | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../setup/installation/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Installation | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../setup/upgrade/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Upgrade | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../setup/build/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Build | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|           </ul> | |
|         </nav> | |
|        | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../terminology/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Terminology | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|      | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item 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"> | |
|     Intro to Filesystems | |
|      | |
|   </span> | |
|    | |
| 
 | |
|           <span class="md-nav__icon md-icon"></span> | |
|         </label> | |
|        | |
|       <a href="./" class="md-nav__link md-nav__link--active"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Intro to Filesystems | |
|      | |
|   </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="#terminology" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Terminology | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#files" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Files | |
|     </span> | |
|   </a> | |
|    | |
|     <nav class="md-nav" aria-label="Files"> | |
|       <ul class="md-nav__list"> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#types" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Types | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#inodes" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       inodes | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#links-names" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       links / names | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#permissions" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       permissions | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#ownership" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       ownership | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#timestamps" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       timestamps | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|       </ul> | |
|     </nav> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#functions" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Functions | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#workflows" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Workflows | |
|     </span> | |
|   </a> | |
|    | |
|     <nav class="md-nav" aria-label="Workflows"> | |
|       <ul class="md-nav__list"> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#creating-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Creating a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#reading-or-writing-to-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Reading or writing to a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#copying-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Copying a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#moving-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Moving a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#summary" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Summary | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|       </ul> | |
|     </nav> | |
|    | |
| </li> | |
|        | |
|     </ul> | |
|    | |
| </nav> | |
|        | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|      | |
|      | |
|      | |
|      | |
|      | |
|     <li class="md-nav__item md-nav__item--nested"> | |
|        | |
|          | |
|          | |
|         <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > | |
|          | |
|            | |
|           <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> | |
|              | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Config | |
|      | |
|   </span> | |
|    | |
| 
 | |
|             <span class="md-nav__icon md-icon"></span> | |
|           </label> | |
|          | |
|         <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> | |
|           <label class="md-nav__title" for="__nav_6"> | |
|             <span class="md-nav__icon md-icon"></span> | |
|             Config | |
|           </label> | |
|           <ul class="md-nav__list" data-md-scrollfix> | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/options/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Options | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/deprecated_options/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Deprecated Options | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/branches/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     branches | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/branches-mount-timeout/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     branches-mount-timeout | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/functions_categories_policies/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     functions, categories and policies | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/minfreespace/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     minfreespace | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/func_readdir/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     func.readdir | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/rename_and_link/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     rename and link | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/moveonenospc/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     moveonenospc | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/cache/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     caching | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/passthrough/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     passthrough | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/readahead/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     readahead | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/inodecalc/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     inodecalc | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/threads/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     threads | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/pin-threads/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     pin-threads | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/link_cow/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     link_cow | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/fuse_msg_size/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     fuse_msg_size | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/follow-symlinks/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     follow-symlinks | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/link-exdev/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     link-exdev | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/rename-exdev/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     rename-exdev | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/symlinkify/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     symlinkify | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/nullrw/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     nullrw | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/xattr/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     xattr | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/nfsopenhack/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     nfsopenhack | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/statfs/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     statfs / statvfs | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/flush-on-close/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     flush-on-close | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/export-support/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     export-support | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../config/kernel-permissions-check/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     kernel-permissions-check | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|           </ul> | |
|         </nav> | |
|        | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../error_handling_and_logging/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Error Handling and Logging | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../resource_usage/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Resource Usage and Management | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../runtime_interface/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Runtime Interface | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../remote_filesystems/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Remote Filesystems | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../tips_notes/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Tips and Notes | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../known_issues_bugs/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Known Issues and Bugs | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../project_comparisons/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Project Comparisons | |
|      | |
|   </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="../performance/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Tweaking Performance | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../tooling/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Tooling | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../extended_usage_patterns/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Extended Usage Patterns | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|      | |
|      | |
|      | |
|      | |
|      | |
|     <li class="md-nav__item md-nav__item--nested"> | |
|        | |
|          | |
|          | |
|         <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_18" > | |
|          | |
|            | |
|           <label class="md-nav__link" for="__nav_18" id="__nav_18_label" tabindex="0"> | |
|              | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     FAQ | |
|      | |
|   </span> | |
|    | |
| 
 | |
|             <span class="md-nav__icon md-icon"></span> | |
|           </label> | |
|          | |
|         <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_18_label" aria-expanded="false"> | |
|           <label class="md-nav__title" for="__nav_18"> | |
|             <span class="md-nav__icon md-icon"></span> | |
|             FAQ | |
|           </label> | |
|           <ul class="md-nav__list" data-md-scrollfix> | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../faq/why_isnt_it_working/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     "Why isn't it working?" | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../faq/reliability_and_scalability/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Reliability and Scalability | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../faq/usage_and_functionality/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Usage and Functionality | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../faq/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/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/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/have_you_considered/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     "Have You Considered?" | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|                | |
|                  | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../faq/limit_drive_spinup/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Limiting drive spinup | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|                | |
|              | |
|           </ul> | |
|         </nav> | |
|        | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../related_projects/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Related Projects | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../media_and_publicity/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Media and Publicity | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../support/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Support | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|        | |
|        | |
|    | |
|    | |
|    | |
|    | |
|     <li class="md-nav__item"> | |
|       <a href="../sponsorship_and_donations/" class="md-nav__link"> | |
|          | |
|    | |
|    | |
|   <span class="md-ellipsis"> | |
|     Sponsorship and Donations | |
|      | |
|   </span> | |
|    | |
| 
 | |
|       </a> | |
|     </li> | |
|    | |
| 
 | |
|      | |
|   </ul> | |
| </nav> | |
|                   </div> | |
|                 </div> | |
|               </div> | |
|              | |
|              | |
|                | |
|               <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > | |
|                 <div class="md-sidebar__scrollwrap"> | |
|                   <div class="md-sidebar__inner"> | |
|                      | |
| 
 | |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |
|    | |
|    | |
|    | |
|      | |
|    | |
|    | |
|     <label class="md-nav__title" for="__toc"> | |
|       <span class="md-nav__icon md-icon"></span> | |
|       Table of contents | |
|     </label> | |
|     <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#terminology" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Terminology | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#files" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Files | |
|     </span> | |
|   </a> | |
|    | |
|     <nav class="md-nav" aria-label="Files"> | |
|       <ul class="md-nav__list"> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#types" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Types | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#inodes" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       inodes | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#links-names" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       links / names | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#permissions" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       permissions | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#ownership" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       ownership | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#timestamps" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       timestamps | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|       </ul> | |
|     </nav> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#functions" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Functions | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|        | |
|         <li class="md-nav__item"> | |
|   <a href="#workflows" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Workflows | |
|     </span> | |
|   </a> | |
|    | |
|     <nav class="md-nav" aria-label="Workflows"> | |
|       <ul class="md-nav__list"> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#creating-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Creating a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#reading-or-writing-to-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Reading or writing to a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#copying-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Copying a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#moving-a-file" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Moving a file | |
|     </span> | |
|   </a> | |
|    | |
| </li> | |
|          | |
|           <li class="md-nav__item"> | |
|   <a href="#summary" class="md-nav__link"> | |
|     <span class="md-ellipsis"> | |
|       Summary | |
|     </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/edit/master/mkdocs/docs/intro_to_filesystems.md" title="Edit this page" class="md-content__button md-icon" rel="edit"> | |
|        | |
|       <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> | |
|     </a> | |
|    | |
|    | |
|      | |
|        | |
|      | |
|     <a href="https://github.com/trapexit/mergerfs/raw/master/mkdocs/docs/intro_to_filesystems.md" title="View source of this page" class="md-content__button md-icon"> | |
|        | |
|       <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> | |
|     </a> | |
|    | |
| 
 | |
| 
 | |
| <h1 id="intro-to-filesystems">Intro to Filesystems</h1> | |
| <p><strong>!! WORK IN PROGRESS !!</strong></p> | |
| <p>mergerfs is a union filesystem that manages other filesystems. To | |
| understand how mergerfs works and what the features do and mean you | |
| must understand at least the basics of how filesystems work. Much of | |
| the confusion with mergerfs is based in a lack of knowledge about | |
| filesystems. This section of the documentation is provide a primer for | |
| those needing that knowledge.</p> | |
| <h2 id="terminology">Terminology</h2> | |
| <ul> | |
| <li><a href="https://en.wikipedia.org/wiki/File_system">filesystem</a>: A method, | |
|   data structures, and API used to organize and store files on | |
|   computer storage devices. Often in a tree like structure / hierarchy.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Computer_file">file</a>: A named | |
|   collection of data stored as a unique object. Filesystems can have | |
|   numerous file types and "file" can be used to reference any of those | |
|   types or a "regular" file.</li> | |
| <li>regular file: A file as commonly understood as a named collection of data.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Directory_(computing)">directory</a>: A | |
|   container which holds files and, typically, other directories. In | |
|   Unix/Linux/POSIX filesystems a directory is technically also a file.</li> | |
| <li>root filesystem: The primary filesystem for which other filesystems | |
|   within a system are mounted.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Root_directory">root directory</a>: The | |
|   top-level directory in POSIX and POSIX-like filesystems. Denoted by | |
|   "/".</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Path_(computing)">path</a>: The location | |
|   of a file within a filesystem hierarchy.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Inode">inode</a>: A unique integer | |
|   identifier for a file. Like a primary key. Also used to refer to the | |
|   underlying data structure which stores metadata about the file.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Hard_link">link</a>: A reference to an | |
|   inode in the form of a name. An inode may have 0 to N links.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Symbolic_link">symlink</a>: A file type | |
|   which stores data that may, but is not required to, be a path to | |
|   another file.</li> | |
| <li>device id: A runtime, unique identification value assigned to a | |
|   filesystem.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/Mount_(computing)#MOUNT-POINT">mount | |
|   point</a>: | |
|   The directory where a filesystem is "mounted" or presented within a | |
|   directory hierarchy.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/File-system_permissions">permissions</a>: | |
|   Access rights for files.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/User_identifier">owner</a>: System user | |
|   which has rights to a file.</li> | |
| <li><a href="https://en.wikipedia.org/wiki/File_descriptor">file descriptor</a>: A | |
|   handle used by software, provided by the operating system, to | |
|   reference open files.</li> | |
| </ul> | |
| <h2 id="files">Files</h2> | |
| <p>In POSIX filesystems there are several types of files. Interacting | |
| with them is often similar but they offer different capabilities.</p> | |
| <h3 id="types">Types</h3> | |
| <ul> | |
| <li>regular: The typical file type. An array of data which can be | |
|   randomly accessed.</li> | |
| <li>directory: A container which holds other files including other | |
|   directories allowing for a tree like layout.</li> | |
| <li>symlink: A special file which can store a limited amount of data, | |
|   typically a file path, which may be transparently interpreted by | |
|   some filesystem functions as a path. symlinks do <em>not</em> need to be a | |
|   valid path or a path at all. They can be used as a key/value like | |
|   storage mechanism for instance.</li> | |
| <li>character device: A special file typically representing some | |
|   physical or logical hardware device offering, typically, an | |
|   unbuffered byte stream based interface.</li> | |
| <li>block device: A special file which represents a physical or logical | |
|   hardware device (typically storage) allowing for buffered, | |
|   fixed-size blocks data transfers.</li> | |
| <li>fifo: Also referred to as a "named pipe." A FIFO, First In, First | |
|   Out, is a special file which acts as a non-persistent, | |
|   unidirectional conduit for data.</li> | |
| <li>unix domain socket: Also referred to as a "local socket" or "IPC | |
|   socket" a "UDS" works similar to a FIFO but bidirectional and | |
|   offering more features similar to TCP/IP or UDP/IP but local to the | |
|   system.</li> | |
| </ul> | |
| <h3 id="inodes">inodes</h3> | |
| <p>The inode in practical terms <strong>is</strong> the file within a POSIX | |
| filesystem. It is, typically, a unique identifier within a filesystem | |
| similar to a primary key, represented as a 32 or 64bit integer, which | |
| is what the typical user imagines as the file and its metadata | |
| (ownership, permissions, type, internal filesystem details, etc.).</p> | |
| <p>"typically unique" because some filesystems, such as FUSE based ones, | |
| may reuse an inode value for multiple logical files despite them being | |
| separate entities in the traditional sense. From the user's | |
| perspective multiple files may have the same inode but as mentioned | |
| above the inode is the true reference for a file and the "file" people | |
| interact with is really a link (see below.)</p> | |
| <h3 id="links-names">links / names</h3> | |
| <p>To make inodes more useful and accessible POSIX filesystems provide | |
| "links". A link (or sometimes referred to as "hardlink") is a file | |
| name which references an inode. A single inode can be referenced by | |
| multiple links (except for directories typically.) If the number of | |
| links to an inode reach zero, and no programs have the inode actively | |
| in use, the filesystem will logically remove the inode/file.</p> | |
| <p>When a regular file is first created think of it as the filesystem | |
| first creating the underlying structure, assigning an inode, then | |
| creating a link (name) for it in one shot. When a file is "link"ed to | |
| in the future a new "link" / "name" is being created and referencing | |
| the source file which will then cause the "nlink" value within the | |
| inode, which holds a reference count of the number of links/names that | |
| inode has, to be increased by 1. This is why deleting a file is | |
| referred to as an "unlink". Technically you are requesting the removal | |
| of the "link" and once all the links to a file are removed/unlinked, | |
| and the file is not in active use, the filesystem will then logically | |
| remove the file.</p> | |
| <p>Knowing the details above the API for POSIX filesystems is a little | |
| odd in that the programmer does not first create an inode then a | |
| link. Instead that is done together with no way to do the former alone | |
| despite being able to add additional links afterwards. Modern Linux | |
| filesystems do allow for this using the | |
| <a href="https://man7.org/linux/man-pages/man2/openat.2.html">O_TMPFILE</a> | |
| flag. Since there is no link on creation should the program which | |
| created the file then release the handle on that file the filesystem | |
| would see it has no references and remove it. To keep the temporary | |
| file around the program must explicitly create a link.</p> | |
| <h3 id="permissions">permissions</h3> | |
| <p>File permissions are a security mechanism and apply to all files and | |
| directories. They, in combination with ownership information, dictate | |
| who is allowed to read, write, and execute a file (as well as some | |
| other niche allowances and behaviors.)</p> | |
| <p>While there are more advanced and complicated forms of permissioning | |
| the traditional POSIX permissions come in the form of 3 sets of 3 | |
| permissions (the read, write, and execute.) One set for the individual | |
| user owner of the file, one for the group owner, and one for "others".</p> | |
| <p>Execute in POSIX systems indicates that a regular file is a piece of | |
| software and can be run (like a Windows ".exe" file) and for | |
| directories means you are allowed to list the contents. A directory | |
| can be marked as "read" and not "executable" to allow users to access | |
| content within the directory but not list it in a soft form of | |
| security through obscurity. You must know the path and name of the | |
| file to read it and can not simply search for it.</p> | |
| <h3 id="ownership">ownership</h3> | |
| <p>Each file has 2 owner values. The individual user identifier and the | |
| group identifier. These values are the raw integer value known to the | |
| kernel and not the human readable user name or group name most people | |
| typically use. In fact the kernel has no awareness of the human | |
| readable identifiers. Those are managed entirely by userspace. This is | |
| why if you mount a filesystem on a different system with different | |
| users tools like <code>ls</code> may report different user names or only show | |
| integer values for owners because the value stored in the inode is | |
| "1000" and the name associated with integer 1000 on system A is | |
| different from system B (or may not exist at all.)</p> | |
| <h3 id="timestamps">timestamps</h3> | |
| <ul> | |
| <li>mtime: The time the file <em>data</em> was last modified. Can be explicitly modified.</li> | |
| <li>ctime: The time the file <em>metadata</em> was last modified. Can not be modified.</li> | |
| <li>atime: The time the file was last accessed. Note that Linux | |
|   generally uses a heuristic to update atime so that it does not in | |
|   fact have to write to the filesystem every time a file is | |
|   accessed. Can be explicitly modified.</li> | |
| <li>btime: The "birth" time of the file. Only available in certain | |
|   filesystems and via a newer system call. Can not be modified.</li> | |
| </ul> | |
| <h2 id="functions">Functions</h2> | |
| <ul> | |
| <li>open():</li> | |
| <li>creat():</li> | |
| <li>close():</li> | |
| <li>opendir():</li> | |
| <li>readdir():</li> | |
| <li>closedir():</li> | |
| <li>mkdir():</li> | |
| <li>link():</li> | |
| <li>unlink():</li> | |
| <li>symlink():</li> | |
| <li>rename():</li> | |
| <li>read():</li> | |
| <li>write():</li> | |
| <li>lseek():</li> | |
| <li>tell():</li> | |
| <li>stat():</li> | |
| </ul> | |
| <h2 id="workflows">Workflows</h2> | |
| <p>Filesystems tend to be | |
| <a href="../faq/technical_behavior_and_limitations/#how-does-mergerfs-handle-moving-and-copying-of-files">misunderstood</a>. A | |
| number of behaviors users are familiar with are actually high level | |
| concepts which are made up of numerous steps/functions. As a result | |
| high level context that users expect to be available to mergerfs when | |
| certain actions are taken and decisions made are in fact not | |
| available. Below are explanations of a number of those situations.</p> | |
| <h3 id="creating-a-file">Creating a file</h3> | |
| <p><a href="https://www.man7.org/linux/man-pages/man3/creat.3p.html">Creating</a> a | |
| file can range from a single call to a semi-complex procedure | |
| depending on the requirements and expectations of the calling | |
| application.</p> | |
| <p>Most important to understand is that when a file is created there is | |
| very limited information needed / provided. The file path, some flags | |
| to control a bit how the file is created and if it is to be for | |
| reading and/or writing, and the permissions. mergerfs knows a bit more | |
| details like which user id is making the request and from what process | |
| but that is all the data immediately available. There is no size. The | |
| initial size is always zero. Any data that may be written to the file | |
| would come in the future via other function calls. The source of that | |
| data is completely unknown.</p> | |
| <p>Keep in mind that while there exists this ability to create a file in | |
| a single call to the operating system that call has numerous | |
| aspects which my be exploitable by malicious software.</p> | |
| <p>If software wishes to create a file in more secure manner it must do | |
| some form of the following.</p> | |
| <ol> | |
| <li>Attempt to open the directory where you wish to create the file.</li> | |
| <li>If that succeeds check the directory to ensure it is the directory | |
| you expect it to be. Checking ownership, permissions, perhaps | |
| existence of other files, the filesystem, etc.</li> | |
| <li>Using the handle to the directory, attempt to open the file using a | |
| flag which make the open fail should a file name/link already exist | |
| with that same name. Also set the permissions to the absolute minimum | |
| possible to ensure no interference from others.</li> | |
| <li>If it succeeds then continue on with whatever you had planned. If | |
| it fails try to unlink the unexpected file and try again at step 3. If | |
| it fails multiple times then something is suspicious and the program | |
| should stop trying to create the file and report an error.</li> | |
| </ol> | |
| <p>The above can be made even more involved as you will see below.</p> | |
| <h3 id="reading-or-writing-to-a-file">Reading or writing to a file</h3> | |
| <p>To write:</p> | |
| <ol> | |
| <li>Assuming the file is already created/opened...</li> | |
| <li>Allocate memory to hold a portion of the data.</li> | |
| <li>Fill the memory with the data to write from wherever it may come | |
|    from. Another file, network, programmatically generated, etc.</li> | |
| <li>Call <code>write()</code> function on the open file pointing to the memory to | |
|    write and how much to write.</li> | |
| <li>The kernel will take the request and attempt it. On success it will | |
|    report back to the program how much was written from 1 byte to the | |
|    amount requested. A write of fewer than the requested amount is | |
|    called a <code>short write.</code></li> | |
| <li>If a short write occurred the program must then adjust the data to | |
|    ensure it doesn't write the same data again and lower the amount to | |
|    write by the previously written amount and attempt another | |
|    write. Continuing this till there is nothing left to write. A short | |
|    write could also mean that the filesystem has no more available | |
|    space and following write requests may fail completely.</li> | |
| <li>Go back to step 2 or 3 and do it all again with any additional data | |
|    to write.</li> | |
| <li>If at any time there is an error it may be necessary to query the | |
|    size of the file or other details to know how to continue depending | |
|    on the needs of the program.</li> | |
| </ol> | |
| <p>Reading is similar and <code>short reads</code> are also possible.</p> | |
| <h3 id="copying-a-file">Copying a file</h3> | |
| <p>The "proper" way to copy a file is quite involved.</p> | |
| <ol> | |
| <li>Open the source file. Do so with certain flags to ensure it is the | |
|    type of file you expect. You may also need to perform a similar | |
|    "open directory, check things out, then open file" workflow as | |
|    mentioned above for security purposes.</li> | |
| <li><code>stat</code> the file to get its metadata such as the file size, | |
|    timestamps, etc.</li> | |
| <li>Securely open a file as described previously. The name of the file | |
|    should not be that of the destination but a temporary file name | |
|    with some amount of randomness. Often also making it "hidden" by | |
|    prepending a "." to it.</li> | |
| <li>In a loop read data from the source file and write it to the | |
|    temporary file as described above. There are some platform specific | |
|    ways to copy the data which may be tried first such as | |
|    FICLONE/reflink which takes advantage of CoW (copy-on-write) | |
|    filesystem features. Falling back to the read then write loop if | |
|    necessary.</li> | |
| <li>Request a list of all the extended attribute keys from the source | |
|    file and one by one query the value. For each key value pair | |
|    attempt to write it to the destination file.</li> | |
| <li>Request file attributes from the source file and write them to the | |
|    destination file but first filtering out flags such as "immutable" | |
|    as that would make it impossible to make further changes.</li> | |
| <li>Using the details captured in step 2 change the ownership to the | |
|    destination file to match the source.</li> | |
| <li>Using the details captured in step 2 change the permissions (mode) | |
|    of the destination file to match the source.</li> | |
| <li>Using the details captured in step 2 change the mtime and atime of | |
|    the destination to match the source.</li> | |
| <li>Query the source file's metadata again as in step 2. Using those | |
|    details as well as those from step 2 check the source file to see | |
|    if it may have changed since the copy procedure started. If it had | |
|    determine the changes and go back to step 4. Perhaps unlinking the | |
|    temporary file and going back to step 2.</li> | |
| <li>Ensure the data and metadata are flushed to the storage device by | |
|    calling appropriate sync functions.</li> | |
| <li><code>rename</code> the file from the temporary name to the destination name.</li> | |
| <li>If the file had a special flag such as the immutable attribute set | |
|     then set such attribute.</li> | |
| <li>Close the destination and source files.</li> | |
| </ol> | |
| <p>There can be additional steps too depending on the platform, available | |
| features, and safety concerns. For instance it might be possible to | |
| put a lock or lease on the source file to limit possibility of | |
| changes while the copy occurs.</p> | |
| <h3 id="moving-a-file">Moving a file</h3> | |
| <p>The moving of a file is similar to copying a file.</p> | |
| <ol> | |
| <li>Attempt a <code>rename</code> between source and destination. If it succeeds, | |
|    done. Note that the rename itself may require setup similar to | |
|    securely opening or creating a file. IE... requiring the opening of | |
|    the source and destination directories, confirming they are what is | |
|    expected, then issuing the actual rename.</li> | |
| <li>If it fails... perform a copy of the file as described above.</li> | |
| <li>After the rename and close'ing of the copy <code>unlink</code> the source | |
|    file.</li> | |
| </ol> | |
| <h3 id="summary">Summary</h3> | |
| <p>As seen in the above descriptions these high level concepts users | |
| perceive are in fact involved sets of steps with loops and conditional | |
| behaviors. All leveraging low level functions which alone have very | |
| little context. For instance: there is no practical way of knowing a | |
| file is being copied or from where. There is no way to decide at | |
| creation time what to do based on size because its size doesn't exist | |
| yet. Even making a decision based on the destination file name is | |
| complicated by the fact that "well written" software will create | |
| randomly named temporary files and then rename the file. Only at | |
| <code>rename</code> would you know the name as the end user chose and at that | |
| point it may be too late.</p> | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|                  | |
|               </article> | |
|             </div> | |
|            | |
|            | |
| <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> | |
|         </div> | |
|          | |
|           <button type="button" class="md-top md-icon" data-md-component="top" hidden> | |
|    | |
|   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> | |
|   Back to top | |
| </button> | |
|          | |
|       </main> | |
|        | |
|         <footer class="md-footer"> | |
|    | |
|      | |
|        | |
|       <nav class="md-footer__inner md-grid" aria-label="Footer" > | |
|          | |
|            | |
|           <a href="../terminology/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Terminology"> | |
|             <div class="md-footer__button md-icon"> | |
|                | |
|               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> | |
|             </div> | |
|             <div class="md-footer__title"> | |
|               <span class="md-footer__direction"> | |
|                 Previous | |
|               </span> | |
|               <div class="md-ellipsis"> | |
|                 Terminology | |
|               </div> | |
|             </div> | |
|           </a> | |
|          | |
|          | |
|            | |
|           <a href="../config/options/" class="md-footer__link md-footer__link--next" aria-label="Next: Options"> | |
|             <div class="md-footer__title"> | |
|               <span class="md-footer__direction"> | |
|                 Next | |
|               </span> | |
|               <div class="md-ellipsis"> | |
|                 Options | |
|               </div> | |
|             </div> | |
|             <div class="md-footer__button md-icon"> | |
|                | |
|               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> | |
|             </div> | |
|           </a> | |
|          | |
|       </nav> | |
|      | |
|    | |
|   <div class="md-footer-meta md-typeset"> | |
|     <div class="md-footer-meta__inner md-grid"> | |
|       <div class="md-copyright"> | |
|    | |
|    | |
|     Made with | |
|     <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |
|       Material for MkDocs | |
|     </a> | |
|    | |
| </div> | |
|        | |
|     </div> | |
|   </div> | |
| </footer> | |
|        | |
|     </div> | |
|     <div class="md-dialog" data-md-component="dialog"> | |
|       <div class="md-dialog__inner md-typeset"></div> | |
|     </div> | |
|      | |
|      | |
|      | |
|        | |
|       <script id="__config" type="application/json">{"base": "..", "features": ["content.action.edit", "content.action.view", "content.code.copy", "content.code.select", "navigation.footer", "navigation.instant", "navigation.instant.prefetch", "navigation.path", "navigation.top", "navigation.tracking", "optimize", "search.share", "search.suggest", "toc.follow"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> | |
|      | |
|      | |
|       <script src="../assets/javascripts/bundle.92b07e13.min.js"></script> | |
|        | |
|      | |
|   </body> | |
| </html> |