restic: cos’è?
Per chi ancora non lo conoscesse, restic è una potente risorsa open-source per effettuare backup.
Come si legge sul sito ufficiale (la traduzione è nostra),
Restic è un moderno programma di backup in grado di eseguire la copia dei vostri file:
- da Linux, BSD, Mac e Windows
- su molti tipi diversi di storage, compresi i servizi online e self-hosted
- facilmente, essendo un singolo eseguibile che può essere eseguito senza un server o una complessa configurazione
- in modo efficace, trasferendo solo le parti effettivamente modificate nei file di cui si esegue il backup
- in modo sicuro, grazie all’uso attento della crittografia in ogni parte del processo
- in modo verificabile, consentendovi di assicurarvi che i vostri file possano essere ripristinati quando necessario
- liberamente - restic è completamente gratuito da usare e completamente open source
La predetta descrizione di restic - sebbene sintetica - illustra in modo puntuale tutti i punti di forza del software.
Infatti:
- è multipiattaforma (Linux, BSD, Mac e Windows);
- consente di effettuare il backup su supporti locali o in cloud;
- è semplice da utilizzare;
- funziona in modo incrementale, salvando soltanto i file che sono stati modificati;
- è sicuro per l’uso della crittografia in tutte le fasi del backup;
- è possibile eseguire il restore in modo semplice e sicuro;
- è open-source e quindi è possibile esaminare il codice.
Non ci dilunghiamo sulla descrizione di restic poiché sul sito di riferimento c’è ampia documentazione sia descrittiva sia operativa.
La nostra esperienza su Mac
Abbiamo provato restic su Mac M1 con macOS Sonoma (14.4.1), installandolo via homebrew con il comando:
brew install restic
Successivamente alla installazione, abbiamo provato a effettuare con successo un backup su AWS S3, seguendo la guida.
In una fase iniziale era emersa un po’ di delusione fondamentalmente perché il tentativo di backup dell’intero hard disk del Macbook Pro non era andato a buon fine presentando degli errori.
Tuttavia, l’utilissimo confronto con altri utenti sul Forum è servito da un lato per chiarire che restic probabilmente non è stato pensato e sviluppato per clonare un intero hard disk e dall’altro per effettuare altre prove che ci hanno indotto a rivalutarlo completamente in ragione dei risultati eccellenti ottenuti.
Tutto ha funzionato benissimo, in tempi relativamente rapidi e con enorme soddisfazione.
La flessibilità di restic è sia nei comandi sia nelle numerose variabili che si possono utilizzare.
autorestic
Ciò che manca a restic e la programmazione dei backup, tanto che - dopo alcune ricerche - abbiamo scelto autorestic.
Abbiamo scelto autorestic, ma merita di essere menzionato anche resticprofile sebbene sembra il progetto sembra fermo al 2020 con l’ultima release.
Autorestic su Mac si può installare comodamente con Homebrew e precisamente:
brew install autorestic
come emerge dalla documentazione che, tuttavia, non ci sembra completa.
autorestic: la configurazione
Autorestic richiede la creazione del suo file di configurazione che va collocato in .config/autorestic/.autorestic.yml
, così come indicato nella documentazione.
Tuttavia, è possibile collocare il file di configurazione anche in:
./.autorestic.yml
~/.autorestic.yml
~/.config/autorestic/.autorestic.yml
Abbiamo scelto di collocare il file in .config/autorestic/.autorestic.yml
.
In ragione del proprio assetto, il file deve essere completato con i necessari parametri.
Abbiamo utilizzato il servizio healthchecks.io per gli hooks e abbiamo voluto creare una password forte da salvare in un file che abbiamo chiamato restic.txt
con il comando
openssl rand -base64 2048 > restic.txt
Comunque, la password può essere generata con qualsiasi altro software e si può scegliere di non salvarla in un file ma di inserirla nel file di configurazione del quale riportiamo un esempio di seguito:
version: 2
global:
forget: prune
forget:
keep-within: 7
locations:
locationname01:
forget: prune
from: yourpathfrom
to: nameofthebackend
cron: '0 1 * * *' # Every day at 1am
hooks:
prevalidate:
- echo "Checks"
before:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Starting backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/start'
after:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Executed backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
failure:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup failed for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/fail'
success:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup successful for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
options:
forget:
keep-within: 7
backup:
tag: yourtag
locationname02:
forget: prune
from: yourpathfrom
to: yourbackend
cron: '0 1 * * *' # Every day at 1am
hooks:
prevalidate:
- echo "Checks"
before:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Starting backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/start'
after:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Executed backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
failure:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup failed for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/fail'
success:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup successful for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/start'
options:
forget:
keep-within: 7
backup:
tag: yourtag
locationname03:
forget: prune
from: yourpathfrom
to: yourbackend
cron: '0 1 * * *' # Every day at 1am
hooks:
prevalidate:
- echo "Checks"
before:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Starting backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/start'
after:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Executed backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
failure:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup failed for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/fail'
success:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup successful for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
options:
forget:
keep-within: 7
backup:
tag: yourtag
locationname04:
forget: prune
from: yourpathfrom
to: aws
cron: '0 1 * * *' # Every day at 1am
hooks:
prevalidate:
- echo "Checks"
before:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Starting backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/start'
after:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Executed backup for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
failure:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup failed for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>/fail'
success:
- 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Backup successful for location: ${AUTORESTIC_LOCATION}" https://hc-ping.com/<code>'
options:
forget:
keep-within: 7
backup:
tag: yourtag
backends:
yourbackendname:
type: s3
path: s3.amazonaws.com/yourbacket
key: pathofyourkeyfile
env:
AWS_ACCESS_KEY_ID: "account_id"
AWS_SECRET_ACCESS_KEY: "account_key"
Poiché nel file di configurazione di autorestic abbiamo aggiunto il parametro cron
è necessario impostare su Mac il cron mediante il comando
crontab -e
e inserire le seguenti linee (per il PATH bisogna verificare che sia corretto in funzione della configurazione):
# This is required, as it otherwise cannot find restic as a command.
PATH="/usr/bin:/opt/homebrew/bin/"
# Example running every day at 1am
0 1 * * * autorestic -c yourpath/.config/autorestic/.autorestic.yml --ci cron > /tmp/autorestic.log 2>&1
I valori 0 1 * * *
indicano che il comando verrà eseguito ogni giorno alle ore 1:00.
Per verificare che il cron sia correttamente impostato si può lanciare il comando
crontab -l
che dovrebbe restituire la configurazione inserita.
A questo punto, si deve inizializzare il backend con il comando:
autorestic init
e quando il processo è terminato, eseguire il backup con il comando:
autorestic backup -a
che esegue il backup per tutte le location inserite nel file di configurazione.
Successivamente, va lanciato il comando
autorestic cron
A questo punto, autorestic dovrebbe provvedere autonomamente a eseguire il backup secondo la configurazione impostata.
Se questa risorsa è stata utile, puoi contribuire con
o donare via
Seguici su Mastodon
Stay tuned!