68 - Tu Raspberry como servidor de backup
Otra interesante función que le puedes dar a tu Raspberry Pi es que trabaje como servidor de backup para que lo tengas todo bajo salvaguarda
Como ya he comentado en otras ocasiones, las posibilidades que te ofrece una Raspberry solo están limitadas por tu imaginación. Por supuesto, una de las grandes ventajas que nos ofrece es su bajo consumo de recursos. Esto nos permite tenerla siempre en funcionamiento a un coste económico ridículo. Evidentemente, como contrapartida tienes que no se trata de un servidor de grandes prestaciones. Sin embargo, en muchas ocasiones es mas que suficiente para nuestras pretensiones. Una vez ya te he contado el mismo rollo de siempre, llega el momento de mostrarte otra opción interesante, y es la de para utilizar tu Raspberry como servidor de backup.
Claro que si vas a utilizar tu Raspberry como servidor de backup necesitas espacio en la misma. Todo dependerá de lo que quieras copiar. Evidentemente no es lo mismo mantener una copia de seguridad de todas tus fotografías, que simplemente de tus archivos de condiguración, de tus dotfiles. En este último caso, incluso en la propia Raspberry, tienes mas que suficiente.
Tu Raspberry como servidor de backup
Antes de meterme en faena
Lo que he escrito esta semana
Esta semana publicaré un artículo referente a formatear USB desde la Raspberry Pi. No es algo que vayas a hacer todo los días, pero si algún día tienes que hacerlo ahí estará el artículo. La cuestión es que en ese artículo te explico como puedes particionar y formatear un USB utilizando directamente el terminal, sin tener que recurrir a otras aplicaciones.
Estoy trabajando en los primeros capítulos del tutorial sobre programar en bash. Sin embargo, y aunque esperaba publicar el capítulo de introducción esta semana, no me va a dar tiempo a terminarlo. Pero te puedo confirmar que el tutorial comenzará la próxima semana.
Tampoco me da tiempo a terminar cones la aplicación things-to-do, aunque estoy trabajando en ella, todavía no he avanzado gran cosa. Espero poder sacarla la próxima semana. Será una aplicación de mínimos, y a partir de ahí con tus ideas, y las de otros que vaya creciendo.
Por otro lado, si no has leído, los artículos de la semana pasada, te recomiendo que les des un vistazo. En particular al de copias de seguridad de MariaDB automatizadas. Está feo que lo diga yo, pero creo que quedó un artículo muy completo.
¿Como utilizar tu raspberry como servidor de backup?
¿Que necesitas?
Básicamente la Raspberry Pi y dependiendo de lo que quieras salvaguardar, la cosa puede ir desde la propia tarjeta micro SD, pasando por un USB de mas o menos tamaño, hasta llegar a un disco duro externo de varios teras.
En el caso de un disco duro externo, es necesario que tenga alimentación externa.
Actualmente las pruebas que estoy realizando son con un disco SSD de 256 GB de la marca Verbatim, y va mas que sobrado. Sobre todo, teniendo en cuenta que el disco duro de mi ordenador tiene precisamente esa capacidad.
Pero como, te he comentado anteriormente, al fin y al cabo depende única y exclusivamente de ti. Bueno, y de tu capacidad económica.
Utilizar una unidad externa
Actualmente yo lo estoy utilizando, como te indicado en la introducción para salvaguardar mis archivos de configuración. En este sentido, podría utilizar perfectamente la propia Raspberry Pi. Sin embargo, he decidido utilizar ese disco USB para el uso sea lo mas amplio posible.
Así el primer paso que debemos hacer es particionar y formatear nuestra memoria USB para poder utilizarla. Una vez realizados estos dos pasos, el siguiente es modificar /etc/fstab
para que nuestra unidad se monte de forma automática en el arranque de la Raspberry Pi.
Sin embargo aquí te quiero hacer una llamada de atención. La Raspberry Pi, al menos la Raspberry Pi 3, funcionando desde USB, no termina de arrancar correctamente cuando hay mas unidades USB conectadas. Así, lo recomendable es utilizar una micro SD para el arranque y el resto de operaciones desde un o varios USB. Evidentemente esto no es lo mejor, pero hasta el momento yo no he encontrado una solución mejor.
Acceso a tu Raspberry Pi de forma desatendida
Es evidente que para que utilizar tu Raspberry como servidor de backup, es necesario que todos tus equipos puedan acceder de forma desatendida a la Raspberry. Resultaría realmente absurdo que cada vez que se tiene que hacer un resguardo tengas que introducir usuario y contraseña.
Así el primer paso es configurar tu Raspberry para acceder mediante clave público privada. Para configurarlo te recomiendo que leas el artículo sobre sincronización sin contraseña y de paso que escuches el episodio 63 del podcast sobre asegurar tu Raspberry.
El anillo de claves
Una vez ya tienes configurado tu acceso a la Rasbperry mediante clave público privada, es necesario que tu ordenador gestione esta situación de forma correcta. Por defecto, cuando inicias tu equipo, al utilizar tu clave ssh por primera vez te pedirá que introduzcas la contraseña para abrir el anillo de claves.
Esta situación no es nada recomendable, puesto que las copias de seguridad no funcionarán hasta que hayas abierto el anillo de claves. Para evitar esta situación, tienes que quitar la contraseña del anillo de claves. Entiendo que esta no es una situación muy recomendable, pero peor es no hacer copias de seguridad.
Utilizar tu Raspberry como servidor de backup
Ya has realizado todos los pasos necesario para utilizar tu Raspberry como servidor de backup, a excepción de instalar el software necesario. Tienes que instalar software tanto en la Raspberry que va a hacer de servidor de backup como en los clientes. ¿Que software utilizar?
Hasta la fecha siempre he utilizado rsync
para hacer mis copias de seguridad. Sin embargo, actualmente estoy utilizando rdiff-backup
.
rdiff-backup
rdiff-backup
es un script implementado en Python que te permite realizar backup incremental, tanto de forma local como remota. Funciona en Linux, Mac OSX y cygwin
. Aúna en una única solución las ventajas de las copias espejo y de las incrementales. Este script
utiliza a rsync
para realizar todo el trabajo, con lo que en cierta manera sigo utilizando esta potente herramienta.
Una de las ventajas de este script es que preserva enlaces, permisos, atributos, fechas, etc.
Instalación de rdiff-backup
La instalación, tanto en el servidor como en el cliente, es tremendamente sencilla. Solo tienes que ejecutar una línea,
sudo apt install rdiff-backup
Haciendo tus primeras copias de seguridad
Para realizar una copia de seguridad por ejemplo de tu directorio de inicio, tan solo tienes que ejecutar la siguiente instrucción,
rdiff-backup /home/lorenzo/ rpi::/home/pi/backup/
Para poder utilizar esta sintaxis, tengo configurado ~/.ssh/config
de la siguiente forma,
Host rpi
Hostname 192.168.1.48
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
User pi
Port 22
Es interesante que la primera copia la realices viendo los resultados que produce, para detectar cualquier error. En este sentido, aumenta la información que rdiff-backup
muestra por pantalla, así como las estadísticas. Para ello, la instrucción a ejecutar será,
rdiff-backup --terminal-verbosity 8 --print-statistics \
--exclude-globbing-filelist /home/lorenzo/.excludes --include-special-files\
/home/lorenzo/ rpi::/home/pi/backup/
opciones interesantes de rdiff-backup
Si queremos excluir algunos archivos o directorios podemos utilizar la opción --exclude
seguido de un archivo o directorio que queremos excluir. Si queremos excluir varios, debemos añadir varias opciones --exclude
, o bien utilizar la opción --exclude-filelist
. O mejor utilizar la opción --exclude-globbing-filelist
que nos permite el uso de comodines.
De la misma manera podemos hacer para incluir archivos o directorios con las opciones --include
, --include-filelist
e --include-globbing-filelist
.
Para incluir enlaces simbólicos u otro tipo de archivos especiales, tienes que añadir la opción --include-special-files
.
Por último dos opciones interesantes que tienes que tener en cuenta son --max-file-size
y --min-file-size
, que nos permite excluir archivos que superen un determinado tamaño o lo contrario, que no alcancen un tamaño prefijado, respectivamente.
Para realizar la copia de seguridad automática
Llegados a este punto ya has visto como hacer las copias de seguridad. Sin embargo, el objetivo es hacerla de forma automatizada. Así que vamos a crear los correspondientes archivos de Systemd
que te van a permitir realizar la operación totalmente desatendida.
El primero de los archivos es el servicio, y es el que se encargará de realizar las copias de seguridad. Este archivo tiene un aspecto como lo que ves a continuación.
[Unit]
Description=Back up my dotfiles
[Service]
Type=oneshot
ExecStart=rdiff-backup /datos/dotfiles/ rpi::/home/pi/backup/
El segundo es el que te permite hacer la programación. En este caso, y dado que voy a realizar copias de seguridad de mis archivos de configuración, las copias las voy a realizar diarias. Tampoco hay que preocuparse, porque se trata de copias incrementales, con lo que si no toco nada en la configuración no guardará nada o casi nada. Lo cierto es que si que guarda cierta información, pero tampoco es tanto espacio el que ocupa.
Así, si te fijas, en el directorio rdiff-backup-data
que se crea en el directorio donde se guardan las copias de seguridad se almacena información relativa a cada una de los backup que has realizado.
[Unit]
Description=Run backupdot at start an every day
[Timer]
OnBootSec=20min
OnCalendar=daily
[Install]
WantedBy=timers.target
mkdir -p ~/.config/systemd/user
cp backupdot.* ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable backupdot.timer
systemctl --user timer backupdot.timer
Si no quieres hacer todos estos pasos, tan solo tienes que crearte un script llamado todo.sh
con el siguiente contenido,
#!/bin/bash
cat > temporal.service << 'ENDTXT'
[Unit]
Description=Back up my dotfiles
[Service]
Type=oneshot
ExecStart=rdiff-backup /datos/dotfiles/ rpi::/home/pi/backup/
ENDTXT
cat > temporal.timer << 'ENDTXT'
[Unit]
Description=Run backupdot at start an every day
[Timer]
OnBootSec=20min
OnCalendar=daily
[Install]
WantedBy=timers.target
ENDTXT
mkdir -p ~/.config/systemd/user
mv temporal.service ~/.config/systemd/user/
mv temporal.timer ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable temporal.timer
systemctl --user start temporal.timer
En este script tendrás que hacer algunos cambios. Lo mas importante los directorios y el usuario. Así, por ejemplo,
/datos/dotfiles/
es el directorio donde tengo enlazados los archivos de configuración. Seguro que este es diferente en tu caso.rpi::/home/pi/backup/
esta es la cadena que yo utilizo para hacer la conexión vía ssh.
Si quieres simplificar las conexiones mediante ssh, te recomiendo leas el artículo sobre configuración ssh, que te ayudará a tener una cadena de conexión tan simplificada como la que te he indicado anteriormente.
Borrando copias de seguridad antiguas
Si haces copias incrementales todos los días de tus archivos de configuración, no hay que ser un lince, para llegar a la conclusión que al final del año estás hablando de 365 copias. Al final, quieras que no, esto ocupa un espacio. Sin embargo, esto también está contemplado en rdiff-backup
. Así, es posible borrar de forma sencilla las copias que mas antiguas. Para ello, tan solo tienes que ejecutar la siguiente orden,
rdiff-backup --force --remove-older-than 1M rpi::/home/pi/backup
Mejorando la copia de seguridad
Aquí hemos utilizado rdiff-backup
directamente, pero lo suyo es que prepares un script que te permita guardar en el caso de que se haya producido un error, e incluso que te mande un mensaje de Telegram. Así el script podría ser algo como,
#!/bin/bash
rdiff-backup /datos/dotfiles/ rpi::/home/pi/backup/
status=$?
if [ $status != 0 ]; then
# añade un mensaje d error
echo "rdiff-backup exit Code: $status - Command Unsuccessful" >> /home/lorenzo/backup.log;
exit 1;
fi
# Elimina los archivos con una fecha superior a 1 mes
rdiff-backup --force --remove-older-than 1M rpi::/home/pi/backup/
Restaurando copias de seguridad
Hasta el momento hemos conseguido no solo hacer copias de seguridad, sino que además ya las hacemos de forma automática. Sin embargo, si no podemos reestablecer el sistema en caso de que lo necesitemos, para poco nos sirven esas copias de seguridad.
Aquí es donde sin dudas rdiff-backup
se luce, puesto que nos permite no solo recuperar la última copia que hayamos realizado, sino elegir que copia queremos restaurar.
Así para restaurar la copia mas reciente tan solo tenemos que ejecutar la siguiente instrucción,
rdiff-backup --restore-as-of now /datos/dotfiles/ rpi::/home/pi/backup/
Si quisiéramos restaurar una copia de hace 3 días, la instrucción sería
rdiff-backup --restore-as-of 3D /datos/dotfiles/ rpi::/home/pi/backup/
Indicarte que si hace justo tres días no hiciste ninguna copia el tomará la inmediatamente anterior.
Algunas herrmientas útiles
--list-increments
te muestra un listado de los incrementos que hay guardados. Igualmente te indica la fecha en la que se realizó la última copia. Por ejemplo,
$ rdiff-backup --list-increments rpi::/home/pi/backup/
Found 1 increments:
increments.2019-05-02T07:00:17+01:00.dir Thu May 2 08:00:17 2019
Current mirror: Thu May 2 08:58:08 2019
--list-changed-since
indica los cambios producidos desde una fecha especfíficada.--list-at-time
te mostrará los archivos que estaban en un momento determinado.--compare
te permite comparar el estado actual de tus archivos con la última copia que tengas. Por ejemplo,
rdiff-backup --compare /datos/dotfiles/ rpi::/home/pi/backup/
--compare-at-time
realiza también una comparativa, pero en este caso te permite indicar con que fecha lo quieres comparar. Por ejemplo, para comparar con tu copia de hace un día puedes ejecutar lo siguiente,
rdiff-backup --compare-at-time 1D /datos/dotfiles/ rpi::/home/pi/backup/
Más información,