RPi: sincronizzazione dei file tra locale e Cloud con rclone

Gioxx  —  02/04/2019 — Leave a comment

Quando si parla di backup lo scopo principale del gioco è sempre e solo uno: cercare di non perdere i propri file. Che tu li voglia salvare in copia singola o doppia poco importa, ciò che spesso serve è la delocalizzazione dei file per evitare che il Single Point of Failure sia dietro l’angolo (ho i file sul disco in casa! Ok, e se ti entrano in casa?). Per fare questo mestiere esistono già diverse soluzioni NAS in grado di replicarsi tra loro anche su differenti reti fisiche e in Cloud, ma se volessimo farlo tramite RPi?

Dato che ci stiamo per addentrare un po’ più nella ciccia, è il momento giusto per il doveroso (e assente da un po’) …

Attenzione: articolo ad alto tasso di tecnicismi lavorativi, nerditudine, viaggi mentali che potrebbero non interessare ai più, comunque vada perdete ogni speranza o voi che leggete.
RPi3 e rclone: sincronizzazione dei file tra locale e Cloud

source: unsplash.com / author: Fredy Jacob

rclone

Si chiama rclone e permette di sincronizzare file (in più modi / vie) tra locale e Cloud, non necessariamente con ambo i protagonisti presi in causa. Cosa vuol dire? Vuol dire che nessuno ti vieta di utilizzare rclone per scambiare dati tra due punti in locale (forse poco utile) o tra due punti in Cloud (e qui torna utile in caso di migrazioni), o locale misto Cloud che riguarda forse la maggior parte dei casi. Si tratta di una soluzione completamente open, trovi tutto il progetto su GitHub.

rclone è in grado di dialogare con una quantità molto elevata di servizi di Cloud Storage, è un po’ un coltellino svizzero da tenere a portata di mano (anche sotto forma di soluzione portable). Esistono alcune interfacce grafiche per Windows o macOS ma alcune di queste non vengono più sviluppate e supportate, quindi ti consiglio caldamente di imparare a utilizzare la sua riga di comando: rclone.org/docs.

Qualche esempio pratico

Con l’arrivo di RPi3 B+ in casa, ho scelto di iniziare a giocare con rclone e migrare (in test) quei backup oggi portati a termine da Windows e SyncBack Free. Ti faccio quindi qualche esempio pratico di come sia possibile ottenere lo stesso risultato passando da tutt’altro Sistema Operativo e relativo software di copia dati.

Partendo dal presupposto che tu abbia già configurato rclone e inserito quindi i vari connettori che ti servono (in questo caso parliamo di puro SFTP e nulla più), ti basterà realizzare un piccolo script bash contenente poche e semplici istruzioni, come questo:

rclone sync "gioxx_org:html/wp-content/backupwordpress" "Dropbox:DBBackup/gioxx.org" -P --transfers 9 --include *.zip

La stringa si traduce in questa maniera:

  • gioxx_org è il nome che ho dato al connettore rclone che si occupa di collegarsi a questo blog, dopo i due punti occorre inserire il percorso della cartella che si intende raggiungere. Per arrivare alla backupwordpress mi servirà attraversare prima html/wp-content. Questo percorso è lo stesso che vedresti utilizzando un qualsiasi client FTP per collegarti al tuo spazio web.
  • Dropbox è il nome (molto banale, ne sono consapevole) che ho dato al connettore rclone che si collega al mio account Dropbox. All’interno della home del mio Dropbox esiste una cartella chiamata DBBackup e al suo interno un’ulteriore cartella chiamata gioxx.org, è qui che finiscono tutti i file zip contenenti i backup del mio database MySQL (nota infatti il --include *.zip finale nella riga di comando, che obbliga rclone a scaricare solo file di tipo ZIP).
  • Il parametro -P equivale al “Progress“, rclone mi mostrerà a video l’avanzamento delle operazioni.
  • Il parametro --transfers 9 serve a forzare rclone a trasferire fino a 9 file alla volta, contemporaneamente, perché la mia macchina e la connettività possono sopportarlo. Più è alto il numero, più consumerai RAM e CPU della tua macchina (e occuperai banda internet in download e upload dato che il trasferimento viene eseguito dallo spazio FTP a Dropbox).

Tutto chiaro? Vuoi un altro esempio?

rclone sync "fuorigioco:html" "Dropbox:WebBackup/fuorigio.co" -P --transfers 9 --filter-from /home/pi/exclude-fCo.txt

Cosa è cambiato?

  • Nulla cambia per il sync in sé. Sto chiedendo a rclone di tenere sincronizzati tutti i file della cartella html di fuorigioco (connettore che si collega al buon vecchio fuorigio.co) con una apposita cartella sull’account Dropbox. Restano i 9 trasferimenti contemporanei e la visualizzazione dei progressi, ma.
  • Ma in questo caso utilizzo il filtering messo a disposizione da rclone per escludere una lista di file e cartelle che non mi interessano (vedi: rclone.org/filtering). Sto chiedendo a rclone di aprire il file di testo exclude-fCo.txt e leggere cosa non voglio che venga sottoposto a sincronizzazione, per capirci:
# Esclusioni Fuorigio.co
- /wp-admin/**
- /wp-includes/**

Salta la prima riga, un commento per capire di che lista stiamo parlando nel momento in cui apro il file di testo. Da lì in poi potrai notare un elenco fatto di cartelle che voglio saltare a piè pari, che rclone quindi ignorerà passando oltre. Nessuno ti vieta, come specificato nella documentazione ufficiale, di inserire ulteriori cartelle o singoli file, anche utilizzando delle wildcard che possono quindi fare match con più dati contemporaneamente.

Non ti resta che il crontab

Se non sai di cosa stiamo parlando (sei serio? E hai avuto la pazienza di leggere fino a qua? Fatti abbracciare!), trovi tutto ciò che c’è da sapere riguardo crontab su Raspbian (ma non solo) all’indirizzo raspberrypi.org/documentation/linux/usage/cron.md.

L’attività via rclone la sappiamo padroneggiare e lo script bash è pronto. Lo hai già reso eseguibile, non ti resta che programmarne l’esecuzione secondo esigenza. In questo momento possono quindi tornarti utili un paio di siti web dedicati alla generazione di righe crontab da copiare e riportare facilmente nel file di sistema (sudo crontab -e):

Io utilizzo un pelo più il primo che il secondo (quest’ultimo è molto utile quando vuoi immediatamente leggere in maniera più sensata una riga di Crontab più che crearla da zero). Specifica l’intervallo di esecuzione del tuo script e fornisci ogni dettaglio richiesto, così arriverai a un risultato che potrebbe essere simile a questo:

0 2 * * * /home/pi/DBBackup.sh

Come lo si legge? Ecco: lo script di backup verrà eseguito alle ore 2 del mattino (il 2) in punto (lo 0, che diversamente avrebbe dovuto riportare un altro numero da 1 a 59 se avessi voluto un diverso orario più “esotico“), di ogni giorno (il primo asterisco, avrebbe potuto avere valore da 1 a 31), di ogni mese (il secondo asterisco, avrebbe potuto avere valore da 1 a 12), di ogni giorno della settimana (l’ultimo asterisco, e questo sta a indicare che l’esecuzione deve essere quotidiana, altrimenti avrebbe potuto avere valore da 0 a 6). Ti sembra difficile? Inizialmente lo è, ma poi si entra nell’ottica e lo si capisce immediatamente, ti ho fornito quei due siti web poco sopra proprio per iniziare a fare pratica.

Salva la modifica al crontab e attendi fiducioso che i tuoi file finiscano correttamente nella cartella di backup (ovviamente controlla che vada tutto liscio).

L’articolo si conclude qui (per la tua certa felicità), in caso di problemi o dubbi puoi sempre lasciare un commento. Utilizzi già rclone? Se sì, come gestisci i tuoi backup? Sono curioso di confrontarmi con altre persone nella mia stessa situazione e voglia di sperimentare 🙂

Condividi l'articolo con i tuoi contatti: