Nessun commento

Backup e tranquillità

Sin da un drammatico giorno nel 2006, quando ho perso un hard disc per colpa di un adattatore difettoso, il mio livello di attenzione ai backup è superiore alla media. I miei dati casalinghi vivono su almeno tre dischi: File History prende snapshot ogni tre ore, ed un piccolo NAS li archivia in mirroring. Nulla di inaffondabile, ma abbastanza da farmi sentire tranquillo.

Settimana scorsa, ho raggiunto una situazione accettabile per un'altra classe di dati: quelli sparsi su server vari: VPS, FTP, database. Dati che cambiano senza che tocchi i file direttamente, come le foto o i testi che carico su questo sito. Dati di cui ho sempre fatto saltuarie copie manuali, ma con gli ultimi accorgimenti ho automatizzato il tutto.

Rclone

Diversi host permettono l'accesso solo via FTP. Scaricare file via FTP non è difficile. Per l'occasione uso Rclone, che fornisce un'interfaccia uniforme per copiare file da e verso una marea di protocolli e servizi. Fra le varie cose, l'ho configurato per accedere al server di Minecraft e fare una copia del mondo:

rclone sync shockbyte:/ var/minecraft/server --exclude logs

Con sync il saggio strumento copia solo i file modificati, un'opzione essenziale con un mondo sempre più grande.

Chiavi SSH per un singolo comando

Ho un database su un host che mi mette a disposizione sia SSH che Cron, quindi posso spedire backup del database da un server all'altro. Per minimizzare i permessi, uso una feature abbastanza oscura di OpenSSH: le chiavi limitate ad un singolo comando. È un effetto che si ottiene aggiungendo un prefisso alle chiavi private in authorized_keys:

command="~/bin/backup-db.sh",no-pty ecdsa-sha2-nistp521 AAAA...

L'host del database si collega al server per il backup, e l'unica cosa che gli è permesso fare è eseguire lo script indicato nella configurazione. La colla è una pipe.

mysqldump --all-databases | ssh -i ~/.ssh/backup-key backup-server

Restic

Una volta che ho tutti i file in un solo posto, è il momento di salvarne una versione. Per questo uso Restic, uno strumento per backup crittati ed incrementali: salva solo i dati che cambiano, ma tiene traccia di molteplici snapshot. L'ho configurato per tenere le due versioni più recenti, più altre per la settimana, il mese, e gli anni precedenti. Prima si inizializza una destinazione per i dati, poi basta una riga:

restic --repo $REPO backup tutti-i-dati/ --exclude tmp

Una volta salvato il backup, si possono ripristinare interi snapshot, singoli file, oppure—lusso spropositato—montare l'intero repository via FUSE, per esplorarlo nella maniera preferita.

$ restic --repo $REPO mount tmp/
[...]
$ ls tmp/snapshots -1
2020-09-20T07:15:01+02:00
2020-09-24T07:15:01+02:00
2020-09-25T07:15:01+02:00
latest

Backblaze B2

Dove finiscono tutte questi file? Lo spazio che ho scelto dopo una lunga investigazione è Backblaze B2. La ditta fornisce prodotti per backup online, ed è nota per le dettagliate statistiche sulla durata dei dischi che pubblica più volte all'anno. Il servizio è supportato sia da Rclone che Restic, ed il piano base offre 10GB di spazio a costo zero. Mi spiace per il loro business, ma dubito li riempirò a breve. Ma se anche dovesse succedere, sono comunque più economici di S3, e li preferisco ad Amazon. E se un giorno devo recuperare giga e giga di blocchi di Minecraft, sono pronti a spedirmi una chiavetta USB od un disco a casa.

Ho mischiato questi ingredienti con un paio di script, ed aggiunto un po' di crontab per tenere tutto assieme. Così durante la notte tutti i bit si muovo da soli, in file ben ordinate, e viaggiano da un server all'altro. Si duplicano ed archiviano, mentre io dormo sereno.

Aggiungi un commento