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.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)