Autore Topic: Backup dati lavoro con router OpenWrt  (Letto 736 volte)

lupin73

  • Full Member
  • ***
  • Post: 128
    • Mostra profilo
    • E-mail
Backup dati lavoro con router OpenWrt
« il: Dicembre 08, 2011, 11:34:53 am »
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:

Codice: [Seleziona]
#!/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!
« Ultima modifica: Dicembre 08, 2011, 01:45:09 pm da lupin73 »

Avatar

  • Sr. Member
  • ****
  • Post: 798
    • Mostra profilo
    • my Netbuk server
    • E-mail
Re: Backup dati lavoro con router OpenWrt
« Risposta #1 il: Dicembre 08, 2011, 03:17:12 pm »
complimenti!  :-)
davvero un bel lavoro, e grazie per la condivisione, pu? tornare utile a molti.
Considerate la vostra semenza: fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

lupin73

  • Full Member
  • ***
  • Post: 128
    • Mostra profilo
    • E-mail
Re: Backup dati lavoro con router OpenWrt
« Risposta #2 il: Dicembre 08, 2011, 03:28:14 pm »
complimenti!  :-)
davvero un bel lavoro, e grazie per la condivisione, pu? tornare utile a molti.
Grazie tante ma il vero merito bisogna darlo a rdiff-backup che ? uno strumento indispensabile per avere i propi dati al sicuro.
Esistono vari strumenti che girano anche con windows ma io mi fido solo di linux  :-D

lupin73

  • Full Member
  • ***
  • Post: 128
    • Mostra profilo
    • E-mail
Re: Backup dati lavoro con router OpenWrt
« Risposta #3 il: Dicembre 08, 2011, 04:12:16 pm »
Dimenticavo di elencare i comandi per il recupero dei dati.
Eccone alcuni ma per la lista completa consultare il manuale.

#Lista dei backup incrementali presenti
rdiff-backup -l <directory di destinazione dei backup>
Esempio:
Codice: [Seleziona]
root@BackupWrt:~#  rdiff-backup -l /mnt/sda3/lupin/
Found 4 increments:
    increments.2011-09-19T13:53:12+02:00.dir   Mon Sep 19 13:53:12 2011
    increments.2011-09-19T13:54:57+02:00.dir   Mon Sep 19 13:54:57 2011
    increments.2011-09-19T13:57:35+02:00.dir   Mon Sep 19 13:57:35 2011
    increments.2011-09-19T14:10:25+02:00.dir   Mon Sep 19 14:10:25 2011

Per recuperare  increments.2011-09-19T13:53:12+02:00.dir digitare:

Codice: [Seleziona]
rdiff-backup -r   2011-09-19T13:53:12+02:00   <directory di destinazione dei backup> <directory di recupero>
N.B. La directory di recupero bisogna crearla

Esempio
Codice: [Seleziona]
rdiff-backup -r   2011-09-19T13:53:12+02:00 /mnt/sda3/lupin/  /mnt/sda3/recovered


In alternativa :
Codice: [Seleziona]
rdiff-backup -r 4B   /mnt/sda3/lupin/  /mnt/sda3/recoveredQuesto comando recuperer?  il 4? incremento precedente all'attuale

Codice: [Seleziona]
rdiff-backup -r   3D /mnt/sda3/lupin/  /mnt/sda3/recoveredQuesto comando recuperer?  il backup di 3 giorni prima.
N.B Posso indicare anche i minuti . Es 5m

Naturalmente poi si pu? usare un client ssh (come filezilla su windows) per copiare i file nella directory che deve esssere ripristinata o usare scp.