Come dal titolo del thread avevo la necessità di effettuare dei backup periodici dal mio pc da lavoro che fossero del tutto automatizzati e sopratutto su un supporto esterno rispetto l'hard disk del mio pc.
La strada da percorrere era metter su un server di backup ma questo presuppone di avere una macchina disponibile da utilizzare e della corrente in più da consumare giornalmente.
Dopo un attimo di riflessione pensai subito di sfruttare il mio router AGPF con OpenWrt per raggiungere il mio scopo.
Per farla breve ho utilizzato un pacchetto disponibile con OpenWrt che si chiama rdiff-backup (
http://www.nongnu.org/rdiff-backup/) e creato uno script shell che mi fa le seguenti operazioni:
1) Accende il pc da cui voglio fare il backup ad un ora prefissata.
2) Esegue il backup delle directory che m'interessano.
3) Calcola le statistiche dei file trasferiti e le loro dimensioni.
4) Mi spedisce un' e-mail con il rapporto dettagliato delle statistiche e nel caso fallisca mi salva un file di testo.
5) Spegne il pc da remoto.
Ecco il codice dello script che fa il lavoro descritto:
#!/bin/sh
################################
# Backup script for lupin pc.
################################
#Avvio e controllo della macchina
etherwake -i br-lan 00:1f:c5:f4:3c:be
#Controllo se l'avvio è riuscito
check_sleep="$(ping -c3 192.168.1.2 | sed -n '{/'ttl'/p')"
while [ "$check_sleep" == "" ]; do
sleep 5
check_sleep="$(ping -c3 192.168.1.2 | sed -n '/'ttl'/p')"
done
sleep 40
#Dichiaro le variabili
MOUNT=/tmp/share
mkdir $MOUNT
SRC_DIR=$MOUNT
DST_DIR=/mnt/backup/backup
MAIL_RECIPIENT=mia_email@gmail.com
TMP_FILE=/tmp/backupResult.log
LAST_LOG=/mnt/backup/ultimo_log.txt
if [ -f $LAST_LOG= ]; then
rm $LAST_LOG
fi
#Monto il filesystem remoto di windows
mount.cifs //192.168.1.2/LUPIN-PC/lavoro $SRC_DIR -o user=lupin,passwd=mia_password,noserverino,nolinux
sleep 3
# Run rdiff backup
/usr/bin/rdiff-backup --force --remove-older-than 60D ${DST_DIR} >> $TMP_FILE 2>> $TMP_FILE #questa riga elimina i backup più vecchi di 60 giorni
gpioctl dirout 25 > /dev/null
/usr/bin/rdiff-backup --print-statistics $SRC_DIR $DST_DIR >> $TMP_FILE 2>> $TMP_FILE
/usr/bin/rdiff-backup $SRC_DIR $DST_DIR
CHECK_ERROR=$?
/usr/bin/rdiff-backup --list-increments $DST_DIR >> $TMP_FILE
/usr/bin/rdiff-backup --list-increment-size $DST_DIR >> $TMP_FILE
#Smonto il file_system remoto di windows
umount $SRC_DIR
#Invio e-mail del report
if [ $CHECK_ERROR -eq 0 ]; then
PRINT=$(cat $TMP_FILE)
DATA=`date '+DATA: %d/%m/%y%nORA: %H:%M:%S'`
echo -e "Subject: *Backup-lupin*\n
Backup effettuato in data: $DATA\n
-------------------------------------------------------------------\n
************************* Report ************************\n
-------------------------------------------------------------------\n
$PRINT" | msmtp $MAIL_RECIPIENT 1> /dev/null
CHECK_EMAIL=$?
if [ $CHECK_EMAIL -ne 0 ]; then
echo -e "*Backup-lupin*\n
Backup effettuato in data: $DATA\n
-------------------------------------------------------------------\n
************************* Report ************************\n
-------------------------------------------------------------------\n
$PRINT" > $LAST_LOG
fi
else
DATA=`date '+DATA: %d/%m/%y%nORA: %H:%M:%S'`
echo -e "Subject: *Backup-lupin*\n
Backup effettuato in data: $DATA\n
--------------------------------------------------------------------\n
************************* Report ************************\n
--------------------------------------------------------------------\n
BACKUP COMPLETATO CON ERRORI...RIPROVA!" | msmtp $MAIL_RECIPIENT 1> dev/null
CHECK_EMAIL=$?
if [ $CHECK_EMAIL -ne 0 ]; then
echo -e "*Backup-lupin*\n
Backup effettuato in data: $DATA\n
--------------------------------------------------------------------\n
************************* Report ************************\n
--------------------------------------------------------------------\n
BACKUP COMPLETATO CON ERRORI...RIPROVA!" > $LAST_LOG
fi
fi
gpioctl dirin 25 > /dev/null
#Rimuovo log_file temporaneo
rm $TMP_FILE
#Rimuovo directory temporanea
rm -fr $MOUNT
#Arresto il pc da remoto
ssh lupin@192.168.1.2 shutdown /s
exit
Naturalmente occorre che la directory windows da cui si vuole fare il backup sia in
condivisione file e che il pc sia configurato per essere avviato con il
wake-on-lan. Inoltre, occorre avere installato sull'agpf : cifsmount, rdiff-backup, msmtp, open-ssh e tutti i pacchetti per la gestione di una pendrive usb (o HD) e sulla macchina windows cgwin con openssh (per spegnere la macchina al termine del backup).
Per effettuare il backup ad un orario prestabilito basterà inserire lo script nel crontab.
Personalmente ho scelto di avviare lo script la notte quando il pc non è in uso; il primo backup impiegherà un po di tempo (dipende anche dalle dimensione della directory di backup) mentre i successivi molto meno.
Questo un esempio dell'email che si riceve dopo il backup:
Backup effettuato in data: DATA: 07/12/11
ORA: 06:30:12
-------------------------------------------------------------------
************************* Report *********************
-------------------------------------------------------------------
--------------[ Session statistics ]--------------
StartTime 1323234099.00 (Wed Dec 7 06:01:39 2011)
EndTime 1323234972.34 (Wed Dec 7 06:16:12 2011)
ElapsedTime 873.34 (14 minutes 33.34 seconds)
SourceFiles 39534
SourceFileSize 2101754702 (1.96 GB)
MirrorFiles 39534
MirrorFileSize 2101754702 (1.96 GB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
DeletedFileSize 0 (0 bytes)
ChangedFiles 41
ChangedSourceSize 77843428 (74.2 MB)
ChangedMirrorSize 77843428 (74.2 MB)
IncrementFiles 41
IncrementFileSize 98403 (96.1 KB)
TotalDestinationSizeChange 98403 (96.1 KB)
Errors 0
--------------------------------------------------
Found 11 increments:
increments.2011-11-14T06:13:51+01:00.dir Mon Nov 14 06:13:51 2011
increments.2011-11-15T06:16:10+01:00.dir Tue Nov 15 06:16:10 2011
increments.2011-11-16T06:16:09+01:00.dir Wed Nov 16 06:16:09 2011
increments.2011-11-17T06:14:12+01:00.dir Thu Nov 17 06:14:12 2011
increments.2011-11-18T06:14:08+01:00.dir Fri Nov 18 06:14:08 2011
increments.2011-11-21T06:10:02+01:00.dir Mon Nov 21 06:10:02 2011
increments.2011-11-25T06:16:41+01:00.dir Fri Nov 25 06:16:41 2011
increments.2011-11-28T06:13:53+01:00.dir Mon Nov 28 06:13:53 2011
increments.2011-11-29T06:14:28+01:00.dir Tue Nov 29 06:14:28 2011
increments.2011-11-30T06:13:46+01:00.dir Wed Nov 30 06:13:46 2011
increments.2011-12-06T06:22:51+01:00.dir Tue Dec 6 06:22:51 2011
Current mirror: Wed Dec 7 06:16:15 2011
Time Size Cumulative size
-----------------------------------------------------------------------------
Wed Dec 7 06:16:15 2011 1.96 GB 1.96 GB (current mirror)
Tue Dec 6 06:22:51 2011 96.1 KB 1.96 GB
Wed Nov 30 06:13:46 2011 8.61 MB 1.97 GB
Tue Nov 29 06:14:28 2011 147 bytes 1.97 GB
Mon Nov 28 06:13:53 2011 2.37 KB 1.97 GB
Fri Nov 25 06:16:41 2011 14.1 KB 1.97 GB
Mon Nov 21 06:10:02 2011 3.64 MB 1.97 GB
Fri Nov 18 06:14:08 2011 65.0 KB 1.97 GB
Thu Nov 17 06:14:12 2011 4.46 KB 1.97 GB
Wed Nov 16 06:16:09 2011 4.64 KB 1.97 GB
Tue Nov 15 06:16:10 2011 128 KB 1.98 GB
Mon Nov 14 06:13:51 2011 349 KB 1.98 GB
------------------------------------------------------------------------------
Buon backup a tutti!