[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