En este pequeño manual, lo que explicaré será como automatizar una serie de copias de seguridad completas e incrementales, con ayuda de dos grandes herramientas de los sistemas operativos basados en LINUX, llamados CRONTAB y SHELLSCRIPT.
Descripción del script:
Una breve explicación del script realizado sería la siguiente, el script es ejecutado diariamente por el sistema gracias a crontab, al ser ejecutado el script, si fuese día 1 del mes, este haría una copia de seguridad completa en el directorio que nosotros determinamos, guardándolo con la fecha la cual se hizo la copia de seguridad, la siguiente copia se haría si fuese domingo, en caso de serlo, se haría una copia de seguridad completa de esa semana, guardando en el nombre el día de la semana el cual se ha hecho, la siguiente copia se realizaría diariamente y sería incremental, esta solo copiaría los datos modificados desde una fecha que le pasaremos desde un fichero.
SCRIPT:
Aquí muestro el script utilizado para realizar las copias de seguridad automatizadas:
#!/BIN/BASH
#copia completa cada mes, cada semana y incremental cada dia.
#Aquí introduzco el directorio del cual quiero hacer la copia
directorios=»/home/david»
#directorio donde voy a guardar la copia
backdir=»/copia»
fechadir=»/copia»
#calcular la fecha
diasemana=`date +%a` #dia de la semana eje: miercoles
diames=`date +%d` #dia del mes eje: 5 <– de marzo
diaymes=`date +%d%b` #dia y mes
############################## comienzan las copias ##########################
# REALIZA LA COPIA DE SEGURIDAD COMPLETA TODOS LOS DIA 1 DE CADA MES #
if [ «$diames» = «01» ]; then
# si es dia 1 del mes hace una copia completa de los directorios que queremos
# poniendo dia y mes en el nombre del .tar
tar -cf $backdir/ctm-$diaymes.tar $directorios
fi
## REALIZA LA COPIA DE SEGURIDAD COMPLETA TODOS LOS DOMINGOS.
if [ «$diasemana» == «dom» ]; then
# si el dia de la semana es domingo hace la copia completa semanal.
fechahoy=`date +%d-%b`
# introduce el valor de la variable $fechahoy en un fichero llamado fecha-backup-completo
echo $fechahoy > $fechadir/fecha-backup-completo
tar -cd $backdir/cts-$diasemana.tar $directorios
## CREA LAS COPIAS INCREMENTALES CADA DIA.
else
## se le pasa al parametro –newer la fecha del ultimo backup
nuevo=»–newer=’cat $fechadir/fecha-backup-completo'»
## ejecutamos tar para que solo haga la copia incremental con las diferencias.
tar $nuevo -cf $backdir/inc-$diasemana.tar $directorios
fi
Crontab:
En mi caso el crontab lo he utilizado para que el script mostrado anteriormente lo ejecutase todos los días a las 17:07, aquí adjunto imagen del fichero modificado de crontab:
Prueba de Script:
Al ejecutar el script diariamente se creará una copia de seguridad diaria incremental:
Al ejecutar el script diariamente y el script filtrar que es domingo creará una copia de seguridad completa de la semana:
Al ejecutar el script diariamente y el script detectar que es día uno del mes, este hace una copia de seguridad completa del mes completo:
Todo el proceso de las pruebas, como las imágenes han sido comprobados, y capturadas por mi.
Saludos, David De Maya Merras, @DavidDeMaya