Skrivbordsapp + kommandorad · snapshot-backup

Ett backupverktyg — en skrivbordsapp och en kommandorad.

En liten, snabb backupklient i Rust med en integrerad GTK-skrivbordsapp och ett skriptbart CLI — samma motor, samma konfiguration. Hårdlänkade snapshots (ögonblicksbilder) över SSH gör att varje körning ser ut som ett komplett filträd, men bara det som ändrats tar ny plats. Återställ vad som helst, från vilken som helst av dem.

GTK-skrivbordsapp moraine CLI rsync --link-dest rclone-backend

Moraine 0.2.2 · skrivbordsapp + CLI · eller bygg från källkod med cargo build --release

Moraine — Quick Backup
Moraine-skrivbordsappen, fliken Quick Backup: ett mål är valt, rclone-backenden används och en snapshot-backup körs i den direktsända loggen.

Så fungerar det

Kompletta filträd. En bråkdel av disken.

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

äldre nyare → hårdlänkar — oförändrade filer delar disk 06-19 ↑ gallrad 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 xattr följer med.

02 — länkning

Oförändrade filer hårdlänkas

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

03 — gallring

latest pekas om, gammalt gallras

latest flyttas till den nya snapshoten. Automatisk gallring behåller de N senaste plus dagliga/veckovisa/månatliga enligt din policy.

Funktioner

Allt en hemmaserver behöver — inget mer.

En gemensam motor driver både CLI:t och skrivbordsappen. Samma konfiguration, samma snapshots, samma logg.

Hårdlänkade snapshots

Varje backup är ett komplett filträd som går att bläddra i. Oförändrade filer delar diskutrymme via hårdlänkar — historiken kostar alltså nästan ingenting.

rsync --link-dest

GFS-gallring & autogallring

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

keep_last · daily · weekly · monthly

Selektiv återställning

Bläddra i en snapshots filträd och välj exakt vad du vill ha tillbaka — eller hela trädet. Ingenting i destinationsmappen raderas någonsin.

bläddra · välj · återställ

Schemaläggning

Skapa flera scheman — varje timme, dagligen eller veckovis — och installera dem direkt i din crontab med ett klick.

→ crontab

Körhistorik

Varje backup, återställning och gallring skrivs till history.jsonl och visas i fliken History — med tid, mål och resultat.

history.jsonl

Verifiering

Testa SSH-nyckeln, anslutningen, att alla källor finns och att destinationen går att skriva till — innan du litar på en backup.

moraine verify

Testkörning överallt

Se exakt vad som skulle överföras eller raderas innan något faktiskt händer. Gäller backup, återställning och gallring.

--dry-run

Två backends

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

ssh · rclone

Ett genomarbetat skrivbordsgränssnitt

Skrivbordsappen (byggd med GTK 4) har ett rent, mörkt designsystem — kort, en turkos accentfärg och mjuka skuggor — med systemets egna filväljare och dialoger.

GTK 4

Skrivbordsappen

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 följa upp körningar. Klicka runt nedan.

Moraine
Moraine
Snapshot backups over SSH · v0.2.2
Quick BackupScheduleRestoreHistorySettingsHelp
# snapshot 2026-06-26T08-30-12
sending incremental file list ...
✓ 24,910 files · 312.4M sent · snapshot done

Quick Backup

Redigera ett mål och kör det direkt — med en direktsänd rsync-logg längst ner.

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

Schedule

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

  • Varje timme, dagligen eller veckovis per mål
  • Direktförhandsvisning av cron-uttrycket
  • Aktivera/inaktivera utan att radera schemat
  • Install to crontab aktiverar allt på en gång
Moraine
Moraine
Snapshot backups over SSH · v0.2.2
Quick BackupScheduleRestoreHistorySettingsHelp
2 item(s) selected in documents/

Restore

Lista snapshots, bläddra i trädet och välj exakt vad du vill ha tillbaka. Filerna kopieras — ingenting raderas.

  • Snapshots med den nyaste först, den senaste märkt newest
  • Bläddra mapp för mapp med brödsmulor
  • Kryssa i enskilda filer, eller lämna tomt för hela snapshoten
  • En föreslagen återställningsmapp så att levande data aldrig skrivs över
Moraine
Moraine
Snapshot backups over SSH · v0.2.2
Quick BackupScheduleRestoreHistorySettingsHelp
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å att du i efterhand kan se vad som hände, och när.

  • Backup, återställning och gallring med färgkodade märken
  • Tid, mål och en kort detalj (snapshot-id, antal eller felmeddelande)
  • Ett tydligt ✓ / ✗ för resultatet
  • Sparas som history.jsonl bredvid din konfiguration

Kommandoraden

Fem kommandon, alla skriptbara.

Föredrar du terminalen? Binären moraine gör exakt samma jobb — perfekt för cron och fjärrservrar.

moraine init

Skriver en kommenterad exempelkonfiguration att utgå från.

moraine verify --target nas

Testar SSH-nyckeln, anslutningen, att källorna finns och att destinationen går att skriva till.

moraine run --dry-run

Kör backup för alla mål (eller ett valt). Automatisk gallring efter en lyckad körning.

moraine list --target nas

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

moraine prune --dry-run

Visar vilka snapshots gallringspolicyn skulle ta bort — innan något raderas.

moraine --version

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

Ladda ner

Ladda ner Moraine 0.2.2

Skrivbordsappen + CLI:t på Linux; CLI:t på macOS och Windows (skrivbordsappen kommer dit härnäst). Samma motor och samma konfiguration överallt.

Debian / Ubuntu i Debian

Nu i officiella Debian. apt install moraine fungerar på unstable / testing (migrerar uppåt från sid; buildds täcker även arm64/armhf), och når Ubuntu/Mint när de synkar. För stable — eller auto-uppdatering överallt redan idag — lägg till thern.io-APT-repot:

curl -fsSL https://cdn.thern.io/keys/thern-cdn-keyring.gpg | sudo tee /usr/share/keyrings/thern-cdn-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/thern-cdn-keyring.gpg] https://cdn.thern.io/deb stable main" | sudo tee /etc/apt/sources.list.d/thern-cdn.list sudo apt update && sudo apt install moraine
officiella Debian · thern.io APT-repo · GTK-app · rsync · ssh

Arch Linux app + CLI

thern.io pacman-repotpacman -S moraine. Eller paketet / PKGBUILD.

curl -fsSL https://cdn.thern.io/keys/thern-cdn-pacman.conf | sudo tee -a /etc/pacman.conf sudo pacman -Sy moraine
pacman-repo · GTK-app · rsync · ssh · rclone

Fedora / RPM app + CLI

thern.io DNF-repotdnf install moraine, GPG-signerat (Fedora/RHEL/openSUSE).

sudo curl -fsSL -o /etc/yum.repos.d/thern-cdn.repo https://cdn.thern.io/keys/thern-cdn.repo sudo dnf install moraine
DNF-repo · GTK-app · rsync · ssh · rclone

Alpine Linux app + CLI

Bygg paketet från APKBUILD med abuild, och installera det sedan med apk. Både skrivbordsappen och CLI:t, på musl.

GTK-app · rsync · ssh · rclone · musl

Flatpak App + CLI

Skrivbordsappen på vilken distribution som helst, i sandlåda, med rsync, ssh och rclone inbyggda — inget som behöver matcha ditt system. Serveras från vårt eget arkiv på thern.io-CDN:en, signerat med samma GPG-nyckel som APT- och DNF-arkiven.

flatpak remote-add --if-not-exists moraine https://cdn.thern.io/moraine.flatpakrepo
flatpak install moraine io.thern.moraine
x86-64 & arm64 · GTK-app · signerat arkiv · sandlåda

AppImage alla distributioner

En enda fil, ingen installation, ingen pakethanterare — ladda ner, gör den körbar, kör. GTK följer med i paketet, så skrivbordsappen fungerar likadant på vilken distribution som helst. Den kräver glibc 2.39 eller nyare (Ubuntu 24.04+, Debian 13+, Fedora 40+, Arch och de rullande distributionerna). Har du något äldre — ta Flatpaken eller .deb-paketet istället. Ett native aarch64-bygge (för arm64-skrivbord) kommer med nästa release.

chmod +x moraine-x86_64.AppImage && ./moraine-x86_64.AppImage
GTK-app · portabel · x86-64 idag · arm64 snart

Raspberry Pi CLI

En perfekt alltid-på-burk för backuper. De här byggena är statiskt länkade, så en och samma fil kör på vilken Raspberry Pi OS som helst — inga beroenden att matcha, inget att kompilera. Välj arm64 för en Pi 3/4/5 med 64-bitarssystem, armv7 för ett 32-bitars.

uname -m  # aarch64 → arm64 · armv7l → armv7
CLI · rsync · ssh · rclone · statisk

macOS CLI

Kommandoradsklienten — enklast via Homebrew, som också drar in ett modernt rsync (macOS levereras med en gammal version). Eller tarballen för Apple Silicon. En universell .pkg-installer (Apple Silicon + Intel, till /usr/local) kommer med nästa release. GTK-skrivbordsappen är på väg till macOS.

brew install TheJonaz/moraine/moraine
arm64 · Homebrew · .pkg-installer snart · rclone

Windows App + CLI

Skrivbordsappen för x64 — ett installationsprogram som med ett klick ger dig hela GTK-appen, systemets egna fönsterkontroller och Moraine-ikonen. Eller kommandoradsklienten (ett installationsprogram som lägger till moraine i din PATH, winget / Scoop, eller den vanliga zip-filen). Schemaläggning via Task Scheduler; för rsync/SSH använder du WSL, eller rclone-backenden (SFTP/FTP/SMB/moln).

winget install TheJonaz.Moraine
scoop install moraine
Skrivbordsapp · Task Scheduler · winget · Scoop · rclone

Källkod

Bygg den själv med cargo build --release. Ren Rust, MIT-licens — allt ligger öppet på GitHub.

Rust · MIT

Kommer snart paketeringen klar · väntar på granskning i butikerna

Byggda och redan i repot — de tänds här så snart de är live i sina butiker.

macOS-installer .pkg · universell AppImage arm64 · GTK FreeBSD port · CLI OpenBSD ports · CLI NetBSD pkgsrc · CLI Snap app + CLI Nix / NixOS app + CLI Chocolatey Windows CLI

Paketen serveras från thern.io-CDN:en (GPG-signerade APT/DNF/pacman/Flatpak-repon) · varje bygge finns också på GitHub Releases, verifierat i CI. Gentoo levereras från en egen overlay; recept för macOS .pkg, FreeBSD, OpenBSD och NetBSD finns i packaging/.

Kom igång

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

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

moraine.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 de 5 senaste + GFS
[target.retention]
keep_last    = 5
keep_daily   = 7
keep_weekly  = 4
keep_monthly = 6

Redo att skydda din hemmaserver?

Snapshots som knappt tar någon diskplats, återställning på filnivå och en logg över allt som hänt.

↓ Ladda ner Moraine

Varför Windows varnar för den här nedladdningen

Moraines Windows-installerare är inte kodsignerad ännu, så Microsoft Defender SmartScreen — och Edge — flaggar den precis som de flaggar alla nya appar från en fristående utvecklare. Varningen handlar om den saknade signaturen, inte om något som hittats i filen. Ett kodsigneringscertifikat (via SignPath Foundations program för öppen källkod) är på väg.

Den är säker att installera: Moraine är öppen källkod (MIT). Varje bygge kompileras öppet i GitHub Actions CI direkt från källkoden, och exakt samma fil finns också på GitHub Releases — så du kan verifiera den byte för byte.