En este artículo explico el metodo que uso para hacer backup de mis datos persistentes de mi servidor Linux a un disco externo. La técnica está basada en Rsync y backups incrementales usando Hard Links mediante el script RBME que facilita todo el proceso.

backup

Voy a explicar dos “destinos físicos” de los backups, el primero es el obvio, usar un disco USB, pero el segundo es algo más ingenioso: emplear un disco iSCSI que reside en una NAS. En cualquier caso y para entender este apunte, quédate con los siguientes directorios que usaré como fuente (datos a salvar) y destino (ubicación donde los salvaré):

  • /Apps –> Datos fuentes
  • /mnt/Backup –> Destino del backup

Como habrás visto a lo largo de este blog, soy un fan de Gentoo, así que todos los comandos que ves aquí están relacionados con esta meta-distribución. Si usas cualquier otra no te será difícil adaptarlo.

 

Instalación de RBME

Primero necesitamos el script, así que ejecuta los comandos siguientes para instalarlo.

Para que funcione es necesario tener instalado un MTA smtp y procmail:

En mi caso me gusta cambiar una línea de este script para que el directorio también indique la hora en la que se hizo el backup. El ejecutable está en /usr/bin/rbme

Las configuraciones las detallo en cada opción de disco.

 

Backup a disco USB

La primera opción, usar un disco externo USB para hacer backup. También valdría que fuese 2.0 pero hoy en día no merece la pena.

usb

Utilizo un disco que ya tenía para otros menesteres y creo una partición de tipo EXT4 con el resto del espacio usando gparted.

gparted

El proceso es muy sencillo, conectamos el USB, entramos como root y ejecutamos gparted. Seleccionamos el espacio libre y creamos una partición de tipo ext4.

Añado la nueva partición al /etc/fstab para que se monte en /mnt/Backup.

  • Monto el file system y creo un fichero de control para poder usarlo en mi script.

  • Veamos la configuración que utilizo para este caso

Preparo el fichero de configuración de RBME /etc/rbme.conf Nota: Debes modificar y adaptar este fichero de configuración a tu caso concreto, este es solo un ejemplo.

Preparo un script /etc/cron.daily/rbme_daily.sh para que se ejecute diariamente desde el cron. Nota que este es solo un ejemplo, debes adaptar el script a tu configuración de directorio(s) y nombres de servidor.

La VM que estoy parando tiene mi servidor de correo asi que he modificado el ejecutable rbme (añado la lína: cat “$LOGFILE” > /tmp/mandar.txt) y he creado un script para automandarme un mensaje al terminar el script anterior:

  • /root/priv/bin/manda_mail.sh”

<

pre>
#!/bin/bash
#
if test /tmp/mandar.txt ; then
{
echo “From: Marte”
echo “To: Luis Palacios”
echo “Subject: Backup RBME”
echo “Content-Type: text/plain; charset=UTF-8”
echo “”
cat /tmp/mandar.txt
} | /usr/sbin/sendmail -f “root@marte” usuario@dominio.com
fi

<

pre>

 

Backup a disco iSCSI

Otra opción muy interesante es usar un disco remoto en una NAS a través de iSCSI. En mi caso tengo una NAS de QNAP, un Hypervisor KVM y mis máquinas virtuales (un ejemplo). Si mezclamos los ingredientes tenemos un caso de uso claro: entregar un espacio “físico” vía iSCSI desde la NAS al hypervisor, para que haga backups con RBME de los datos persistentes de las máquinas virtuales.

Acciones en el QNAP

  • Creo un espacio libre de 250GB en mi QNAP (NAS)

iSCSI-RBME-1

iSCSI-RBME-2

iSCSI-RBME-3

iSCSI-RBME-4

iSCSI-RBME-5

  • Me apunto el target: iqn.2004-04.com.qnap:ts-569pro:iscsi.backuprbme.d70ea1

 

Acciones en el Linux donde ejecuto RBME

Como decía antes, estoy entregando un espacio “físico” vía iSCSI desde la NAS al hypervisor, para que haga backups con RBME de los datos persistentes de las máquinas virtuales. Esto significa que el Linux (hypervisor) tiene acceso a los datos persistentes que modifican sus VM’s y tiene la capacidad de apagar las VM’s, hacer backup y volver a arrancarlas, así que me ha parecido el sitio más adecuado.

NOTA: En los comandos siguientes verás que aparece un segundo target con “vmgentoo” en su IQN, ignóralo porque no tiene nada que ver con el backup… es otro disco que uso para una de las máquinas virtuales (este otro apunte).

  • Para poder configurar discos iSCSI hay que hacer un discovery a ver que me ofrece el NAS

  • Una vez que “veo” qué discos tiene, pues me conecto con ellos. En este ejemplo verás que hago login en un par de ellos, aunque el que te interesa es el que tiene “backuprbme” en su IQN

  • Tras hacer login en un target pasa a añadirse a la base de datos persistente de open-iscsi, que reside en /etc/iscsi/nodes y /etc/iscsi/send_targets. Puedes ver qué tienes en la base de datos con los comandos siguientes:

  • Comprobar la base de datos

 

Daemon y persistencia

  • Configuro el sistema para que arranque open-iscsi durante el boot, haga login a los targets y además configure los discos iSCSI con nombres persistentes en /dev/iscsi/disk*

  • Habilito los servicios

  • Rearranco el equipo, dejo a continuación algunos comandos útiles para observar si todo ha ido bien. Deberías “ver” los discos conectados.

 

Configuro el disco, particiones, formato, etc.

A partir de aquí ya tengo mi disco iSCSI como /dev/iscsi/diskb y dicho nombre es persistente. El resto del proceso es igual que si fuese un disco físico o USB, de todas formas explico todo el proceso de configuración.

  • Creo las particiones y el file system

NOTA: Voy a usar gparted que no utiliza el link simbólico que acabo de mostrar anterioremente, así que asegúrate que estás eligiendo el disco adecuado. En mi caso es el /dev/sdc

gparted-iscsi1

gparted-iscsi2

gparted-iscsi3

gparted-iscsi4

  • Compruebo que todo es correcto, deberíamos ver que tenemos un disco con una partición 83 (linux) y aunque no se ve, el file system es de tipo EXT4.

Tal como dije al principio, el directorio destino donde montaré este file system es /mnt/Backup. Este sistema utiliza systemd, así que preparo un par de ficheros para que se automonte el directorio.

  • Habilito su montaje durante el arranque del equipo.

  • Monto el file system y creo un fichero de control para poder usarlo en mi script.

  • Veamos la configuración que utilizo para este caso

Preparo el fichero de configuración de RBME. Nota: Debes modificar y adaptar este fichero de configuración a tu caso concreto, este es solo un ejemplo.

Preparo un script para que se ejecute diariamente desde el cron. Nota que este es solo un ejemplo, debes adaptar el script a tu configuración de directorio(s) y nombres de servidor.

 

Conclusión

El resultado es satisfactorio, todos los días se realiza una copia incremental (usando hardlinks) de los datos fuentes, por lo que puedo recuperar una copia COMPLETA del estado en el que se encontraban en cualquier día del pasado. El script se va a encargar de ir borrando las copias antiguas una vez se llene el disco.