[{"data":1,"prerenderedAt":383},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started":94,"\u002Fgetting-started-surround":380},[4,16,38,56,70,80],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"What is fsbackup?",{"title":12,"path":13,"stem":14},"Requirements & hardware","\u002Fgetting-started\u002Frequirements","1.getting-started\u002F2.requirements","i-lucide-rocket",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":37},"Installation","i-lucide-package","\u002Finstallation","2.installation",[22,26,30,33],{"title":23,"path":24,"stem":25},"Quick start","\u002Finstallation\u002Fquickstart","2.installation\u002F1.quickstart",{"title":27,"path":28,"stem":29},"ZFS pool setup","\u002Finstallation\u002Fzfs-pool","2.installation\u002F2.zfs-pool",{"title":17,"path":31,"stem":32},"\u002Finstallation\u002Fbare-metal","2.installation\u002F3.bare-metal",{"title":34,"path":35,"stem":36},"Adding remote hosts","\u002Finstallation\u002Fadding-hosts","2.installation\u002F4.adding-hosts",false,{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":37},"Configuration","i-lucide-sliders","\u002Fconfiguration","3.configuration",[44,48,52],{"title":45,"path":46,"stem":47},"fsbackup.conf","\u002Fconfiguration\u002Ffsbackup-conf","3.configuration\u002F1.fsbackup-conf",{"title":49,"path":50,"stem":51},"targets.yml","\u002Fconfiguration\u002Ftargets","3.configuration\u002F2.targets",{"title":53,"path":54,"stem":55},"Scheduling","\u002Fconfiguration\u002Fscheduling","3.configuration\u002F3.scheduling",{"title":57,"icon":58,"path":59,"stem":60,"children":61,"page":37},"Usage","i-lucide-play","\u002Fusage","4.usage",[62,66],{"title":63,"path":64,"stem":65},"Web UI","\u002Fusage\u002Fweb-ui","4.usage\u002F1.web-ui",{"title":67,"path":68,"stem":69},"Running jobs manually","\u002Fusage\u002Frunning-jobs","4.usage\u002F2.running-jobs",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":37},"Restore","i-lucide-history","\u002Frestore","5.restore",[76],{"title":77,"path":78,"stem":79},"Restoring data","\u002Frestore\u002Frestore","5.restore\u002F1.restore",{"title":81,"icon":82,"path":83,"stem":84,"children":85,"page":37},"Reference","i-lucide-book-open","\u002Freference","6.reference",[86,90],{"title":87,"path":88,"stem":89},"Script reference","\u002Freference\u002Fscripts","6.reference\u002F1.scripts",{"title":91,"path":92,"stem":93},"Prometheus metrics","\u002Freference\u002Fmetrics","6.reference\u002F2.metrics",{"id":95,"title":10,"body":96,"description":373,"extension":374,"links":375,"meta":376,"navigation":377,"path":6,"seo":378,"stem":7,"__hash__":379},"docs\u002F1.getting-started\u002F1.index.md",{"type":97,"value":98,"toc":364},"minimark",[99,103,108,120,123,193,204,208,211,234,238,245,267,271],[100,101,102],"p",{},"fsbackup is a ZFS-native rsync backup system for home labs. It runs directly on the backup server as a systemd service, pulls backups from remote hosts over SSH, and stores them as ZFS snapshots on a local drive.",[104,105,107],"h2",{"id":106},"how-it-works","How it works",[100,109,110,111,115,116,119],{},"fsbackup rsyncs each target into a dedicated ZFS dataset. After a successful sync, it creates a ZFS snapshot named for the type and date — for example, ",[112,113,114],"code",{},"@daily-2026-03-23"," or ",[112,117,118],{},"@weekly-2026-W12",". ZFS deduplicates unchanged data at the block level across snapshots, making storage efficient without the fragility of hard-link trees.",[100,121,122],{},"Snapshots are organized by type:",[124,125,126,142],"table",{},[127,128,129],"thead",{},[130,131,132,136,139],"tr",{},[133,134,135],"th",{},"Type",[133,137,138],{},"Frequency",[133,140,141],{},"Default retention",[143,144,145,157,168,179],"tbody",{},[130,146,147,151,154],{},[148,149,150],"td",{},"Daily",[148,152,153],{},"Every day",[148,155,156],{},"14 snapshots",[130,158,159,162,165],{},[148,160,161],{},"Weekly",[148,163,164],{},"Weekly runner",[148,166,167],{},"8 snapshots",[130,169,170,173,176],{},[148,171,172],{},"Monthly",[148,174,175],{},"Monthly runner",[148,177,178],{},"12 snapshots",[130,180,181,184,190],{},[148,182,183],{},"Annual",[148,185,186],{},[187,188,189],"em",{},"(configure as needed)",[148,191,192],{},"Unlimited",[100,194,195,196,199,200,203],{},"Retention is enforced daily by ",[112,197,198],{},"fs-retention.sh",", which uses ",[112,201,202],{},"zfs destroy"," to remove the oldest snapshots beyond the configured keep count.",[104,205,207],{"id":206},"data-classes","Data classes",[100,209,210],{},"Backup targets are grouped into classes. Each class has its own schedule and set of systemd timers:",[212,213,214,222,228],"ul",{},[215,216,217,221],"li",{},[218,219,220],"strong",{},"class1"," — application data, databases, personal files (default: daily + weekly + monthly)",[215,223,224,227],{},[218,225,226],{},"class2"," — infrastructure config: Docker stacks, nginx, DNS zones (default: daily + weekly)",[215,229,230,233],{},[218,231,232],{},"class3"," — large archives: photos, video libraries, media collections (default: monthly)",[104,235,237],{"id":236},"what-runs-on-the-server","What runs on the server",[100,239,240,241,244],{},"fsbackup runs directly on the backup server as the ",[112,242,243],{},"fsbackup"," system user (UID 993). There is no Docker container. The system consists of:",[212,246,247,257,260],{},[215,248,249,250,253,254],{},"Bash scripts in ",[112,251,252],{},"\u002Fopt\u002Ffsbackup\u002Fbin\u002F"," and ",[112,255,256],{},"\u002Fopt\u002Ffsbackup\u002Futils\u002F",[215,258,259],{},"systemd service and timer units (one per class and job type)",[215,261,262,263,266],{},"A FastAPI + HTMX web UI (",[112,264,265],{},"fsbackup-web.service",")",[104,268,270],{"id":269},"what-lives-where","What lives where",[124,272,273,283],{},[127,274,275],{},[130,276,277,280],{},[133,278,279],{},"Path",[133,281,282],{},"Contents",[143,284,285,295,305,315,325,335,345,355],{},[130,286,287,292],{},[148,288,289],{},[112,290,291],{},"\u002Fetc\u002Ffsbackup\u002Ffsbackup.conf",[148,293,294],{},"Main configuration",[130,296,297,302],{},[148,298,299],{},[112,300,301],{},"\u002Fetc\u002Ffsbackup\u002Ftargets.yml",[148,303,304],{},"Backup targets",[130,306,307,312],{},[148,308,309],{},[112,310,311],{},"\u002Fetc\u002Ffsbackup\u002Fage.pub",[148,313,314],{},"age public key for S3 encryption",[130,316,317,322],{},[148,318,319],{},[112,320,321],{},"\u002Fvar\u002Flib\u002Ffsbackup\u002F.ssh\u002F",[148,323,324],{},"SSH keys",[130,326,327,332],{},[148,328,329],{},[112,330,331],{},"\u002Fvar\u002Flib\u002Ffsbackup\u002F.aws\u002F",[148,333,334],{},"AWS credentials",[130,336,337,342],{},[148,338,339],{},[112,340,341],{},"\u002Fvar\u002Flib\u002Ffsbackup\u002Flog\u002F",[148,343,344],{},"Job logs",[130,346,347,352],{},[148,348,349],{},[112,350,351],{},"\u002Fbackup\u002Fsnapshots\u002F\u003Cclass>\u002F\u003Ctarget>\u002F",[148,353,354],{},"ZFS datasets",[130,356,357,362],{},[148,358,359],{},[112,360,361],{},"\u002Fvar\u002Flib\u002Fnode_exporter\u002Ftextfile_collector\u002F",[148,363,91],{},{"title":365,"searchDepth":366,"depth":367,"links":368},"",1,2,[369,370,371,372],{"id":106,"depth":367,"text":107},{"id":206,"depth":367,"text":207},{"id":236,"depth":367,"text":237},{"id":269,"depth":367,"text":270},"An overview of fsbackup — what it does, how it works, and what it's designed for.","md",null,{},true,{"title":10,"description":373},"rEsI97BoYEotbxfvoZMPTl3yBK7MI9vAa5PwDu_AdLQ",[375,381],{"title":12,"path":13,"stem":14,"description":382,"children":-1},"What you need to run fsbackup — software prerequisites, disk recommendations, and unsupported configurations.",1775923865314]