Backup con rsync

Multiple Wired to Backup

Mi sono trovato a voler avere un backup sempre aggiornato del contenuto del mio sito internet sul mio pc o comunque su un server con Debian/Ubuntu oppure da archlinux e devo dire che la cosa è molto comoda.
Questa procedura si può applicare anche nel caso abbiamo semplicemente uno storage remoto condiviso tra più computer e che vogliamo mantenere sincronizzato.

 

cosa serve?

Occorre installare due strumenti: curlftpfs e rsync. Il primo e’ un modolo FUSE per montare un indirizzo FTP come se fosse una normale directory del nostro spazio disco. Il secondo un programma che sincronizza file e directory in locale, via rsh e via ssh.

Combinando la capacita’ di fare mirror tra risorse locali di rsync e quella di curlftpfs di montare un indirizzo FTP come risorsa locale, il gioco è presto fatto.

 

Entrambi sono presenti come pacchetti nei repository ufficiali di Ubuntu e altre Debian like, ma anche su archlinux.

dunque su Debian/Ubuntu

$ sudo apt-get install curlftpfs rsync

e su Archlinux digitiamo:

$ sudo pacman -S curlftpfs rsync

Creiamo una cartella ad esempio in /media/nomesito che conterrà ciò che è contenuto nel sito ftp.

$ sudo mkdir /media/nomesito.ext

 

Montiamo il sito ftp sulla cartella appena creata; per il mio sito ho fatto così:

 

rsync -azvv --delete /media/nomesito.ext/ /opt/backup/nomesito.ext/

 

Ora il più è fatto, infatti una volta lanciato il comando si vedranno su terminale tutti i file che vengono copiati in locale e avremo una copia del sito sincronizzata esattamente con lo spazio web di cui abbiamo fatto il mirror.

Se cambiamo qualcosa sul sito, facendo di nuovo rsync, tutti i cambiamenti verranno implementati nella copia locale.

Potremmo anche creare uno script che automatizza il tutto. Io ne ho creato uno ad hoc per il mio sistema e funziona benissimo e permette di salvare i log di tutti i file copiati o modificati direttamente in un file di testo.

dunque creiamo lo script così:

 

#vi backupftp.sh

con dentro:

#!/bin/sh
DAY=$(/bin/date +%u)
echo "MI ASSICURO CHE ESISTA LA CARTELLA COME PUNTO DI MOUNT /media/filippoaceto.it";

if [ ! -d /media/filippoaceto.it ]; then

  mkdir /media/filippoaceto.it 2>/dev/null

fi



echo "VERIFICO SE HO MONTATO IL SITO FTP IN CASO CONTRARIO LO MONTO";

if mount | grep ftp.filippoaceto.it > /dev/null; then

 echo "VOLUME MONTATO"

else

 curlftpfs ftp://userftp:password@ftp.filippoaceto.it /media/filippoaceto.it

fi



echo "MI ASSICURO CHE ESISTA LA CARTELLA DOVE EFFETTUARE IL BACKUP IN /opt/backup/filippoaceto.it";
if [ ! -d /opt/backup/filippoaceto.it ]; then

  mkdir /opt/backup/filippoaceto.it 2>/dev/null


fi

echo "MI ASSICURO CHE ESISTA LA CARTELLA DOVE EFFETTUARE IL LOG DEL BACKUP IN /opt/backup/filippoaceto.it/log";

if [ ! -d /opt/backup/filippoaceto.it/log ]; then 

 mkdir /opt/backup/filippoaceto.it/log 2>/dev/null
    
fi

echo "VERIFICO mount TRAMITE PRESENZA DELLA CARTELLA /media/filippoaceto.it/www.filippoaceto.it"

if [ ! -d /media/filippoaceto.it/www.filippoaceto.it ]; then

    echo "MOUNT ERRATO, BACKUP ANNULLATO";

    exit



else

	    if [ $DAY -eq 6 ]; then 

         echo "ESEGUO BACKUP con SINCRONIA se SABATO"

         /usr/bin/rsync -va --delete /media/filippoaceto.it/ /opt/backup/filippoaceto.it --log-file=/opt/backup/filippoaceto.it/log/backupsincronia_$(date +\%Y\%m\%d).txt

	    else

          echo "ESEGUO BACKUP INCREMENTALE"

          /usr/bin/rsync -va /media/filippoaceto.it/ /opt/backup/filippoaceto.it --log-file=/opt/backup/filippoaceto.it/log/backup_$(date +\%Y\%m\%d).txt

         fi

         if mount | grep ftp.filippoaceto.it > /dev/null; then

         echo "SMONTO VOLUME DI RETE"

        /bin/umount /media/filippoaceto.it

         fi

fi

per salvare il file shift + zz

Avviando questo script si crea sul mio sistema la cartella  /opt/backup/filippoaceto.it che contiene esattamente in locale ciò che è sul sito ftp.

quindi prima rendiamolo eseguibile:

 

# chmod +x backupftp.sh

 

e poi avviamolo:

 

# ./backupftp.sh

 

Potremmo ora montare magari il nostro sito ftp all’avvio del sistema e  far si che questo script, oppure direttamente il comando curlftpfs vengano eseguiti a cadenze regolari.

Modifichiamo il file /etc/fstab:

 

curlftpfs#userftp:passwordftp@ftp.nomesito.ext /media/nomesito.ext fuse allow_other,ro,user,auto,_netdev 0 0

 

è importante l’opzione “_netdev” che richiede che il collegamento ad internet sia disponibile prima di montare lo spazio.

Se lo omettessimo il sistema non si avvierebbe non riuscendo a montare l’ftp in quanto la rete, al momento del montaggio, non sarebbe ancora disponibile.

 

Poi per schedulare i backup possiamo usare crontab

Dando da terminale:

 

$ crontab-e

 

inseriamo la seguente riga:

 

00 21 * * * /root/backupftp.sh

per salvare il file shift + zz

 

Con questa sintassi abbiamo detto allo schedulatore cron di avviare lo script alle 21, ogni giorno.

 

 

Se poi volete gestire uno storage remoto tenendolo sincronizzato tra più pc, allora basta fare un primo mirror dallo storage verso il vostro pc, e poi dal pc verso lo storage ogni volta che modificate la copia dei contenuti sul vostro pc.

 

Written by Filippo Aceto

Tecnico informatico, appassionato di tecnologia e sistemi. Un curioso alla ricerca delle migliori risposte.

Rispondi