Hace nada hemos visto como montar unidades y discos duros en la raspberry pi, pues bien, ahora utilizando esta funcionalidad nos vamos a centrar en su potencial para hacer bakcups con raspberry pi y rsync a través de ssh o lan.
En un primer momento, y dado que seguramente tendremos una tarjeta SD con un espacio bastante limitado, montaremos nuestro disco como en la guía que hemos indicado. Una vez tengamos nuestro disco montado vamos a suponer que está en el mismo sitio que en dicho manual, /var/hdd y a partir de ahí seguiremos con esta guía.
Realizar backups incrementales con rsync y raspberry pi por ssh y lan
Antes de empezar con esto vamos a necesitar un par de cosas instaladas en nuestra cariñosamente llamada malina, por lo que pasaremos a ejecutar estos comandos:
sudo apg-get install sshpass
Este pequeño programa nos va a permitir enviar por línea de comandos la contraseña de conexión a nuestro servidor remoto ssh, que en caso de no ser necesario no vas a tener que instalar.
Ahora que tenemos todo lo necesario para poder automatizar backups por ssh desde linux vamos a pasar a la parte de la copia inicial y a explicar las opciones que podemos añadir para realizar varias funciones distintas. Realmente es muy sencillo y lo acabaremos solucionando todo con un comando, pero vamos a ir un paso más allá y crearemos la tarea de forma automatizada con cron para que se actualize el backup eventualmente.
Por el momento la línea de comandos que vamos a utilizar va a ser la siguiente:
rsync -ogpEav --compress-level=9 -e 'sshpass -p password ssh -o StrictHostKeyChecking=no -p 1234' root@1.2.3.4:/var/www/miweb/* /var/hdd/miweb/
y ahora vamos a pasar a explicar las distintas partes de la línea que nos permitirá realizar el backup:
- rsync
es la ejecución del programa rsync que se encargará de realizar todo el proceso - -ogpEav
esta línea realizará las siguientes acciones- o: mantiene los propietarios de los archivos (deben existir en la malina)
- g: lo mismo pero mantiene los grupos
- p: mantiene permisos de archivos
- E: si un archivo es ejecutable sigue siéndolo
- a: transferencia en modo archivo
- v: verbose, es decir, muestra la salida de lo que está haciendo rsync (nos vale para saber si lo hace todo correcto)
Hay más opciones e incluso algunas de estas no te harán falta para un backup, eres libre de quitar o añadir las que creas conveniente (lista ejecutando rsync –help)
- –compress-level=9
con esta parte hacemos que se compriman los archivos con la tasa máxima antes de ser descargados, gasta más cpu, pero si tenemos una conexión lenta nos va a ir de perlas. - -e
nos va a permitir ejecutar un comando en esta línea (que usaremos para lanzar un ssh e indicarle el puerto - ‘sshpass -p PASSWROD ssh -o StrictHostKeyChecking=no -p 1234’
Aquí ejecutamos el sshpass y le indicamos que el password (-p) es PASSWORD (pon el tuyo para el usuario que vayas a usar).
-o nos permite añadir opciones y StrictHostKeyChecking=no nos evitará problemas con las key ssh que no vamos a usar.
-p 1234 nos vale para indicar el puerto por el que conectar al ssh
Podemos suprimir las partes del puerto u opciones si no nos van a dar problemas, el puerto predeterminado de ssh sabemos que es el 22. - root@1.2.3.4:/var/www/miweb/*
carpeta de origen de la que haremos la copia, que al ser por ssh se compone de:- root = usuario con el que nos conectaremos
- @1.2.3.4: = ip en la que está el equipo remoto (da igual por lan o por internet)
- /var/www/miweb/* = ruta remota a la carpeta que vamos a copiar
- /var/hdd/miweb/
Por último ya solo nos queda esta ruta local de la carpeta destino donde se guardará la copia completa de los archivos remotos.
Además de estos parámetros podemos usar un par más de parámetros adicionales que dotarán de una mayor funcionalidad a nuestros backups, ambos destinados a la realización de copias:
- –backup (o -b): con este comando se guardará una copia de los archivos que se van a modificar en el disco destino y una vez se tienen todos, se modifican dichos archivos (todo automático).
- –delete: contrariamente a lo que te pueda parecer, este comando se encarga de realizar una sincronización exacta, es decir, que si has borrado algún archivo en la carpeta de origen también será borrado en la carpeta destino, así el backup será exacto a tu carpeta origen. Recomiendo tener un backup completo periódico configurado para evitar el perder de forma irremediable archivos, imagina que te equivocas en un comando y borras una carpeta sin querer y no te das cuenta, o simplemente hay un fallo y ocurre este tipo de cosas. Desde mi punto de vista realizar un backup en un zip o lzma periódico como seguro adicional no está de más.
Estos dos comandos los usaremos inmediatamente antes o después de la parte -ogpEav, siempre respetando un espacio.
Esta sincronización de archivos la podemos usar para guardar por ejemplo fotos, pero más profesionalmente podemos guardar un backup 1:1 de nuestra página web, e incluso tener en el servidor un cron que haga un dump de la base de datos con la fecha en el nombre (que lo veremos en otro artículo) y guardarnos una copia en el disco duro conectado a la malina, así tener una copia diaria de la base de datos de nuestra web.