Snapshot-backup · SSH · rsync

Varje backup blir en tidsstämplad ögonblicksbild.

En liten, snabb backup-klient i Rust. Hårdlänkade snapshots över SSH gör att varje körning ser ut som ett komplett träd — men bara det som ändrats tar ny plats. Återställ vad som helst, från vilken som helst.

rsync --link-dest GFS-retention rclone-backend cron-scheman

backup 0.1.0 · källkod (Rust) · tar.gz, 62 KB — bygg med cargo build --release

Så funkar det

Fulla träd. Bråkdelen av disken.

Varje körning skapar en ny mapp <timestamp>/. Filer som inte ändrats sedan förra gången blir hårdlänkar — samma data på disken, men synliga i varje snapshot. En latest-symlänk pekar alltid på den nyaste.

äldre nyare → hårdlänkar — oförändrade filer delar disk 06-19 ↑ gallras 06-22 06-24 06-25 06-26 latest →
/volume1/backups/nas/ — fem snapshots, en latest-symlänk 2026-06-19T… · 06-22 · 06-24 · 06-25 · 06-26
01 — körning

rsync speglar källan

Klienten kör rsync -aAX --delete över SSH in i en ny <timestamp>/-mapp. Rättigheter, ACL:er och xattrs följer med.

02 — länkning

Oförändrat hårdlänkas

--link-dest=../latest låter filer som inte ändrats peka på förra snapshoten. Ny disk används bara för det som faktiskt skiljer sig.

03 — gallring

latest pekas om, gammalt gallras

latest flyttas till den nya snapshoten. Auto-prune behåller N senaste plus dagliga/veckovisa/månatliga enligt din policy.

Funktioner

Allt en hemmaserver behöver — inget mer.

En delad motor driver både CLI:t och desktop-appen. Samma config, samma snapshots, samma logg.

Hårdlänkade snapshots

Varje backup är ett komplett, bläddringsbart träd. Oförändrade filer delar disk via hårdlänkar — så historik kostar nästan inget.

rsync --link-dest

GFS-retention & auto-prune

Behåll de N senaste plus nyaste per dag, vecka och månad. Gallring körs automatiskt efter varje lyckad backup.

keep_last · daily · weekly · monthly

Selektiv återställning

Bläddra i en snapshots filträd och plocka exakt det du vill ha tillbaka — eller hela trädet. Inget i målmappen raderas någonsin.

browse · pick · restore

Schemaläggning

Skapa flera scheman — timvis, dagligt eller veckovis — och installera dem direkt i din crontab med ett klick.

→ crontab

Körningslogg

Varje backup, restore och prune skrivs till history.jsonl och visas i en History-flik — med tid, mål och utfall.

history.jsonl

Verifiering

Testa SSH-nyckel, anslutning, att alla källor finns och att målet går att skriva till — innan du litar på en backup.

backup verify

Dry-run överallt

Se exakt vad som skulle överföras eller raderas innan något händer. Gäller backup, restore och prune.

--dry-run

Två backends

rsync över SSH för din NAS, eller rclone för moln- och objektlagring. Samma snapshot-modell, samma flöde.

ssh · rclone

Följer systemets tema

Desktop-appen (byggd i iced) byter ljust/mörkt med ditt skrivbord. Ett rent designsystem med kort, accent och mjuka skuggor.

light · dark

Desktop-appen

Fyra flikar. Hela arbetsflödet.

Samma motor som CLI:t, med ett grafiskt gränssnitt för att redigera mål, schemalägga, återställa och spåra körningar. Klicka runt nedan.

Backup
Backup
Snapshot backups over SSH · v0.1.0
Quick BackupScheduleRestoreHistory
# snapshot 2026-06-26T08-30-12
sending incremental file list ...
✓ 24,910 files · 312.4M sent · snapshot klar

Quick Backup

Redigera ett mål och kör det direkt — med live-strömmad rsync-logg längst ned.

  • Värd, användare, port, SSH-nyckel och destination i ett formulär
  • Källor och exclude-mönster som redigerbara listor
  • Retention per mål + Prune now
  • Test connection, Dry run och Run backup
Backup
Backup
Snapshot backups over SSH · v0.1.0
Quick BackupScheduleRestoreHistory
Installed 2 schedule(s) to crontab

Schedule

Bygg upp flera scheman och skriv dem till din crontab — appen visar cron-uttrycket medan du ställer in.

  • Timvis, dagligt eller veckovis per mål
  • Live-förhandsvisning av cron-uttrycket
  • Aktivera/inaktivera utan att radera schemat
  • Install to crontab aktiverar allt på en gång
Backup
Backup
Snapshot backups over SSH · v0.1.0
Quick BackupScheduleRestoreHistory
2 item(s) selected in dokument/

Restore

Lista snapshots, bläddra i trädet och plocka exakt det du vill ha tillbaka. Filer kopieras — inget raderas.

  • Snapshots nyaste först, den senaste märkt newest
  • Bläddra mapp för mapp med brödsmulor
  • Bocka i enskilda filer, eller lämna tomt för hela snapshoten
  • Föreslagen återställningsmapp så live-data aldrig skrivs över
Backup
Backup
Snapshot backups over SSH · v0.1.0
Quick BackupScheduleRestoreHistory
Run history
Refresh
backupnassnapshot 2026-06-26T08-30-1208:30:14
prunenasdeleted 1, kept 1308:30:15
restorenas2026-06-25T02-00 → ~/restoreYesterday 21:12
backupoffsitessh: connection timed outYesterday 03:00
backupnassnapshot 2026-06-25T02-00-032 days ago
5 log entries

History

Varje körning blir en rad i loggen — så du kan se i efterhand vad som hände, och när.

  • Backup, restore och prune med färgkodade märken
  • Tid, mål och en kort detalj (snapshot-id, antal, eller fel)
  • Tydligt ✓ / ✗ för utfall
  • Sparas som history.jsonl bredvid din config

Kommandoraden

Fem kommandon, allt skriptbart.

Föredrar du terminalen gör backup-binären exakt samma jobb — perfekt för cron och fjärrservrar.

backup init

Skriver en kommenterad exempel-config att utgå från.

backup verify --target nas

Testar SSH-nyckel, anslutning, att källorna finns och att målet är skrivbart.

backup run --dry-run

Kör backup för alla mål (eller ett valt). Auto-prune efter lyckad körning.

backup list --target nas

Listar alla snapshots på målet, nyaste först.

backup prune --dry-run

Visar vilka snapshots retention-policyn skulle gallra — innan något raderas.

backup --version

Versionssträng med inbäddad git-hash och byggdatum från build.rs.

Kom igång

En TOML-fil. Ett block per mål.

Kör backup init, fyll i värd, källor och retention — och kör en --dry-run innan första riktiga backupen.

backup.toml
# Ett eller flera [[target]]-block.
[[target]]
name   = "nas"
host   = "192.168.1.50"
user   = "backup"
port   = 22
key    = "~/.ssh/backup_ed25519"
dest   = "/volume1/backups"
sources = [
  "/home/jonaz/dokument",
  "/home/jonaz/bilder",
]
exclude = [ "*.tmp", "node_modules" ]

# Behåll 5 senaste + GFS
[target.retention]
keep_last    = 5
keep_daily   = 7
keep_weekly  = 4
keep_monthly = 6

Redo att skydda hemmaservern?

Snapshots som kostar nästan ingen disk, återställning på filnivå och en logg över allt som hänt.

↓ Ladda ner källkoden