Efter att använt rsync för säkerhetskopiering i många år började jag se mig om efter nya alternativ. Det är inget fel på rsync – det har fungerat perfekt för mina ändamål under lång tid. Men det finns en del nackdelar.

Den första är att det finns ingen historik inbyggt. Detta måste man lösa själv, antingen med ett filsystem som stöder snapshots, eller genom att rotera målkatalogen. Den andra nackdelen är att säkerhetskopian tar lika mycket plats – eller mer – som originalet.

Den tredje nackdelen är att man måste kryptera säkerhetskopian själv. Detta är inget som finns inbyggt i rsync.

Hårddisk

Alla dessa nackdelar löser restic (https://restic.net/). Restic arbetar med snapshots (tänk git commit). Varje ny säkerhetskopia blir en ny snapshot. Det blir därför enkelt att gå tillbaks till tidigare versioner av filer.

Dessutom använder restic något som kallas data deduplication. Det innebär att endast unik data sparas. Om tre filer är identiska sparas bara datan i den ena filer. Om tio filer har snarlik data, låt oss säga att sjuttio procent är identiskt innehåll, sparas endast de trettio procenten som är unikt innehåll. Åtminstone är det tänkt att fungera så i teorin. I verkligen beror mycket på typen av innehåll, hur stora filerna är och så vidare.

Men utifrån egna erfarenheter fungerar det utmärkt. Jag tar säkerhetskopior en gång i veckan av fyra virtuella maskiner. Säkerhetskopian tas utav de virtuella diskarna. Sammanlagd storlek på dessa är runt 190 gigabyte. Första snapshoten blev på runt 30 gigabyte. Här sparade jag således 160 gigabyte. Det är mer än vad jag sparade när jag testade att komprimera samma innehåll. Men sådana bra siffror får jag dock inte på alla typer av filer. Säkerhetskopior utav fotografier ger bara lite besparingar – här är graden av unikt innehåll högt. Men även här kan det skilja mellan olika typer av bildformat etcetera.

När det kommer till den tredje nackdelen med rsync löser även restic detta. Restic krypterar alla säkerhetskopior som standard med AES-256.

Det finns även andra fördelar med restic. Exempelvis går att det använda Amazon S3, BackBlaze B2, Azure Blob storage och Google Cloud storage som mål för säkerhetskopian. Det finns även stöd för SFTP och vanlig lokal säkerhetskopia.

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

En annan stor fördel med restic är att det är enkelt att skripta och automatisera.

Användning med BackBlaze B2

Som exempel använder jag här BackBlaze B2 för att lagra säkerhetskopian. Förfarandet är dock likadant oavsett var du lagrar säkerhetskopian. För att istället använda exempelvis Amazon S3, byter du bara ut b2 mot s3, och lägger till korrekt region. För att använda en lokal sökväg skriver du bara sökvägen, utan något specifikt prefix, exempelvis /opt/backups.

Det finns utmärkt dokumentation om hur du använder olika backends. Du hittar dokumentationen på https://restic.readthedocs.io/en/stable/index.html.

Initiera ett förråd

Innan vi kan göra en säkerhetskopia behöver vi skapa och initiera ett förråd, eller repository på engelska. Även detta är ett koncept likt Git.

Jag förutsätter här att du redan har skapat en B2-bucket (eller katalog eller annat mål). I detta exempel använder jag en B2-bucket med namnet jackbenny-viktiga-filer.

Alla inställningar kan göras med miljövariabler, vilket underlättar när vi sedan ska skapa ett skript för säkerhetskopieringen. Det underlättar också när vi arbetar med ett förråd. Vi slipper att skriva in nycklarna för B2 gång på gång.

Jag börjar därför med att sätta två miljövariabler för att komma åt min B2-bucket.

$> export B2_ACCOUNT_ID="003a83..."
$> export B2_ACCOUNT_KEY="K003H..."

Därefter kan jag initiera förrådet.

$> restic init -r b2:jackbenny-viktiga-filer
enter password for new repository:
enter password again:
created restic repository f013f06a41 at b2:jackbenny-viktiga-filer

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Här valde jag lösenordet hemligt-losenord. Lösenordet används för att kryptera säkerhetskopian. Glömmer man bort lösenordet är också säkerhetskopian borta för alltid. Flaggan -r anger förrådet (repository).

Göra en första säkerhetskopia

Nu kan vi göra en första säkerhetskopia till förrådet vi skapade nyss.

$> restic backup viktiga-filer -r b2:jackbenny-viktiga-filer
enter password for repository:
repository f013f06a opened successfully, password is correct
created new cache in /home/jake/.cache/restic

Files:          14 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 5.311 MiB

processed 14 files, 5.311 MiB in 0:01
snapshot 8e21757e saved

Innan vi går vidare kan vi lista de snapshots som just nu finns i förrådet. Därefter kan vi lista filerna i snapshoten.

$> restic snapshots -r b2:jackbenny-viktiga-filer
enter password for repository:
repository f013f06a opened successfully, password is correct

ID        Time                 Host        Tags        Paths
-------------------------------------------------------------------------------
8e21757e  2020-06-21 18:31:20  red-dwarf               /home/jake/viktiga-filer
-------------------------------------------------------------------------------
1 snapshots

För att se filerna i den snapshot som listas här gör vi på följande vis.

$> restic ls 8e21757e -r b2:jackbenny-viktiga-filer
enter password for repository:
repository f013f06a opened successfully, password is correct
snapshot 8e21757e of [/home/jake/viktiga-filer] filtered by [] at
2020-06-21 18:31:20.68611058 +0200 CEST):
/viktiga-filer
/viktiga-filer/foto1
/viktiga-filer/foto1/1.jpg
/viktiga-filer/foto1/2.jpg
/viktiga-filer/foto1/3.jpg
/viktiga-filer/foto1/4.jpg
/viktiga-filer/foto1/5.jpg
/viktiga-filer/foto1/6.jpg
/viktiga-filer/foto1/7.jpg
/viktiga-filer/foto1/8.jpg
/viktiga-filer/foto2
/viktiga-filer/foto2/1.jpg
/viktiga-filer/foto2/2.jpg
/viktiga-filer/foto2/3.jpg
/viktiga-filer/foto2/4.jpg
/viktiga-filer/foto2/5.jpg
/viktiga-filer/foto2/Thumbs.db

Nya snapshots

Nu när vår första säkerhetskopia är klar kan vi fortsätta göra fler säkerhetskopior efterhand som nya filer läggs till eller ändras. Varje ny säkerhetskopia blir en ny snapshot.

$> cp IMG_516* ~/viktiga-filer/

$> restic backup viktiga-filer -r b2:jackbenny-viktiga-filer
enter password for repository:
repository f013f06a opened successfully, password is correct

Files:           3 new,     0 changed,    14 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 1.526 MiB

processed 17 files, 6.837 MiB in 0:02
snapshot 3d7acbf5 saved

Om vi listar alla snapshots igen kommer vi se att en ny har skapats.

$> restic snapshots -r b2:jackbenny-viktiga-filer
enter password for repository:
wrong password or no key found. Try again
enter password for repository:
repository f013f06a opened successfully, password is correct

ID        Time                 Host        Tags        Paths
-------------------------------------------------------------------------------
8e21757e  2020-06-21 18:31:20  red-dwarf               /home/jake/viktiga-filer
3d7acbf5  2020-06-21 18:41:24  red-dwarf               /home/jake/viktiga-filer
-------------------------------------------------------------------------------
2 snapshots

Återställa filer från en snapshot

Här testar jag att återställa filerna från den första snapshoten till /tmp katalogen. Flaggan -t nedan står för target.

$> restic restore 8e21757e -r b2:jackbenny-viktiga-filer -t /tmp
enter password for repository:
repository f013f06a opened successfully, password is correct

restoring <Snapshot 8e21757e of [/home/jake/viktiga-filer] at 2020-06-21
18:31:20.68611058 +0200 CEST by jake@red-dwarf> to /tmp

$> ls -l /tmp/viktiga-filer/
total 8
drwxr-xr-x 2 jake jake 4096 jun 21 18:01 foto1
drwxr-xr-x 2 jake jake 4096 jun 21 18:01 foto2

Automatisera säkerhetskopieringen

Eftersom alla inställningar så som lösenord, nycklar, förråd etcetera går att sätta via miljövariabler, är det också enkelt att automatisera restic.

Nedanstående Bash-skript gör en säkerhetskopia av katalogen viktiga-filer som vi använt som exempel hittills.

#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
cd ~/

export B2_ACCOUNT_ID="003a8..."
export B2_ACCOUNT_KEY="K003Hi..."
export RESTIC_REPOSITORY="b2:jackbenny-viktiga-filer"
export RESTIC_PASSWORD="hemligt-losenord"

restic backup viktiga-filer

Notera att vi här anger förrådets namn och lösenord som miljövariabeler.

Gör skriptet körbart med chmod +x my-restic-backup.sh.

Därefter kan vi skapa ett cronjob för skriptet. För att exempelvis skapa en säkerhetskopia varje lördag klockan 04:30 på morgonen lägger vi till följande rad i crontab -e.

30 04 * * 6 /home/jake/my-restic-backup.sh

Luta dig tillbaka och låt restic skapa krypterade snapshots varje lördag, utan att ta upp onödigt mycket utrymme.


Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.

Kommentarer

Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.

Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.