|
Backup incremental
Esta es una forma de realizar backup incremental en servidores externos usando en este caso gmail. Luego de buscar con cpio, rsync y dump decidi quedarme con tar.
La idea es crear un backup semanal completo y luego incrementales diarios. Para crear los incrementales se usa la opcion --newer de tar y se le entrega la fecha del ultimo respaldo full realizado.
Los backup quedan en una cuenta de correo de internet.
Configuracion:
- /opt/csa/sendmail.sh : shell para enviar correos con adjuntos
- /opt/backup/fullbk.sh : script de backup completo
- /opt/backup/incrbk.sh : script de backup incremental
- /opt/backup/sync : scripts y datos de servidores remotos (samba)
- /opt/backup/remote/mnt : carpeta con datos sincronizados de otros PCs
- /opt/backup/<NAME>/data/full.tgz : Ultimo respaldo completo de NAME.
- /opt/backup/<NAME>/data/iyyyymmdd_ddd.tgz : Ultimos respaldos incrementales despues del ultimo repaldo full de NAME.
Cada carpeta a respaldar debe contener las carpetas con links a las carpetas a respaldar.
Nota: El respaldo se realiza siguiendo links.
Listado 1: fullbk.sh
#!/bin/sh
BASE=/opt/backup/$1
DATA=$BASE/data
DEST=$DATA/full.tgz
SOURCE=$BASE/root
LOG=/opt/backup/log
TODAY=`date "+%Y-%m-%d %a"`
echo `date` Full $1 backup >> $LOG
# Borrar copia existente
/bin/rm -f $DEST
# Crear respaldo local
/bin/tar -chzf $DEST $SOURCE
echo " " `/bin/ls -sh $DEST` >> $LOG
# Borrar los respaldos incrementales
/bin/rm -f $DATA/i*
# Enviar correo
# Convertir el archivo en varios archivos pequeños
split -C 3m -a 1 $DEST $DEST.
i=0;
for f in $DEST.? ; do
((++i))
/opt/csa/sendmail.sh
-s "$1 Full Backup (part $i) `date`"
-a "$f" cuenta@sitio.com >> $LOG
done;
rm -f $DEST.?
Originalmente no usaba split, pero los correos empezaron a ser demasiado grandes el sitio no lo soportaba
Listado 2: incrbk.sh
#!/bin/sh
HOME=/opt/backup
BASE=$HOME/$1
DATA=$BASE/data
LASTFULL=$DATA/full.tgz
SOURCE=$BASE/root
TODAY=`date "+%Y-%m-%d_%a"`
LASTDATE=`stat -c %y $LASTFULL`
LOG=/opt/backup/log
DEST=$DATA/i$TODAY.tgz
echo `date` incremental $1 backup >> $LOG
# Borrar el incremental existente (si existe)
/bin/rm -f $INCRNAME
# Crear incremental
/bin/tar -chz --newer "$LASTDATE" -f $DEST $SOURCE
echo " " `/bin/ls -sh $DEST` >> $LOG
# Enviarlo por correo con la lista de archivos modificados
# desde el ultimo full backup.
cd $SOURCE
/usr/bin/find . -newer $LASTFULL -follow -xtype f -printf "%t %kk %p n" > $DATA/last
cd $HOME
/opt/csa/sendmail.sh -s "$1 Incremental Backup `date`" -a "$DEST" -l $DATA/last email@site.com >> $LOG
Traer datos de otros computadores
Para realizar backup de otros archivos estoy usando un script que monta datos
Listado 3: adminSync.sh
#!/bin/sh
BASE=/opt/backup/remote
mount -t smbfs -o username=Administrador,password=XXXXXX //Firenze/Admin $BASE/mnt || exit
rsync -a --delete $BASE/mnt/. $BASE/Administracion/
umount $BASE/mnt
Seamos flojos... usemos crontab
Listado 4: crontab
#
# Backup de fuentes
#
11 5 * * 0 /opt/backup/fullbk.sh sources
21 5 * * * /opt/backup/incrbk.sh sources
#
# Backup de documentos
#
30 4 * * 0 /opt/backup/fullbk.sh firenze
20 4 * * * /opt/backup/incrbk.sh firenze
#
# Sincronizar archivos de firenze
#
32 11,13,18,20,22 * * * /opt/backup/sync/adminSync.sh
Ver referencias en:
|