Sistema per l'integrità dei dati (backup) importanti tramite rsync

alez

Vip
Dato che uso il Vu+ Duo come NAS nella rete locale casalinga e ho diversi hard disk USB collegati ad esso che uso come storage per foto ed altro materiale multimediale, mi sono inventato un sistema che mi faccia il backup in modo da salvaguardarmi da eventuali rotture di hard disk.

Lo script che riporto di seguito va comunque personalizzato e rappresenta soprattutto uno spunto più che uno script pronto e funzionante nel 100% dei casi, è utilizzabile su praticamente tutti i decoder Linux con Enigma1 e Enigma2 oltre che sui PC con linux, a patto di avere la versione di rsync compilata per il proprio sistema, per comodità in questo post allego la versione di rsync per Enigma2 (l'ho trovata in rete).

Premessa:

consideriamo di avere
/media/usb2

con montato il disco usato normalmente per lo storage dei dati che leggiamo e scriviamo normalmente

e

/media/usb3

con montato il disco di backup

nel mio caso particolare:

usb2 -> Western Digital Elements Desktop da 1,5 TB
usb3 -> Seagate FreeAgentDesktop 750 GB

sul disco WD ho una directory chiamata foto_e_ricordi che mi interessa backuppare sull'altro disco

Sia lo script di backup che si chiama mirror.sh che il binario di rsync compilato per mipsel li tengo sull'hard disk interno del Vu+ Duo in modo che siano sempre disponibili anche quando riflasho il decoder con una nuova immagine.

Ecco lo script:

Code:
#!/bin/sh

### Mirror dai dati sul disco di backup
# /media/usb2 -> disco sorgente
# /media/usb3 -> disco destinazione (backup)

LOG_PATH=/media/hdd/backup_logs/
LOG_FILE=$LOG_PATH`date '+%Y-%m-%d_%He%M'_mirror_log.txt`

COMANDO_RSYNC='/media/hdd/bin/rsync -av '

DISCO_SORGENTE=/media/usb2
DISCO_DESTINAZIONE=/media/usb3

FILE_VERIFICA_USB2=/media/usb2/io_sono_usb2
FILE_VERIFICA_USB3=/media/usb3/io_sono_usb3

if [ ! -d $LOG_PATH ]
then
mkdir $LOG_PATH
fi

touch $LOG_FILE

# Sveglio i dischi dallo standby
ls $DISCO_SORGENTE > /dev/null
ls $DISCO_DESTINAZIONE > /dev/null




echo "##########################################" >> $LOG_FILE
echo "Mirror del `date '+%d-%B-%Y alle %H:%M'`" >> $LOG_FILE
echo "##########################################" >> $LOG_FILE

echo "### BACKUP FOTO E RICORDI" >> $LOG_FILE

if [ -f $FILE_VERIFICA_USB2 ] && [ -f $FILE_VERIFICA_USB3 ]
then

echo "Dischi montati - faccio il backup" >> $LOG_FILE
$COMANDO_RSYNC /media/usb2/foto_e_ricordi/ /media/usb3/foto_e_ricordi/ >> $LOG_FILE

else
echo "Dischi non montato - backup fallito" >> $LOG_FILE
fi

echo "### FINE BACKUP FOTO E RICORDI" >> $LOG_FILE

Come funziona:

- si aspetta di trovare in /media/hdd/bin/ il binario di rsync
- si aspetta di creare i logs in /media/hdd/backup_logs/ se non esiste la directory la crea
- fa un ls sui 2 dischi in modo da toglierli dallo standby
- prima di effettuare l'rsync cerca nei 2 dischi un file che distingua chiaramente il disco:
io_sono_usb2 e io_sono_usb3, per creare questi 2 file basta dare il comando:

touch /media/usb2/io_sono_usb2

e


touch /media/usb3/io_sono_usb3

questo fa si che se per qualche motivo uno dei 2 dischi non è montato (soprattutto il destinazione) non succedano casini, tipo andare a riempire la flash del decoder col backup, dato che la posizione /media/usb3 non conterrebbe il disco ma sarebbe la flash

se tutto è ok, viene fatto l'rsync loggando tutto in /media/hdd/backup_logs/

vengono creati file di log con un nome sensato del tipo: 2011-03-16_08e40_mirror_log.txt

ecco un esempio del contenuto:

Code:
##########################################
Mirror del 16-March-2011 alle 08:40
##########################################
### BACKUP FOTO E RICORDI
Dischi montati - faccio il backup
building file list ... done
./
file_backuppato.jpg

sent 187546 bytes  received 48 bytes  41687.56 bytes/sec
total size is 63317073520  speedup is 337521.85
### FINE BACKUP FOTO E RICORDI

rsync con la modalità -av copia solo i files che hanno subito delle modifiche in modo da accelerare notevolmente i tempi.




Nota: il mio simpatico Seagate Free Agent Desktop ha il brutto vizio dopo un po che è inutilizzato di mettersi in Read Only :mad: quindi devo usare un trucchetto (che ho inserito direttamente nel mio script ma ho evitato di metterlo qui sopra), ossia fare l'umount e il mount per farlo tornare in Read Write:

Code:
### toglie USB3 (Seagate FreeAgentDesktop del caxxo) dal Read Only
if mount | grep "9d190f89-d07b-4a84-b513-82e87d7ea615" | grep "(ro" > /dev/null ; then
        echo "Disco in Read Only"
        umount /media/usb3
        mount /dev/disk/by-uuid/9d190f89-d07b-4a84-b513-82e87d7ea615 /media/usb3
else
        echo "Disco in Read Write"
fi



Spero di essere shtato shpiegato :D
 

Attachments

Back
Top