Backup senza intoppi con Rsync, per avere i dati di un server subito salvati su un secondo server di backup, con uno script progettato ad hoc
Un backup è sempre cosa buona e giusta! Infatti, avere una copia di riserva di file e dati è un salvavita non indifferente, in tutte quelle occasioni di crash o malfunzionamenti che non consentono l’accesso ai dati presenti sul server.
Inoltre, l’ideale è avere il backup memorizzato altrove, ad esempio su un altro server, magari geograficamente distante, in modo che qualsiasi “catastrofe” al server posto nel primo data center non intacchi minimamente i dati conservati in un secondo data center, posizionato a chilometri di distanza.
Potremmo dunque pensare di effettuare un salvataggio di una determinata cartella del server su un altro server, implementando un backup di tipo incrementale, molto veloce nell’esecuzione, in quanto vengono salvati i soli dati modificati rispetto all’ultimo backup completo o incrementale effettuato.
Per gli utenti Linux e di sistemi operativi Unix-based, la parola backup incrementale fa spesso rima con Rsync, un software capace di sincronizzare file e cartelle memorizzate in posizioni differenti, minimizzando il trasferimento dei dati e quindi il traffico utilizzato.
Possiamo quindi pensare di realizzare un piccolo script capace di copiare i file da una cartella predefinita presente nel nostro server Linux in un’altra cartella di destinazione, memorizzata in un secondo server sempre Linux.
Qualora non possedessimo un secondo server, potremmo decidere di affidarci al servizio di Online Storage di Hosting Solutions, che mette a disposizione degli utenti 256 GB di spazio storage su NAS/SAN di fascia enterprise in configurazione RAID5 + Hot spare con accesso Rsync/HTTP, oltre che FTP, su una banda garantita da 512 kbps in upload e download.
Backup con Rsync in pochi comandi
Immaginiamo di voler effettuare il backup di una cartella specifica del server, ad esempio la home dell’utente. Definiamo quindi una variabile a cui assegniamo proprio il percorso di questa cartella:
BCK_DIR=/home/$USER
Immaginiamo poi di voler escludere dal backup eventuali sottocartelle o pattern di file, definendo delle apposite variabili a cui assegniamo gli elementi da escludere:
EXCLUDE1=/path/to/exclude_file
EXCLUDE2=”*.tmp”
ecc.
Definiamo ora una variabile a cui assegniamo il nome utente con cui accedere al server:
USER=nomeutenteserver
e una variabile a cui assegnare l’indirizzo IP del server di backup o del servizio di online storage:
IPSERVER=ipserverbackup
Infine, definiamo la cartella di destinazione e il nome del file di log con due apposite variabili:
DESTINAZIONE=/remote/dir
LOGFILE=nomefiledilog.log
A questo punto, possiamo utilizzare il comando rsync per istruire il software all’esecuzione del backup:
rsync -avz –delete –stats -e ssh –exclude=$EXCLUDE1 –exclude=$EXCLUDE2 $BCK_DIR $USER@$IPSERVER:$DESTINAZIONE > $LOGFILE
dove:
-a: attiva la funzione archivio, ossia mantiene le informazioni sui permessi e date del file
-v: attiva la modalità “verbose” mostrando a schermo tutto ciò che rsync eseguirà
-z: attiva la compressione dei file prima del trasferimento
-delete: verifica che vengano eliminati dalla destinazione i file non più presente nell’origine del backup
-e ssh: attiva la comunica tramite SSH
-stats: offre in output le statistiche
-exclude: indica le esclusioni
Infine, c’è da notare che invece di usare l’opzione -log per creare un file di log, abbiamo preferito inviare direttamente l’output del comando su un file, in quanto in alcune vecchie versioni di rsync l’opzione -log non è supportata.
Insomma, lo script rsync completo per il backup dovrebbe avere questa forma:
#!/bin/bash
BCK_DIR=/home/$USER
EXCLUDE1=/path/to/exclude_file
EXCLUDE2=”*.tmp”
USER=nomeutenteserver
IPSERVER=ipserverbackup
DESTINAZIONE=/remote/dir
LOGFILE=nomefiledilog.log
rsync -avz –delete –stats -e ssh –exclude=$EXCLUDE1 –exclude=$EXCLUDE2 $BCK_DIR $USER@$IPSERVER:$DESTINAZIONE > $LOGFILE
Per rendere il tutto più elegante, potremmo anche pensare di creare un file di testo (ad esempio exclude.txt) dove raccogliamo tutte le esclusioni, in modo da sostituire tutte le variabili EXCLUDEn con un’unica variabile a cui si assegna il file di testo, per poi sostituire le varie opzioni –exclude con un’unica opzione –exclude-from a cui si assegna la variabile contenente il nome del file di testo.
Una volta pronto lo script, possiamo procedere all’automazione dell’esecuzione del backup attraverso cron, non prima però di aver reso la procedura indipendente dall’inserimento della password da parte dell’utente, attraverso la creazione di una chiave SSH.