Introduzione
Se hai un VPS, o comunque amministri un server linux, almeno una volta ti sarai chiesto come effettuare dei backup, magari automatizzati, dei tuoi dati, in caso di problemi o attacchi.Per molti utenti i backup sono una vera e propria paranoia, non sapendo come dimenarsi fra le centinaia di soluzioni diverse possibili, tra software o infrastrutture a pagamento, open-source o altro. Quasi tutti i fornitori di servizi Cloud offrono un proprio piano di backup o snapshot del sistema, talvolta a pagamento. Ma se volessimo effettuare un backup o snapshot noi stessi? Magari in locale o su un altro servizio Cloud per aumentare la ridondanza?
Beh, semplicemente pensarci troppo non serve, la soluzione è rsync, potente software disponibile in quasi tutte le repository linux!
Molti utenti stanno alla larga dalle soluzioni a riga di comando, quando invece risultano molto semplici ed efficaci. Possiamo in questo modo effettuare backup incrementali, conservare snapshot ed automatizzare il tutto con l'aiuto dei cron!
Vediamo tutto in questa guida!
Prerequisiti
- 2 Server Linux, ovvero uno di sorgente e uno di destinazione. Possono essere qualsiasi tipo di macchina: VPS, PC locale, istanza aws etc..
- Accesso ssh su entrambi i server
- Nessuna fobia verso i software a riga di comando!
Come installare rsync
Questo software è preinstallato su molte distro. Verifichiamo se è già presente su entrambi i server con
Bash:
Accedi o Registrati per vedere questo contenuto.
Bash:
Accedi o Registrati per vedere questo contenuto.
Casi d'uso
Prima di procedere, dobbiamo aver chiaro come (e dove) vogliamo effettuare i backup. Se i nostri backup andranno su un server remoto, useremo il protocollo SSH. In questo caso, di seguito creeremo una chiave pubblica e privata per automatizzare la connessione senza che ci venga richiesto l'inserimento di password (necessario in seguito per i cron).Se invece intendete effettuare il backup su un dispositivo locale (un hard disk locale o un'altra cartella dell'OS), non sarà necessario.
Di seguito, nel caso "remoto", chiameremo
- ServerA - Il server sorgente, ovvero quello da copiare (interamente o solo determinate directory)
- ServerB - Il server destinazione, dove saranno conservati i backup.
Creazione chiave pubblica e privata
TIP: Questo argomento è molto complesso, per approfondimenti consiglio una lettura della nostra guida
Guida Verificata - Come utilizzare l'autenticazione SSH a Chiave Pubblica
Introduzione In questa piccola guida, vedremo brevemente come utilizzare l'autenticazione SSH tramite chiave pubblica e privata. L'argomento era stato accennato nella nostra precedente guida, senza approfondirlo...

Colleghiamoci in SSH al nostro ServerA e creiamo una coppia di chiavi con
Bash:
Accedi o Registrati per vedere questo contenuto.
Copiamo ora la chiave sul ServerB
Bash:
Accedi o Registrati per vedere questo contenuto.
Effettuare il Backup
Vogliamo che i backup vadano a finire ad esempio nella directory /root/backup/ del ServerBCaso 1: Backup directory specifiche (ad esempio di un sito web)
Se vogliamo copiare solo delle directory specifiche, ad esempio /var/www/html il comando da eseguire sul ServerA è
Bash:
Accedi o Registrati per vedere questo contenuto.
Caso 2: Backup intero sistema
Per fare il backup dell'intero sistema operativo, usiamo invece (sempre sul ServerA) il comando
Bash:
Accedi o Registrati per vedere questo contenuto.
Spiegazione
Generalmente, un comando rsync è composto in questo modo:rsync -opzioni sorgente destinazione
Ci sono poi svariate opzioni che possiamo applicare, tra le più comuni, troviamo
- -a Crea un archivio dei file, includendo gli attributi.
- -v Mostra a schermo le operazioni.
- -z Attiva la compressione dei file.
- --delete elimina nei successivi backup incrementali i file non più esistenti nella sorgente (in pratica le directory saranno completamente sincronizzate).
- --exclude Esclude le directory indicate, come nel caso sopra.
- -e Permette di inserire ulteriori istruzioni al collegamento SSH, come il percorso della chiave se non è in quello standard o una porta diversa dalla 22 (esempio:
-e "ssh -i /root/pippo/chiaveprivata -p 12345"
). - --dry-run Esegue un avvio di prova.
- -X Preserva gli attributi estesi.
- -A Preserva l'ACLs.
Se lanciamo il comando per una seconda volta, notiamo che ci saranno pochissimi cambiamenti, in quanto la sincronizzazione è di tipo incrementale, e solo glie effettivi file modificati, rimossi o aggiunti vengono trasferiti nuovamente.
Sincronizzazione automatica
Per evitare di dover lanciare ogni volta il comando, possiamo avviarlo ad un ora (o un giorno) specifico grazie ai cron.Creiamo uno script sul ServerA, ad esempio
Codice:
Accedi o Registrati per vedere questo contenuto.
Bash:
Accedi o Registrati per vedere questo contenuto.
Bash:
Accedi o Registrati per vedere questo contenuto.
Codice:
Accedi o Registrati per vedere questo contenuto.
In questo modo, lo script verrà lanciato ogni giorno alle 20.30, mantenendo le 2 directory sui 2 server sincronizzate!
Effettuare delle Snapshots
Quanto visto fino ad ora ci permette di avere 2 directory sincronizzate, ma non vogliamo fermarci qui! Un server in produzione, deve avere dei backup storici dei file presenti ad esempio 3 giorni fa, in modo da recuperare eventuali modifiche, file rimossi o persi. Le snapshots ci consentono di mantenere quanti più backup storici vogliamo, feature offerta dai maggiori programmi (a pagamento) di backup!Operazione molto facile grazie agli script e i cronjob!
Creiamo un ulteriore script sul ServerA
Codice:
Accedi o Registrati per vedere questo contenuto.
Bash:
Accedi o Registrati per vedere questo contenuto.
/root/snapshot.sh
oppure inserirlo in un cronjob.Digitando sempre
Bash:
Accedi o Registrati per vedere questo contenuto.
Codice:
Accedi o Registrati per vedere questo contenuto.
In questo modo, con questi script, viene fatto quanto segue:
- Crea un'istantanea della directory sorgente e la trasferisce al server di backup nella cartella di destinazione specificata.
- Crea un soft link "current" nella directory di destinazione all'ultima istantanea all'interno della directory.
- Controlla le istantanee più vecchie di 30 giorni e le elimina per risparmiare spazio sul server di backup.
Bash:
Accedi o Registrati per vedere questo contenuto.
Come vedete, il risultato finale è identico a quello raggiunto con altre soluzioni che fanno uso di software con GUI o addirittura a pagamento. Il protocollo utilizzato per trasferire i file è SSH, dunque sicuro. I file nella directory di destinazione naturalmente non sono protetti di per se, ma si può facilmente ovviare alla cosa tramite altri software crittografici come Veracrypt e simili.