[Tech] Script per backup basato su rsync

Francesco Poli frx@firenze.linux.it
Dom 21 Dic 2003 13:12:56 CET


Salve a tutti!  :)
Ho preparato uno script (basato su rsync) per automatizzare i backup e,
pensando di fare cosa gradita, lo invio in lista.

Data la semplicita` dello script e la sua non eccessiva originalita`
(e` ispirato a http://article.gmane.org/gmane.linux.gentoo.user/44551),
il tutto e` da considerarsi di pubblico dominio (lo script *non* e`
soggetto ad alcun copyright).

Questo script crea una copia fedele di tutti i sottoalberi di directory
desiderati e puo` essere eseguito automaticamente (con i privilegi di
root) da crond.
La copia di backup sta su una partizione (di un disco interno o esterno)
che viene montata per l'occasione e smontata al termine delle
operazioni: nel file /etc/fstab deve esistere un'opportuna riga che
renda possibile montare questa partizione con la semplice sintassi

# mount <mount_point>

Lo script puo` (a richiesta) ripulire la copia di backup elimando da
questa i file che non sono piu` presenti nell'originale.
Si ottiene questo risultato passando l'argomento "clean" allo script.

E` inoltre possibile inibire il backup creando un file opportuno
(il file $GIVE_UP definito all'interno dello script stesso):
finche' esiste questo file lo script esce senza fare niente.
Si puo` anche inibire la pulizia della copia di backup creando un altro
file opportuno (il file $NO_CLEAN): finche' esiste questo secondo file
lo script disabilita la pulizia del backup anche nel caso in cui venga
richiesta.

Vediamo allora lo script e gli altri file correlati.

 =========================================================== file: ==
  -rwxr--r--  root  root  /usr/local/sbin/backuprsync.sh             
 =========================================================== inizio =
#!/bin/bash

#######################
# rsync backup script #
#######################

# file /etc/fstab must contain a line similar to
# /dev/something  /mount/point  ext3  noauto  0  0


# define /mount/point for backup disk
BACKUP_TO=/mnt/backup

# define include/exclude list file
INCLUDE=/usr/local/etc/backuprsync.include

# define give-up file
GIVE_UP=/usr/local/etc/nobackup

# define no-cleaning file
NO_CLEAN=/usr/local/etc/noclean


echo "   Checking if backup is desired..."
echo
[ -e $GIVE_UP ] && exit 1

echo -n "   Checking if cleaning is desired: "
if [ $1 -a $1 == "clean" -a ! -e $NO_CLEAN ]
then
    DELETE_OPT="--delete"
    echo "yes..."
else
    DELETE_OPT=""
    echo "no..."
fi
echo

echo "   Mounting backup filesystem..."
echo
/bin/mount $BACKUP_TO
sleep 4

echo "   Checking if backup filesystem is really mounted..."
echo
/bin/mount | /bin/egrep $BACKUP_TO || exit 2
echo

echo "   Performing backup..."
echo
/usr/bin/rsync -av $DELETE_OPT --include-from=$INCLUDE / $BACKUP_TO/
echo

echo "   Reporting backup filesystem status..."
echo
/bin/df --si $BACKUP_TO
echo

echo "   Unmounting backup filesystem..."
echo
/bin/umount $BACKUP_TO

 =========================================================== fine ===

 =========================================================== file: ==
  -rw-r-----  root  root  /usr/local/etc/backuprsync.include         
 =========================================================== inizio =
- lost+found
- /etc/mtab
- /etc/gshadow
- /etc/gshadow-
- /etc/shadow
- /etc/shadow-
+ /etc**
+ /usr/
+ /usr/local**
+ /var/
+ /var/local**
+ /home/
- /home/frx/.galeon/mozilla/galeon/Cache
+ /home/frx**
- *
 =========================================================== fine ===

 =========================================================== file: ==
  -rwxr--r--  root  root  /etc/cron.backuptime/dobackup
 =========================================================== inizio =
#!/bin/sh

/usr/local/sbin/backuprsync.sh

 =========================================================== fine ===

 =========================================================== file: ==
  -rwxr--r--  root  root  /etc/cron.cleantime/dobackupclean
 =========================================================== inizio =
#!/bin/sh

/usr/local/sbin/backuprsync.sh clean

 =========================================================== fine ===


Infine, aggiungendo le seguenti righe al file /etc/crontab, si ottiene
l'esecuzione automatica del backup ogni sera alle ore 22;01 dal lunedi`
al venerdi` e l'esecuzione automatica del backup con pulizia ogni sabato
sera (sempre alle ore 22;01):

# custom run-parts
01 22 * * 1-5 root run-parts /etc/cron.backuptime
01 22 * * 6   root run-parts /etc/cron.cleantime



Commenti, idee, suggerimenti sono graditi!
Ciao!  :)

-- 
             |  GnuPG Key ID = DD6DFCF4 | You're compiling a program
  Francesco  |        Key fingerprint = | and, all of a sudden, boom!
     Poli    | C979 F34B 27CE 5CD8 DC12 |         -- from APT HOWTO,
             | 31B5 78F4 279B DD6D FCF4 |             version 1.8.0
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        non disponibile
Tipo:        application/pgp-signature
Dimensione:  189 bytes
Descrizione: non disponibile
URL:         <http://lists.linux.it/pipermail/flug-tech/attachments/20031221/4d7b92e8/attachment.pgp>


Maggiori informazioni sulla lista flug-tech