3062 lines
74 KiB
HTML
3062 lines
74 KiB
HTML
|
||
<!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="Single source of truth for the homelab">
|
||
|
||
|
||
|
||
<link rel="canonical" href="http://192.168.1.8:13080/services/backrest/">
|
||
|
||
|
||
<link rel="prev" href="../pocket-id/">
|
||
|
||
|
||
<link rel="next" href="../databases/">
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="icon" href="../../assets/images/favicon.png">
|
||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||
|
||
|
||
|
||
<title>Backrest (backups) - nuclide.systems docs</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
|
||
|
||
|
||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.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="slate" data-md-color-primary="black" data-md-color-accent="blue">
|
||
|
||
|
||
<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="#backup-strategy" class="md-skip">
|
||
Skip to content
|
||
</a>
|
||
|
||
</div>
|
||
<div data-md-component="announce">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<header class="md-header" data-md-component="header">
|
||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||
<a href="../.." title="nuclide.systems docs" class="md-header__button md-logo" aria-label="nuclide.systems docs" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||
|
||
</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">
|
||
nuclide.systems docs
|
||
</span>
|
||
</div>
|
||
<div class="md-header__topic" data-md-component="header-topic">
|
||
<span class="md-ellipsis">
|
||
|
||
Backrest (backups)
|
||
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<form class="md-header__option" data-md-component="palette">
|
||
|
||
|
||
|
||
|
||
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
|
||
|
||
|
||
|
||
|
||
|
||
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_1">
|
||
|
||
|
||
</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">
|
||
|
||
<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>
|
||
|
||
|
||
|
||
</nav>
|
||
|
||
</header>
|
||
|
||
<div class="md-container" data-md-component="container">
|
||
|
||
|
||
|
||
|
||
|
||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||
<div class="md-grid">
|
||
<ul class="md-tabs__list">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../.." class="md-tabs__link">
|
||
|
||
|
||
|
||
|
||
|
||
Home
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../CHANGELOG/" class="md-tabs__link">
|
||
|
||
|
||
|
||
|
||
|
||
Changelog
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../RESUME/" class="md-tabs__link">
|
||
|
||
|
||
|
||
|
||
|
||
Resume
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../ct-inventory/" class="md-tabs__link">
|
||
|
||
|
||
|
||
|
||
|
||
CT inventory
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../infra/proxmox-state/" class="md-tabs__link">
|
||
|
||
|
||
|
||
Infra
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item md-tabs__item--active">
|
||
<a href="../homelab-architecture/" class="md-tabs__link">
|
||
|
||
|
||
|
||
Services
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../security/data-leak-audit-comparison/" class="md-tabs__link">
|
||
|
||
|
||
|
||
Security & audits
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../ideas/stack-ideas/" class="md-tabs__link">
|
||
|
||
|
||
|
||
Ideas
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-tabs__item">
|
||
<a href="../../history/traefik-migration/" class="md-tabs__link">
|
||
|
||
|
||
|
||
History
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
|
||
|
||
|
||
<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 md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||
<label class="md-nav__title" for="__drawer">
|
||
<a href="../.." title="nuclide.systems docs" class="md-nav__button md-logo" aria-label="nuclide.systems docs" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||
|
||
</a>
|
||
nuclide.systems docs
|
||
</label>
|
||
|
||
<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="../../CHANGELOG/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Changelog
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../RESUME/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Resume
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../ct-inventory/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
CT inventory
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Infra
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
|
||
|
||
Infra
|
||
|
||
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/proxmox-state/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Proxmox state
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/portmap/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Port map
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/storage/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Storage
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/volumes/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Volumes
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/docker-networks/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Docker networks
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/connection-hosts/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Connection hosts
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../infra/proxmox-memory-audit/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Memory audit
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Services
|
||
|
||
|
||
|
||
</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="true">
|
||
<label class="md-nav__title" for="__nav_6">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
|
||
|
||
Services
|
||
|
||
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../homelab-architecture/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Homelab architecture
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../dev-environment/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Dev environment (Coder + Gitea)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../mcp-gateway/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
MCP gateway
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../mcp-servers/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
MCP servers
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../pocket-id/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Pocket-ID (OIDC)
|
||
|
||
|
||
|
||
</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">
|
||
|
||
|
||
Backrest (backups)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<a href="./" class="md-nav__link md-nav__link--active">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Backrest (backups)
|
||
|
||
|
||
|
||
</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="#current-state" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Current state
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Current state">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#backrest-ct-103-phase-1b-live-since-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Backrest (CT 103) — Phase 1b live since 2026-05-21
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#postgres-ct-113-phase-2-live-since-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Postgres (CT 113) — Phase 2 live since 2026-05-21
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#coverage-map" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Coverage map
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Coverage map">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#intentionally-not-backed-up" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Intentionally not backed up
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#deferred-include-if-needed" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Deferred — include if needed
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#open-work" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Open work
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Open work">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-1a-rclone-sync-for-unas-personal-data" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 1a — rclone sync for UNAS personal data
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-3-config-to-git-for-infrastructure" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 3 — Config-to-git for infrastructure
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#blind-spots" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Blind spots
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#operations" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Operations
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Operations">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#restore" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Restore
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#monitoring-planned" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Monitoring (planned)
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#applying-a-new-config" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Applying a new config
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#history" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
History
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="History">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#provider-comparison" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Provider comparison
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-2-postgres-consolidation-onto-ct-113-done-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 2 — postgres consolidation onto CT 113 (✅ done 2026-05-21)
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-1a-rclone-sync-script" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 1a rclone sync script
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-3-config-to-git-scripts" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 3 config-to-git scripts
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#why-wasabi-was-rejected" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Why Wasabi was rejected
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#why-lobe-postgres-stays-on-ct-104" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Why lobe-postgres stays on CT 104
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#unas-data-inventory-basis-for-phase-1a-sizing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
UNAS data inventory (basis for Phase 1a sizing)
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../databases/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Databases
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../secrets-manager/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Secrets manager
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../comfyui/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
ComfyUI
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../zoraxy/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Zoraxy
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../adguard-dns/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
AdGuard DNS
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../cloud-gpu/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Cloud GPU
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../arcane/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Arcane
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../doc-ingestion/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Doc ingestion pipeline
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../llm-benchmark/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
LLM benchmark
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Security & audits
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_7">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
|
||
|
||
Security & audits
|
||
|
||
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/data-leak-audit-comparison/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Comparison
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/data-leak-audit-2026-05-20-tr004-cloud-sandbox/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
2026-05-20 · cloud-sandbox breach
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/data-leak-audit-2026-05-21-tr004-artifacts/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
2026-05-21 · artifacts (clean)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/audit-claude-code-meta/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Self-audit (Claude Code)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/transcripts/audit-chat-2026-05-21/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Transcript (audit session)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Ideas
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_8">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
|
||
|
||
Ideas
|
||
|
||
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../ideas/stack-ideas/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Stack ideas
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
History
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_9">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
|
||
|
||
History
|
||
|
||
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../history/traefik-migration/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Traefik (abandoned 2026-05-16)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../history/traefik-migration-docker-labels/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Traefik labels (abandoned)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../history/mcp-gateway-requirements/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
MCP gateway requirements (superseded)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../history/scrubbing-list-2026-05-17/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Scrubbing list (2026-05-17)
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../history/case-study/" class="md-nav__link">
|
||
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
|
||
|
||
Case study
|
||
|
||
|
||
|
||
</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="#current-state" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Current state
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Current state">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#backrest-ct-103-phase-1b-live-since-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Backrest (CT 103) — Phase 1b live since 2026-05-21
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#postgres-ct-113-phase-2-live-since-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Postgres (CT 113) — Phase 2 live since 2026-05-21
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#coverage-map" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Coverage map
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Coverage map">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#intentionally-not-backed-up" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Intentionally not backed up
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#deferred-include-if-needed" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Deferred — include if needed
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#open-work" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Open work
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Open work">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-1a-rclone-sync-for-unas-personal-data" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 1a — rclone sync for UNAS personal data
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-3-config-to-git-for-infrastructure" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 3 — Config-to-git for infrastructure
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#blind-spots" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Blind spots
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#operations" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Operations
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Operations">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#restore" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Restore
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#monitoring-planned" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Monitoring (planned)
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#applying-a-new-config" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Applying a new config
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#history" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
History
|
||
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="History">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#provider-comparison" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Provider comparison
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-2-postgres-consolidation-onto-ct-113-done-2026-05-21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 2 — postgres consolidation onto CT 113 (✅ done 2026-05-21)
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-1a-rclone-sync-script" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 1a rclone sync script
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-3-config-to-git-scripts" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Phase 3 config-to-git scripts
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#why-wasabi-was-rejected" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Why Wasabi was rejected
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#why-lobe-postgres-stays-on-ct-104" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
Why lobe-postgres stays on CT 104
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#unas-data-inventory-basis-for-phase-1a-sizing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
|
||
UNAS data inventory (basis for Phase 1a sizing)
|
||
|
||
</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">
|
||
|
||
|
||
|
||
|
||
|
||
<h1 id="backup-strategy">Backup Strategy<a class="headerlink" href="#backup-strategy" title="Permanent link">¶</a></h1>
|
||
<blockquote>
|
||
<p>Single Backrest instance on <strong>CT 103</strong> (192.168.1.3:9898) backing up offsite to JottaCloud via rclone. CT 103 has UNAS NFS mounted at <code>/mnt/pve/unas</code>, so it can read all service data without SSH-ing other hosts.</p>
|
||
</blockquote>
|
||
<p><strong>Goal</strong>: every piece of critical state has an offsite copy. CT 104 loss is recoverable within hours; UNAS loss is recoverable (slower) from JottaCloud.</p>
|
||
<hr />
|
||
<h2 id="current-state">Current state<a class="headerlink" href="#current-state" title="Permanent link">¶</a></h2>
|
||
<h3 id="backrest-ct-103-phase-1b-live-since-2026-05-21">Backrest (CT 103) — Phase 1b live since 2026-05-21<a class="headerlink" href="#backrest-ct-103-phase-1b-live-since-2026-05-21" title="Permanent link">¶</a></h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Item</th>
|
||
<th>Value</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>UI</td>
|
||
<td><code>http://192.168.1.3:9898</code> (LAN-only, auth disabled)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Config</td>
|
||
<td><code>/opt/backrest/config/config.json</code> (timestamped <code>.bak</code> files on every edit)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>rclone remote</td>
|
||
<td><code>jottacloud:</code> Archive section (default device/mountpoint); token at <code>/root/.config/rclone/rclone.conf</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td>Offsite plan</td>
|
||
<td>JottaCloud Unlimited €9.91/mo (Norway, EEA) — see <a href="#provider-comparison">provider comparison</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td>BW throttle</td>
|
||
<td><code>RCLONE_BWLIMIT=05:30,7.5M 01:00,20M</code> (20 MB/s overnight, 7.5 MB/s daytime)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Repos</strong> (both <code>autoInitialize: true</code>; passwords currently <code>tapirnase</code> — see blind spot #5):</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Repo</th>
|
||
<th>Target</th>
|
||
<th>Prune</th>
|
||
<th>Check</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><code>services-repo</code></td>
|
||
<td><code>rclone:jottacloud:services</code></td>
|
||
<td>weekly Sun 05:00, ≤10 % unused</td>
|
||
<td>monthly, 10 % subset</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media-repo</code></td>
|
||
<td><code>rclone:jottacloud:media</code></td>
|
||
<td>monthly, ≤10 % unused</td>
|
||
<td>monthly, 10 % subset</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Plans</strong>:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Plan</th>
|
||
<th>Repo</th>
|
||
<th>Schedule</th>
|
||
<th>Retention</th>
|
||
<th>Paths</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><code>services-backup-plan</code></td>
|
||
<td><code>services-repo</code></td>
|
||
<td><code>0 1 * * 1-5</code> weekdays 01:00</td>
|
||
<td>7d · 4w · 6m · 1y</td>
|
||
<td>15 paths (below)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media-backup-plan</code></td>
|
||
<td><code>media-repo</code></td>
|
||
<td><code>30 1 * * 1-5</code> weekdays 01:30</td>
|
||
<td>4w · 6m · 1y</td>
|
||
<td><code>/mnt/pve/unas/media/images/library</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>video-projects-plan</code></td>
|
||
<td><code>media-repo</code></td>
|
||
<td>nightly 02:00</td>
|
||
<td>per config</td>
|
||
<td><code>/mnt/pve/unas/media/video-projects</code></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Services plan paths</strong> (all under <code>/mnt/pve/unas/</code>):</p>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>services/vaultwarden services/n8n services/memos
|
||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>services/karakeep services/traccar services/gitea
|
||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>services/coder services/nextcloud
|
||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>services/arr-stack services/gluetun
|
||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>backup/home-assistant backup/immich backup/nextcloud
|
||
</code></pre></div>
|
||
<p><code>services/shared-db</code> was removed when CT 113 came online — postgres is now WAL-G → Garage S3 → JottaCloud.
|
||
<code>services/arcane</code> removed 2026-05-26 — Arcane decommissioned, replaced by Portainer.
|
||
<code>services/pocketid</code> removed 2026-05-26 — Pocket-ID moved to CT 109 local FS (not UNAS); now covered by <code>ops-backup.timer</code> → Garage S3.</p>
|
||
<blockquote>
|
||
<p><strong>JottaCloud web UI tip</strong>: rclone writes to the <strong>Archive</strong> section. The default landing page shows only Sync + Backup. Browse to <code>https://www.jottacloud.com/web/archive</code> to see the restic repos.</p>
|
||
</blockquote>
|
||
<h3 id="postgres-ct-113-phase-2-live-since-2026-05-21">Postgres (CT 113) — Phase 2 live since 2026-05-21<a class="headerlink" href="#postgres-ct-113-phase-2-live-since-2026-05-21" title="Permanent link">¶</a></h3>
|
||
<p>Dedicated <code>db</code> LXC at <code>192.168.1.6:5432</code> running <code>postgres:17</code> in Docker, pgAdmin on <code>:5050</code>. WAL-G archives continuously to Garage S3 (<code>ct113-pg-backup</code> on CT 104):</p>
|
||
<ul>
|
||
<li><code>archive_mode = on</code>, <code>archive_command = 'wal-g wal-push %p'</code></li>
|
||
<li>Daily <code>wal-g backup-push</code> cron at 02:00</li>
|
||
<li>DBs hosted: <code>vaultwarden</code>, <code>paperless</code>, <code>litellm</code>, <code>memos</code>, <code>n8n</code>, <code>gitea</code>, <code>coder</code></li>
|
||
</ul>
|
||
<p>Garage → JottaCloud offsite sync runs daily 02:30 on CT 103 via <code>/usr/local/sbin/walg-offsite-sync.sh</code> (read-only Garage key <code>GKef577420aadd26d667f2ca4f</code>; mirrors <code>ct113-pg-backup</code>, <code>lobe-pg-backup</code>, <code>immich-pg-backup</code> → <code>jottacloud:WAL-G/</code>).</p>
|
||
<p><strong>Exceptions</strong> (stay on original hosts):</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>DB</th>
|
||
<th>Host</th>
|
||
<th>Why</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><code>lobe-postgres</code> (paradedb pg17)</td>
|
||
<td>CT 104</td>
|
||
<td>Uses <code>pg_search</code> <code>USING bm25</code> indexes; stock postgres 17 can't host. WAL-G → <code>lobe-pg-backup</code> + Backrest secondary on data dir.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Nextcloud AIO postgres</td>
|
||
<td>CT 105</td>
|
||
<td>AIO manages it; Borg archives the whole stack to UNAS.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Immich postgres</td>
|
||
<td>CT 104</td>
|
||
<td>Version-pinned by Immich. WAL-G → <code>immich-pg-backup</code>.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<hr />
|
||
<h2 id="coverage-map">Coverage map<a class="headerlink" href="#coverage-map" title="Permanent link">¶</a></h2>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Host / data</th>
|
||
<th>Method</th>
|
||
<th>Offsite</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>CT 103 Backrest binary + config</td>
|
||
<td>Manual (small)</td>
|
||
<td>On-CT only</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 104 Docker app state on UNAS</td>
|
||
<td><code>services-backup-plan</code></td>
|
||
<td>✓ JottaCloud</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 104 <code>lobe-postgres</code> (paradedb)</td>
|
||
<td>WAL-G → Garage → JottaCloud sync</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 104 Immich postgres</td>
|
||
<td>WAL-G → <code>immich-pg-backup</code> → sync</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 113 postgres (7 DBs)</td>
|
||
<td>WAL-G → <code>ct113-pg-backup</code> → sync</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 101 Shepard</td>
|
||
<td>Source in Gitea (gitea path covers it)</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 102 AdGuard</td>
|
||
<td>Phase 3 git push → <code>fkrebs/adguard-conf</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 104 Gitea + Coder</td>
|
||
<td><code>services/{gitea,coder}</code> (UNAS; moved from CT 111 2026-05-26)</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 105 Nextcloud user files</td>
|
||
<td><code>services/nextcloud</code></td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 105 Nextcloud AIO volumes</td>
|
||
<td>AIO Borg → <code>/mnt/pve/unas/backup/nextcloud/</code> → Backrest</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 108 Zoraxy</td>
|
||
<td>Phase 3 git push → <code>fkrebs/zoraxy-conf</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 109 Portainer config</td>
|
||
<td>Daily tar → Garage S3 <code>ct109-portainer-backup</code> → JottaCloud sync</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 109 Pocket-ID</td>
|
||
<td>Daily tar → Garage S3 <code>ct109-portainer-backup</code> (key <code>ops-*.tar.gz</code>) → JottaCloud sync via <code>ops-backup.timer</code></td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 109 Infisical</td>
|
||
<td>pg_dump in <code>ops-*.tar.gz</code> (same as above)</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>~~CT 110 Pocket-ID~~</td>
|
||
<td><strong>CT 110 destroyed 2026-05-26 — see CT 109 row above</strong></td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>~~CT 111 Gitea + Coder~~</td>
|
||
<td><strong>CT 111 destroyed 2026-05-26 — see CT 104 row above</strong></td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>~~CT 112 Infisical~~</td>
|
||
<td><strong>CT 112 destroyed 2026-05-26 — see CT 109 row above</strong></td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>VM 100 HAOS config</td>
|
||
<td>Phase 3 git addon → <code>fkrebs/ha-config</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
<tr>
|
||
<td>VM 100 HAOS daily tar</td>
|
||
<td>HA → UNAS → Backrest</td>
|
||
<td>✓</td>
|
||
</tr>
|
||
<tr>
|
||
<td>PVE host <code>/etc/pve/</code></td>
|
||
<td>Phase 3 git push → <code>fkrebs/pve-conf</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
<tr>
|
||
<td>UNAS <code>media/images/library</code></td>
|
||
<td>Phase 1a <code>rclone sync</code> → <code>jottacloud:Photos/</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
<tr>
|
||
<td>UNAS personal data (<code>documents</code>, <code>_sortMe</code>, <code>video-projects</code>, …)</td>
|
||
<td>Phase 1a <code>rclone sync</code> → <code>jottacloud:UNAS/</code></td>
|
||
<td>✗ not deployed</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h3 id="intentionally-not-backed-up">Intentionally not backed up<a class="headerlink" href="#intentionally-not-backed-up" title="Permanent link">¶</a></h3>
|
||
<p>Immich thumbnails / encoded video, ComfyUI / Speaches models, arr-stack metadata, Redis / Meili / Elastic caches, CT 101 dev volumes — all regenerable or re-downloadable.</p>
|
||
<h3 id="deferred-include-if-needed">Deferred — include if needed<a class="headerlink" href="#deferred-include-if-needed" title="Permanent link">¶</a></h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Host</th>
|
||
<th>Data</th>
|
||
<th>Notes</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>CT 109 Prometheus TSDB, Grafana dashboards</td>
|
||
<td>Low priority — metrics are ephemeral; dashboards re-exportable from Grafana; add to services plan if needed</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td>CT 109 Portainer data</td>
|
||
<td>WAL-G–style daily tar → <code>ct109-portainer-backup</code> Garage S3 → JottaCloud offsite sync</td>
|
||
<td>✓ (via walg-offsite-sync.sh)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<hr />
|
||
<h2 id="open-work">Open work<a class="headerlink" href="#open-work" title="Permanent link">¶</a></h2>
|
||
<h3 id="phase-1a-rclone-sync-for-unas-personal-data">Phase 1a — rclone sync for UNAS personal data<a class="headerlink" href="#phase-1a-rclone-sync-for-unas-personal-data" title="Permanent link">¶</a></h3>
|
||
<p>Two sync jobs on CT 103, Saturday 01:00:</p>
|
||
<ul>
|
||
<li><strong>Job 1</strong>: <code>media/images/library/</code> → <code>jottacloud:Photos/</code> (Immich originals, visible at <code>jottacloud.com/photo</code>).</li>
|
||
<li><strong>Job 2</strong>: <code>/mnt/pve/unas/</code> → <code>jottacloud:UNAS/</code> (documents, video-projects, _sortMe, musical-sheets, audiobooks, ebooks, code; excludes Immich-generated, re-streamable media, torrents, <code>services/</code> already in Backrest).</li>
|
||
</ul>
|
||
<p>Initial upload ≈ 820 GB personal + 822 GB Immich (days). Script target <code>/usr/local/sbin/unas-sync.sh</code>. Full script in <a href="#phase-1a-rclone-sync-script">appendix</a>.</p>
|
||
<p>Tradeoff vs Restic: no point-in-time versions; deletions propagate. Acceptable for personal media.</p>
|
||
<h3 id="phase-3-config-to-git-for-infrastructure">Phase 3 — Config-to-git for infrastructure<a class="headerlink" href="#phase-3-config-to-git-for-infrastructure" title="Permanent link">¶</a></h3>
|
||
<p>Daily 03:00 cron on each host pushes config to a private Gitea repo. Repos already exist:</p>
|
||
<ul>
|
||
<li><code>fkrebs/zoraxy-conf</code> (CT 108 — <code>/opt/zoraxy/conf/</code>)</li>
|
||
<li><code>fkrebs/adguard-conf</code> (CT 102 — <code>AdGuardHome.yaml</code>)</li>
|
||
<li><code>fkrebs/pve-conf</code> (PVE — <code>/etc/pve/</code>, excludes <code>priv/</code>, <code>*.key</code>, <code>authkey.pub*</code>)</li>
|
||
<li><code>fkrebs/ha-config</code> (VM 100 — <code>/config/</code>, excludes <code>secrets.yaml</code>, <code>.storage/</code>)</li>
|
||
</ul>
|
||
<p>Script template in <a href="#phase-3-config-to-git-scripts">appendix</a>.</p>
|
||
<h3 id="blind-spots">Blind spots<a class="headerlink" href="#blind-spots" title="Permanent link">¶</a></h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>#</th>
|
||
<th>Severity</th>
|
||
<th>Issue</th>
|
||
<th>Fix</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>4</td>
|
||
<td>MEDIUM</td>
|
||
<td>n8n encryption key in <code>/opt/stacks/n8n/data/</code> on CT 104 local FS — not in any plan. If CT 104 dies, DB restore is unusable.</td>
|
||
<td>Move n8n data volume to <code>/mnt/pve/unas/services/n8n/</code> (already in plan).</td>
|
||
</tr>
|
||
<tr>
|
||
<td>4b</td>
|
||
<td>MEDIUM</td>
|
||
<td>Nextcloud AIO Borg passphrase only in container env. Borg repo encrypted — without it, restore impossible.</td>
|
||
<td>Store <code>BORG_PASSWORD</code> in Vaultwarden.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>5</td>
|
||
<td>MEDIUM</td>
|
||
<td>Both Backrest repo passwords are <code>tapirnase</code>.</td>
|
||
<td>Rotate before first scheduled run completes; <code>restic key passwd</code> re-encrypts in place. Store in Vaultwarden.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>6</td>
|
||
<td>LOW</td>
|
||
<td><code>litellm</code> DB password is the placeholder literal <code>litellm_password_here</code>.</td>
|
||
<td>Generate real password; update <code>ai/.env</code>, <code>litellm-config/config.yaml</code>, CT 113 user.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>7</td>
|
||
<td>LOW</td>
|
||
<td>Migration dumps at <code>/mnt/pve/unas/dump/*-migration-20260521.sql</code> not in any plan.</td>
|
||
<td>Decide: keep as manual archive or delete now that WAL-G is archiving.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<hr />
|
||
<h2 id="operations">Operations<a class="headerlink" href="#operations" title="Permanent link">¶</a></h2>
|
||
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">¶</a></h3>
|
||
<p>UI: <strong>Repos → snapshots → Browse → file → Restore</strong>.</p>
|
||
<p>CLI on CT 103:</p>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>restic<span class="w"> </span>-r<span class="w"> </span>rclone:jottacloud:services<span class="w"> </span>snapshots
|
||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>restic<span class="w"> </span>-r<span class="w"> </span>rclone:jottacloud:services<span class="w"> </span>restore<span class="w"> </span>latest<span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span>--target<span class="w"> </span>/restore<span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span>--include<span class="w"> </span>/mnt/pve/unas/services/vaultwarden
|
||
</code></pre></div>
|
||
<h3 id="monitoring-planned">Monitoring (planned)<a class="headerlink" href="#monitoring-planned" title="Permanent link">¶</a></h3>
|
||
<p>In Backrest UI → each repo → Hooks:</p>
|
||
<ul>
|
||
<li><code>CONDITION_BACKUP_ERROR</code> / <code>CONDITION_CHECK_ERROR</code> → POST Gotify priority 8</li>
|
||
<li><code>CONDITION_BACKUP_SUCCESS</code> → POST Gotify priority 3</li>
|
||
</ul>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>curl -s -X POST 'http://gotify:80/message?token=TOKEN' \
|
||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> -H 'Content-Type: application/json' \
|
||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> -d '{"title":"Backrest: {{.Plan}}","message":"{{.Summary}}","priority":3}'
|
||
</code></pre></div>
|
||
<h3 id="applying-a-new-config">Applying a new config<a class="headerlink" href="#applying-a-new-config" title="Permanent link">¶</a></h3>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="c1"># on CT 103</span>
|
||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>systemctl<span class="w"> </span>stop<span class="w"> </span>backrest
|
||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>cp<span class="w"> </span>/opt/backrest/config/config.json<span class="w"> </span>/opt/backrest/config/config.json.bak.<span class="k">$(</span>date<span class="w"> </span>+%Y%m%d-%H%M%S<span class="k">)</span>
|
||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="c1"># paste new config.json</span>
|
||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>systemctl<span class="w"> </span>start<span class="w"> </span>backrest
|
||
</code></pre></div>
|
||
<hr />
|
||
<h2 id="history">History<a class="headerlink" href="#history" title="Permanent link">¶</a></h2>
|
||
<h3 id="provider-comparison">Provider comparison<a class="headerlink" href="#provider-comparison" title="Permanent link">¶</a></h3>
|
||
<p>Researched 2026-05-21. Sized for ~3 TB/mo.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Provider</th>
|
||
<th>~3 TB/mo</th>
|
||
<th>Backend</th>
|
||
<th>EU DC</th>
|
||
<th>Egress</th>
|
||
<th>Verdict</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><strong>JottaCloud Unlimited</strong></td>
|
||
<td>€9.91 flat (unlimited)</td>
|
||
<td>rclone native</td>
|
||
<td>Norway (EEA)</td>
|
||
<td>Free</td>
|
||
<td>✅ Chosen</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Hetzner BX31</td>
|
||
<td>€20.80 flat (10 TB)</td>
|
||
<td>SFTP/WebDAV</td>
|
||
<td>DE, FI</td>
|
||
<td>Free</td>
|
||
<td>2.5× the price, capped</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Backblaze B2</td>
|
||
<td>~$18 pay-per-GB</td>
|
||
<td>S3</td>
|
||
<td>Frankfurt</td>
|
||
<td>Free (≤3× stored)</td>
|
||
<td>US CLOUD Act risk</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Cloudflare R2</td>
|
||
<td>~$45 pay-per-GB</td>
|
||
<td>S3</td>
|
||
<td>EU auto</td>
|
||
<td>Zero</td>
|
||
<td>Expensive at scale; no EU residency lock</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Wasabi</td>
|
||
<td>~$21–24</td>
|
||
<td>S3</td>
|
||
<td>FRA/AMS</td>
|
||
<td>Free (≤ stored)</td>
|
||
<td>❌ 90-day min billing per object → Restic prune disaster</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Storj DCS</td>
|
||
<td>~$30</td>
|
||
<td>S3</td>
|
||
<td>EU-geofenced</td>
|
||
<td>1× free</td>
|
||
<td>Complex, $5 minimum</td>
|
||
</tr>
|
||
<tr>
|
||
<td>pCloud</td>
|
||
<td>€399 one-time / 2 TB</td>
|
||
<td>WebDAV</td>
|
||
<td>Luxembourg</td>
|
||
<td>Free</td>
|
||
<td>WebDAV too slow</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Infomaniak kDrive</td>
|
||
<td>~€36+ / 3 TB</td>
|
||
<td>WebDAV</td>
|
||
<td>Switzerland</td>
|
||
<td>Free</td>
|
||
<td>WebDAV only; non-EU</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Proton Drive</td>
|
||
<td>—</td>
|
||
<td>rclone beta</td>
|
||
<td>Switzerland</td>
|
||
<td>Free</td>
|
||
<td>rclone backend broken since late 2025</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h3 id="phase-2-postgres-consolidation-onto-ct-113-done-2026-05-21">Phase 2 — postgres consolidation onto CT 113 (✅ done 2026-05-21)<a class="headerlink" href="#phase-2-postgres-consolidation-onto-ct-113-done-2026-05-21" title="Permanent link">¶</a></h3>
|
||
<p><strong>Decision</strong>: provision a dedicated <code>db</code> LXC (CT 113, 192.168.1.6) running postgres in Docker rather than reuse <code>shared-postgres</code> on CT 104. Direct-to-target avoided migrating twice (CT 111 → CT 104 → CT 113).</p>
|
||
<p>Specs: Debian 12 unprivileged, 2 GB RAM, 2 cores, 20 GB local-zfs, <code>mp0=/mnt/pve/unas</code>. Stack in Gitea <code>fkrebs/stacks-db</code>. pgAdmin pre-registers postgres via <code>pgadmin-servers.json</code>.</p>
|
||
<p><strong>Migration order</strong>: vaultwarden → paperless → litellm → memos → n8n → gitea → coder. Procedure per DB:</p>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>docker<span class="w"> </span><span class="nb">exec</span><span class="w"> </span><container><span class="w"> </span>pg_dump<span class="w"> </span>-U<span class="w"> </span><user><span class="w"> </span><db><span class="w"> </span>><span class="w"> </span>/mnt/pve/unas/dump/<db>-migration.sql
|
||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>psql<span class="w"> </span>-U<span class="w"> </span>postgres<span class="w"> </span>-c<span class="w"> </span><span class="s2">"CREATE USER <user> WITH PASSWORD '...'; CREATE DATABASE <db> OWNER <user>;"</span>
|
||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>psql<span class="w"> </span>-U<span class="w"> </span><user><span class="w"> </span><db><span class="w"> </span><<span class="w"> </span>/mnt/pve/unas/dump/<db>-migration.sql
|
||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="c1"># Update connection strings → 192.168.1.6:5432, restart service, verify, remove old PG container + volume</span>
|
||
</code></pre></div>
|
||
<p>Stale DBs dropped from <code>shared-postgres</code> post-migration: <code>daytona</code>, <code>lobechat</code> (duplicate), <code>paradedb</code> (duplicate).</p>
|
||
<p>WAL-G enabled 2026-05-21: <code>archive_mode = on</code>, <code>archive_command = 'wal-g wal-push %p'</code> via <code>ALTER SYSTEM</code>; first base backup verified (<code>base_000000010000000000000012</code>). Daily <code>wal-g backup-push</code> cron at 02:00. Garage → JottaCloud offsite sync added at 02:30.</p>
|
||
<h3 id="phase-1a-rclone-sync-script">Phase 1a rclone sync script<a class="headerlink" href="#phase-1a-rclone-sync-script" title="Permanent link">¶</a></h3>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="ch">#!/bin/bash</span>
|
||
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="nb">set</span><span class="w"> </span>-e
|
||
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="nv">LOG</span><span class="o">=</span>/var/log/rclone-unas-sync.log
|
||
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
|
||
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="c1"># Job 1: Immich originals → JottaCloud gallery</span>
|
||
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a>rclone<span class="w"> </span>sync<span class="w"> </span>/mnt/pve/unas/media/images/library/<span class="w"> </span>jottacloud:Photos/<span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="w"> </span>--transfers<span class="o">=</span><span class="m">4</span><span class="w"> </span>--checkers<span class="o">=</span><span class="m">8</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="w"> </span>--log-file<span class="o">=</span><span class="nv">$LOG</span><span class="w"> </span>--log-level<span class="w"> </span>INFO
|
||
<a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a>
|
||
<a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a><span class="c1"># Job 2: all other irreplaceable personal data</span>
|
||
<a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a>rclone<span class="w"> </span>sync<span class="w"> </span>/mnt/pve/unas/<span class="w"> </span>jottacloud:UNAS/<span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a><span class="w"> </span>--transfers<span class="o">=</span><span class="m">4</span><span class="w"> </span>--checkers<span class="o">=</span><span class="m">8</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/library/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/upload/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/thumbs/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/encoded-video/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-17" name="__codelineno-5-17" href="#__codelineno-5-17"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/profile/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-18" name="__codelineno-5-18" href="#__codelineno-5-18"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/images/backups/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-19" name="__codelineno-5-19" href="#__codelineno-5-19"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/movies/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-20" name="__codelineno-5-20" href="#__codelineno-5-20"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/emulation/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-21" name="__codelineno-5-21" href="#__codelineno-5-21"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/Torrents/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-22" name="__codelineno-5-22" href="#__codelineno-5-22"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/music/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-23" name="__codelineno-5-23" href="#__codelineno-5-23"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"media/podcasts/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-24" name="__codelineno-5-24" href="#__codelineno-5-24"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"services/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-25" name="__codelineno-5-25" href="#__codelineno-5-25"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"backup/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-26" name="__codelineno-5-26" href="#__codelineno-5-26"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"backup-staging/**"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-27" name="__codelineno-5-27" href="#__codelineno-5-27"></a><span class="w"> </span>--exclude<span class="w"> </span><span class="s2">"test_perm"</span><span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-5-28" name="__codelineno-5-28" href="#__codelineno-5-28"></a><span class="w"> </span>--log-file<span class="o">=</span><span class="nv">$LOG</span><span class="w"> </span>--log-level<span class="w"> </span>INFO
|
||
</code></pre></div>
|
||
<p>Cron (Saturday 01:00): <code>0 1 * * 6 /usr/local/sbin/unas-sync.sh</code></p>
|
||
<h3 id="phase-3-config-to-git-scripts">Phase 3 config-to-git scripts<a class="headerlink" href="#phase-3-config-to-git-scripts" title="Permanent link">¶</a></h3>
|
||
<p>Same pattern on each host. Replace <code>GITEA_TOKEN</code> with the value from <code>/opt/stacks/ai/.env</code> or a dedicated scoped Gitea token.</p>
|
||
<p><strong>CT 108 — Zoraxy</strong> (<code>/usr/local/sbin/zoraxy-conf-backup.sh</code>):</p>
|
||
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="ch">#!/bin/bash</span>
|
||
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="nb">set</span><span class="w"> </span>-e
|
||
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="nv">REPO_URL</span><span class="o">=</span><span class="s2">"https://fkrebs:GITEA_TOKEN@git.nuclide.systems/fkrebs/zoraxy-conf.git"</span>
|
||
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="nv">WORK</span><span class="o">=</span><span class="s2">"/opt/zoraxy/conf"</span>
|
||
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>init<span class="w"> </span>-b<span class="w"> </span>main<span class="w"> </span>-q<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nb">true</span>
|
||
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>remote<span class="w"> </span>set-url<span class="w"> </span>origin<span class="w"> </span><span class="s2">"</span><span class="nv">$REPO_URL</span><span class="s2">"</span><span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
||
<a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="w"> </span><span class="o">||</span><span class="w"> </span>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>origin<span class="w"> </span><span class="s2">"</span><span class="nv">$REPO_URL</span><span class="s2">"</span>
|
||
<a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>add<span class="w"> </span>-A
|
||
<a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>commit<span class="w"> </span>-q<span class="w"> </span>-m<span class="w"> </span><span class="s2">"auto: </span><span class="k">$(</span>date<span class="w"> </span>-u<span class="w"> </span>+%Y-%m-%dT%H:%M:%SZ<span class="k">)</span><span class="s2">"</span><span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nb">true</span>
|
||
<a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a>git<span class="w"> </span>-C<span class="w"> </span><span class="s2">"</span><span class="nv">$WORK</span><span class="s2">"</span><span class="w"> </span>push<span class="w"> </span>-q<span class="w"> </span>origin<span class="w"> </span>main<span class="w"> </span><span class="m">2</span>><span class="p">&</span><span class="m">1</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>-v<span class="w"> </span><span class="s2">"Everything up-to-date"</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nb">true</span>
|
||
</code></pre></div>
|
||
<p><strong>CT 102 — AdGuard</strong> — same template, copy <code>/opt/AdGuardHome/AdGuardHome.yaml</code> into <code>/tmp/adguard-conf-work</code> checkout first.</p>
|
||
<p><strong>PVE host</strong> — same template, <code>rsync -a --exclude='priv/' --exclude='*.key' --exclude='authkey.pub*' /etc/pve/ /tmp/pve-conf-work/</code> then commit.</p>
|
||
<p><strong>VM 100 — HA</strong> — native <a href="https://github.com/home-assistant/addons/tree/master/git_pull">Git Pull addon</a> pushing <code>/config/</code> (exclude <code>secrets.yaml</code>, <code>.storage/</code>) to <code>fkrebs/ha-config</code>. HA daily tars already covered by <code>services-backup-plan</code> via <code>/mnt/pve/unas/backup/home-assistant/</code>.</p>
|
||
<p>Cron on each host: <code>0 3 * * * /usr/local/sbin/<host>-conf-backup.sh</code></p>
|
||
<h3 id="why-wasabi-was-rejected">Why Wasabi was rejected<a class="headerlink" href="#why-wasabi-was-rejected" title="Permanent link">¶</a></h3>
|
||
<p>Restic creates many small pack files during normal operation. Wasabi charges 90 days of storage per object regardless of deletion — every <code>restic forget --prune</code> generates surprise costs. Well-documented Restic-on-Wasabi trap.</p>
|
||
<h3 id="why-lobe-postgres-stays-on-ct-104">Why lobe-postgres stays on CT 104<a class="headerlink" href="#why-lobe-postgres-stays-on-ct-104" title="Permanent link">¶</a></h3>
|
||
<p>Migration <code>0093_add_bm25_indexes_with_icu.sql</code> creates <code>USING bm25</code> indexes on 7 tables (<code>agents</code>, <code>topics</code>, <code>files</code>, <code>knowledge_bases</code>, <code>user_memories</code>, <code>chat_groups</code>, <code>user_memories_contexts</code>). <code>bm25</code> is paradedb-only (<code>pg_search</code> extension); stock postgres 17 has no such index access method and the migration fails. Container stays <code>paradedb/paradedb:latest-pg17</code>. WAL-G archives to <code>lobe-pg-backup</code>; Backrest secondary copies the data dir.</p>
|
||
<h3 id="unas-data-inventory-basis-for-phase-1a-sizing">UNAS data inventory (basis for Phase 1a sizing)<a class="headerlink" href="#unas-data-inventory-basis-for-phase-1a-sizing" title="Permanent link">¶</a></h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Path</th>
|
||
<th>Size</th>
|
||
<th>Notes</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><code>media/documents/</code></td>
|
||
<td>9.5 G</td>
|
||
<td>Personal documents</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/video-projects/</code></td>
|
||
<td>425 G</td>
|
||
<td>Creative work, irreplaceable</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/musical-sheets/</code></td>
|
||
<td>23 G</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/audiobooks/</code></td>
|
||
<td>23 G</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/ebooks/</code></td>
|
||
<td>6.8 G</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/3d-prints/</code></td>
|
||
<td>65 M</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>media/Recipes/</code></td>
|
||
<td>113 M</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>_sortMe/</code></td>
|
||
<td>335 G</td>
|
||
<td><code>images/</code> 171 G, <code>work Flo/</code> 147 G, <code>Anne/</code> 17 G</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>code/</code></td>
|
||
<td>6.7 M</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td>Excluded <code>media/movies/</code></td>
|
||
<td>118 G</td>
|
||
<td>re-streamable</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Excluded <code>media/emulation/</code></td>
|
||
<td>57 G</td>
|
||
<td>re-downloadable</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Excluded <code>media/Torrents/</code></td>
|
||
<td>19 G</td>
|
||
<td>temporary</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Excluded <code>media/music/</code>, <code>media/podcasts/</code></td>
|
||
<td>—</td>
|
||
<td>re-streamable</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</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">
|
||
|
||
<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">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.expand", "navigation.top", "search.highlight", "search.suggest", "content.code.copy"], "search": "../../assets/javascripts/workers/search.2c215733.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": null}</script>
|
||
|
||
|
||
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html> |