Copias de seguridad, tan imprescindibles y tan olvidadas.
Hay que reconocer que hoy en día las copias de seguridad son imprescindibles. Aunque demasiado a menudo, son las mas olvidadas.
Teniendo en cuenta la cantidad de datos en nuestros dispositivos electrónicos (portátiles, tablets y/o móviles), necesitamos tener un respaldo por si el día menos pensado tenemos algún problema con ellos.
En mi caso tengo un disco duro para copias de seguridad externo. Como principalmente utilizo linux mint, tengo un script con rsync
que se ejecuta automáticamente a ciertas horas.
De esta manera, tan solo tengo que conectar el disco duro, y se realizan solas las copias de seguridad en el a una hora determinada.
Pero veamos todo el proceso en detalle.
Instacion de rsync
El primer paso es comprobar si tenemos instalado el comando rsync
en nuestro sistema:
dpkg -l | grep rsync
En caso de no ser así, deberemos instalarlo:
sudo apt-get install rsync
Ahora ya podremos crear los scripts de la copia de seguridad como veremos a continuación.
Creando los backups con rsync
El siguiente script de bash es el que utilizo para realizar copias de seguridad. Este script mantiene los 3 últimos backups del directorio /home
y va rotándolos según se realicen nuevas copias.
Pero antes de utilizarlo, debemos personalizar los siguientes parámetros a nuestro sistema linux:
- ID, ECHO, MOUNT, UMOUNT, RM, MV, CP, TOUCH, RSYNC: deberemos indicar la ruta absoluta a estos comandos. Para localizarlos de manera mas sencilla, podemos utilizar el comando
whereis
- MOUNT_DEVICE: dispositivo a montar donde guardaremos los backups
- SNAPSHOT_RW: diretorio donde montaremos el dispositivo de los backups
- EXCLUDES: ruta del fichero donde indicaremos los directorios a excluir de la copia de seguridad
#!/bin/bash unset PATH # evita un uso accidental de $PATH # Alias para comandos del sistema (explora los tuyos con whereis) ID=/usr/bin/id; ECHO=/bin/echo; MOUNT=/bin/mount; UMOUNT=/bin/umount; RM=/bin/rm; MV=/bin/mv; CP=/bin/cp; TOUCH=/bin/touch; RSYNC=/usr/bin/rsync; # Path de origen, destino y fichero de exclusiones MOUNT_DEVICE=/dev/sde1; SNAPSHOT_RW=/media/backups; EXCLUDES=/usr/local/etc/backup_exclude; # el script propiamente dicho # asegurarse de que eres root if (( `$ID -u` != 0 )); then { $ECHO "Lo siento, debes ser root. Saliendo..."; exit; } fi # montar el destino para lectura-escritura o abortar $MOUNT -t nfs $MOUNT_DEVICE $SNAPSHOT_RW ; if (( $? )); then { $ECHO "snapshot: no se pudo montar $SNAPSHOT_RW para lectura-escritura"; exit; } fi; # rotar los snapshots de /backup # paso 1: borrar el snapshot horario mas antiguo, si existe: if [ -d $SNAPSHOT_RW/hourly.3 ] ; then \ $RM -rf $SNAPSHOT_RW/hourly.3 ; \ fi ; # paso 2: intercambiar snapshots intermedios, si existen if [ -d $SNAPSHOT_RW/hourly.2 ] ; then \ $MV $SNAPSHOT_RW/hourly.2 $SNAPSHOT_RW/hourly.3 ; \ fi; if [ -d $SNAPSHOT_RW/hourly.1 ] ; then \ $MV $SNAPSHOT_RW/hourly.1 $SNAPSHOT_RW/hourly.2 ; \ fi; # paso 3: crear una copia hard-link (excepto dirs) del ultimo snapshot if [ -d $SNAPSHOT_RW/hourly.0 ] ; then \ $CP -al $SNAPSHOT_RW/hourly.0 $SNAPSHOT_RW/hourly.1 ; \ fi; # paso 4: hacer copia del sistema al ultimo snapshot $RSYNC \ -va --delete --delete-excluded \ --exclude-from="$EXCLUDES" \ /home $SNAPSHOT_RW/hourly.0 ; # paso 5: actualizar mtime de hourly.0 para reflejar hora del snapshot $TOUCH $SNAPSHOT_RW/hourly.0 ; $UMOUNT $MOUNT_DEVICE
También creamos un fichero de exclusiones (EXCLUDES), indicando los directorios que no queremos incluir en la copia de seguridad que estamos realizando:
/dev /mnt /media /proc /sys /tmp /var/tmp /home/**/.mozilla/**/Cache /home/**/.gftp/cache /home/**/.opera /home/**/.thumbnails /home/**/privado
Automatizando las copias de seguridad
Pero lo ideal es automatizar los respaldos para no tener que estar pendiente de los mismos. Lo primero es seleccionar unas horas donde el ordenador pueda estar encendido pero sin necesitar nosotros trabajar con el.
Una vez tenemos estas horas seleccionados, tan solo debemos programar la tarea en el cron
para que se ejecute automáticamente.
Editamos las tareas del cron:
crontab -e
Y añadimos la tarea de la copia de seguridad. Por ejemplo, en este ejemplo la tarea de backups se ejecutaría a las 15:05 diariamente:
05 15 * * * /ruta_absoluta/al/script_de_backup.sh
Una vez hemos programado la tarea de backups, tan solo debemos tener en cuenta conectar el disco duro externo a la hora indicada para que se realice correctamente.
Deja una respuesta