Automatizar backups de nuestro unraid con Borg

Automatizar backups de nuestro unraid con Borg

Accedemos a nuestro servidor Unraid, vamos a apps y buscamos borg.

Cogeremos este

Y le daremos a instalar

En las variables vamos a hacer lo siguiente

En la primera variable (user shares) , pulsamos en edit y le vamos a cambiar el nombre por /bkp-from/carpeta a copiar y en la ruta le ponemos la carpeta de la que queremos hacer la copia. Nos debe de quedar así

En mi caso como ves, esta primera carpeta es para hacer copia de appdata.

Tienes que crear una variable /bkp-from/loquesea por cada carpeta que quieras hacer copia, ya que luego las tendremos que poner como ruta en el archivo de la copia.

Yo por ejemplo, tengo estas


Todas estas carpetas serán solo de lectura ya que aquí no hay que copiar ningún dato.

En la segunda variable, la de Borg Repo (Backup Destination) , le damos a edit y la ponemos así

Esta es la carpeta donde queremos que se vuelque nuestra copia de seguridad. En mi caso es un poco raro porque tengo creado un share, ya que la primera copia la hago en un disco local dentro del propio Unraid. Es un disco de 1 TB que tengo antiguo.

Si la vas a hacer en disco externo, pues le pones en host path la ruta del disco externo y dale permiso de lectura/escritura porque aquí si tiene que escribir datos.

Por ejemplo yo he enchufado un disco externo y en listado de Unassigned Devices veo el disco como External_USB.3.0. Vuelvo a la variable Borg Repo (Backup Destination) y cambiamos la ruta del Host Path por la ruta de nuestro disco externo, en mi caso, /mnt/disks/External_USB3.0

Asi haremos la copia en un disco externo.

La tercera variable Borg Cache yo la tengo en una carpeta cualquiera

Luego las variables Borgmatic Config, Borg Keys y SSH Keys estan en su correspondiente carpeta de appdata

En TZ pues ya sabes Europe/Madrid, si estamos en España.

Tienes que crear otra path que la vamos a llamar /RESTORE y le vamos a dar la ruta donde quieres que se copien los archivos que tengamos que rescatar en caso de catástrofe. En mi caso lo tengo así

Creamos otra para el archivo de logs que luego lo mandaremos por notificación al telegram. En mi caso lo pongo en una carpeta de Filerun

Y por último una que os sonará de Synology, para que tenga acceso a los contenedores y los pueda parar antes de iniciar la copia. No se si es necesaria, aunque yo la tengo y no me falla.

Comenzamos la instalación y una vez que termines, en la pestaña docker, os daréis cuenta que está parado.

Si miráis los logs, verás que os dice que le falta el archivo crontab.txt

Para mi lo más cómodo, ya que vamos a tener que ir tocando terminal a partir de ahora es, entrar al terminal del contenedor

Y navegar hasta la ruta cd /etc/borgmatic.d y crear este archivo mediante el comando touch crontab.txt Lo creará dentro de la ruta /mnt/user/app/borgmatic/config

Sales de la terminal, reinicias el contenedor y ya debe arrancar.

Empezamos a configurar la copia

Volvemos a entrar al terminal del contenedor y hacemos un ls. Debemos ver las carpetas y dentro de estas, las que hemos creado, es decir, bkp-from y bkp-to


Lo primero que tenemos que hacer es crear el repositorio.

Para ello introducimos borg init -e repokey /bkp-to/, nos pide una contraseña (será la contraseña de cifrado), nos pedirá que la confirmemos y por último nos dirá si quiere que la muestre, daremos a y y la veremos en pantalla.

Tras este paso, vamos a crear el script para realizar la copia, para ello y desde la terminal, vamos de nuevo a cd /etc/borgmatic.d.

Una vez dentro, instalamos nano para poder crear y editar el script con apk add nano y luego nano startBackup.sh y pasamos a la pantalla de edición.

Los archivos los tienes en el siguiente enlace

Borg
Bilito - ¿En qué puedo ayudarte?

, aunque lo dejo colgado aquí.

Os explico los cambios

Lo que sigue a esa parte del script, dejadlo como está.

Una vez hechos esos cambios, pulsáis CTRL+O, intro y CTRL+X para salir del script

Ahora tenemos que darle permisos al script, para ello chmod 777 startBackup.sh y debe de ponerse en verde, si estáis usando la terminal de unraid.

Si os fijas en la captura tengo tres scripts más.

Creamos el primero, hacemos un nano sendTelegram.sh, copias y pegas lo que hay en el archivo, modificando tus datos de id de telegram y token del bot para notificaciones.

Una vez hechos esos cambios, pulsas CTRL+O, intro y CTRL+X para salir del script

Ahora tenemos que darle permisos al script, para ello chmod 777 sendTelegram.sh y debe de ponerse en verde, si estáis usando la terminal de unraid.

Creamos el segundo,hacemos un nano stopContainers.sh, copias y pegas lo que hay en el archivo, modificando tus datos de id de telegram y token del bot para notificaciones.

Una vez hechos esos cambios, pulsas CTRL+O, intro y CTRL+X para salir del script

Ahora tenemos que darle permisos al script, para ello chmod 777 stopContainers.sh y debe de ponerse en verde, si estáis usando la terminal de unraid.

Por ultimo, hacemos un nano startContainers.sh, copias y pegas lo que hay en el archivo, modificando tus datos de id de telegram y token del bot para notificaciones.

Una vez hechos esos cambios, pulsas CTRL+O, intro y CTRL+X para salir del script

Ahora tenemos que darle permisos al script, para ello chmod 777 startContainers.sh y debe de ponerse en verde, si estáis usando la terminal de unraid.

Ya estaría todo el trabajo en la parte de terminal, así que la cerramos.

Ahora vamos USER SCRIPT en nuestro Unraid. Pulsamos sobre ADD NEW SCRIPT y le damos un nombre. En mi caso startVortaBackup.sh

Pulsamos sobre la tuerca y le damos a EDIT SCRIPT, se nos abre una ventana y ponemos lo siguiente

!/bin/bash

/mnt/user/appdata/borgmatic/config/stopContainers.sh
sleep 5
docker exec borgmatic bash -c "etc/borgmatic.d/startBackup.sh"
sleep 5
/mnt/user/appdata/borgmatic/config/startContainers.sh
sleep 5
docker exec borgmatic bash -c "etc/borgmatic.d/sendTelegram.sh"

Lo que hace este script es lo siguiente:

  • Para todos los contenedores que estén en marcha, excepto Borgmatic, y guarda el listado en un archivo temporal. Nos llegará la notificación a Telegram que se están parando los contenedores.
  • Para 5 segundos
  • Ejecuta el script de la copia de seguridad, nos envía la notificación que empieza la copia, tardará la primera copia más que las incrementales y tras acabar nos envía otra notificación con el estado de la copia.
  • Para 5 segundos
  • Arranca los contenedores que había parado, nos notifica por Telegram que ya están iniciados y borra el archivo temporal creado en el primer paso.
  • Para 5 segundos
  • Nos envía el log de la copia por Telegram.

Por último configurarlo para que se ejecute de forma programada poniendolo en custom y configurando el cron. Puedes coger los ejemplos de aquí https://crontab.guru/examples.html

En mi caso está para hacer una copia diaria a las 4 de la mañana.

Una vez elegido, le pulsas en RUN IN BACKGROUND

Si todo ha ido bien, cuando se haga la copia de seguridad deberemos recibir un mensaje en nuestro bot de telegram parecido a este

Comandos útiles

Si queremos ver un listado con las copias que tenemos creadas, entramos a nuestro terminal del contenedor docker de nuevo

Una vez dentro, lanzaremos el comando borg list /bkp-to y nos mostrará un listado de las copias que tenemos, tras introducir la contraseña de cifrado que le habíamos puesto nuestra copia en los primeros pasos.

Si queremos saber que hay dentro de una carpeta exacta, copiaremos el nombre de uno de los archivos del listado anterior y con el comando borg list::nombreDelArchivo e introduciendo nuestra clave de cifrado del backup de nuevo, nos mostrará todo lo que hay en formato directorio. En mi caso no lo puedo mostrar por la extensión del listado.

Cómo restaurar una copia

Al inicio del post habíamos creado un directorio RESTORE.

Entramos por terminal a nuestro contenedor de nuevo, tal y como hicimos antes, y navegamos a nuestra carpeta RESTORE

Una vez dentro, listamos los backups con los comandos que hemos visto justo antes de este paso y elegimos mediante el comando borg extract /bkp-to::"nombredelarchivo" e introducimos la contraseña de cifrado de la copia.

Esto nos volcaría todo el contenido de nuestro backup a la carpeta que hayamos decicido poner como RESTORE

Extra

Por hacer un poco este proceso como lo hacía en Hyperbackup cuando estaba en Synology, se me ocurre hacer el montaje de disco de forma automatica 1 minuto antes de la copia, que se haga la copia y una vez terminada la copia, el disco se desmonte sólo. Para ello me hacía falta entrar a los logs de nuestro unraid para ver que pasa cuando conecto el disco externo y pulso sobre montar o desmontar el dispositivo.

Esto lo podemos hacer en el botón logs

Nos muestra los siguientes comandos

Claro que esto es posible si has elegido hacer la copia en un disco duro externo y quieres que éste se desmonte del equipo cuando termine de hacerse la copia de seguridad, debes ver el nombre del disco en el apartado Unassigned Devices. En mi caso por ejemplo es BACKUP y está formateado en fat32 para tener menos problemas

Si añadimos este comando al incio de nuestro script /sbin/mount -t 'vfat' -o rw,noatime,nodiratime,nodev,nosuid,iocharset=utf8,umask=000 '/dev/sdj1' '/mnt/disks/BACKUP' seguido de sleep 10 , y añadimo este comando al final del script, /sbin/umount '/mnt/disks/BACKUP' sustituyendo el nombre por el de tu disco, se montará el disco antes de iniciar la copia y se desmontará automáticamente al acabar la copia.

Como sólo tengo este disco pequeño donde no me cabe la copia, lo he preparado del siguiente modo

Y mirad como se monta y se desmonta automáticamente el disco

0:00
/0:17

Espero que esto os ayude con todo este asunto peliagudo de la copia de seguridad

Mi nombre es David Rodríguez, apasionado por un millón de cosas que lleven placas y chips dentro.
Puedes encontrarme como @_Bilito en twitter y en grupo de Telegram de Synology NAS https://t.me/synologyNAS
Tengo un un canal de youtube que complementa al blog https://www.youtube.com/@_Bilito y que me harías un gran favor si te subscribes.
También colaboro en podcast como Bateria 2x100 https://pod.link/1115144939 y además hemos comenzado otra aventura en otro podcast Detras del Mostrador https://pod.link/1657695301

Read more