loboaureo

Backup en un servidor o homelab casero con RESTIC

Lo primero, lógicamente, es tener un servidor con ssh/sftp activado, e instalar el cliente de RESTIC en el equipo que queremos hacer las copias de seguridad

Para instalarlo seguimos las opciones que nos indican según nuestro sistema, pero debería ser algo bastante sencillo siguiendo estas instrucciones.

Una vez creado, lo primero sera crear el repositorio donde se guardaran estos backups, hay que tener en cuenta que no sera visible el contenido de los archivos ya que van cifrados y por lo tanto, perder la clave seria perder todos los datos en el backup

restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup init

Eso nos pedirá, primero un password para el repositorio que deberemos insertar dos veces por seguridad y luego la contraseña de ese usuario en el servidor sftp

Por comodidad y seguridad ante olvidos, guardare ese password en un fichero que llamare bckpass.md (puede tener cualquier nombre, pero asegúrate de cambiarlo luego en las instrucciones que correspondan) y así poder pasárselo como parámetro a los comandos y no tener que introducirlo cada vez que hago cualquier operación. Eso si, no lo recomiendo en equipos que vayas a sacar de tu casa por que si lo pierdes quizás tengan acceso a tus archivos.

También por comodidad de que no me pregunte el pass del ssh cada vez que intenta una operacion, sigo este tutorial de generar claves (lo pongo por aqui por tenerlo a mano también que esta en Internet archive)

A quick how-to, mostly for my reference, but also because a Google search for “using ssh with certificates” brings up no useful resources.

To avoid having to type in your password every time you want to ssh to a server, you can set up the server to accept a [certificate](https://web.archive.org/web/20160404025901/http://en.wikipedia.org/wiki/Public-key_cryptography "Public-key cryptography on wikipedia.org") like this:

On your local machine, go to the command-line and type:

1. cd ~/.ssh
2. ssh-keygen -t rsa
3. Choose no passphrase when asked and accept the default filename of id_rsa
4. scp id_rsa.pub <user>@<yourhost>:.ssh/authorized_keys
5. Provide your password when asked and that’s the last time you’ll have to do it!

If you get an error on the last step saying “scp: .ssh/authorized_keys: No such file or directory”, connect to your host and create the .ssh directory in your home directory.

Ahora ya, pasemos al cacharreo con los backups.

Para hacer el backup de una carpeta ejecutamos el siguiente comando (en mi caso la carpeta /home/).

restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md backup /home/

Luego si queremos mantener solo una cantidad limitada de backups (hay que tener en cuenta que es incremental, por lo que si entre dos copias no hay modificaciones, apenas supone espacio), podemos personalizar el siguiente comando con los parámetros que ponen aqui

restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md forget --prune  --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5

Por ultimo, conviene hacer un checkeo de los datos (¡¡para que quieres un backup si luego esta corrupto!!). Este se puede hacer de dos maneras: uno rápido

restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md check

y otro exhaustivo

restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md check --read-data

En mi caso hago siempre uno rápido después de cada copia de seguridad y uno exhaustivo cada mes

Al final, he creado un script para juntar todo en un solo listado

clear
echo "-Desbloqueando repositorios por si acaso"
echo "------------------------------------------------- repo_test "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/repo_test --verbose --password-file ./bckpass.md unlock
echo "------------------------------------------------- Nube "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Nube --verbose --password-file ./bckpass.md unlock
echo "------------------------------------------------- LinuxAPP "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/LinuxAPP --verbose --password-file ./bckpass.md unlock
echo "------------------------------------------------- backup2 "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md unlock

echo "-Comenzando backup"
echo "------------------------------------------------- repo_test "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/repo_test --verbose --password-file ./bckpass.md backup /home/
echo "------------------------------------------------- Nube "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Nube --verbose --password-file ./bckpass.md backup /mnt/datos/Nube/
echo "------------------------------------------------- LinuxAPP "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/LinuxAPP --verbose --password-file ./bckpass.md backup /mnt/datos/LinuxAPPs/
echo "------------------------------------------------- backup2 "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md backup /mnt/datos/Nube/
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md backup /home/
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md backup /mnt/datos/LinuxAPPs/

echo "-Limpiando backups viejos"
echo "------------------------------------------------- Nube "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Nube --verbose --password-file ./bckpass.md forget --prune  --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5
echo "------------------------------------------------- repo_test "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/repo_test --verbose --password-file ./bckpass.md forget --prune  --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5
echo "------------------------------------------------- LinuxAPP "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/LinuxAPP --verbose --password-file ./bckpass.md forget --prune  --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5
echo "------------------------------------------------- backup2 "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md forget --prune  --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5

echo "-Comprobando backups"
echo "------------------------------------------------- repo_test "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/repo_test --verbose --password-file ./bckpass.md check
echo "------------------------------------------------- Nube "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Nube --verbose --password-file ./bckpass.md check
echo "------------------------------------------------- LinuxAPP "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/LinuxAPP --verbose --password-file ./bckpass.md check
echo "------------------------------------------------- Backup "
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md check

echo "-Listando cambios"
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/repo_test --verbose --password-file ./bckpass.md snapshots
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Nube --verbose --password-file ./bckpass.md snapshots
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/LinuxAPP --verbose --password-file ./bckpass.md snapshots
restic -r sftp:root@192.168.1.190:/mnt/THD/Backups/Restic/Backup --verbose --password-file ./bckpass.md snapshots

Como veis, aparte de hacer varios backups y añadir distintas carpetas a uno solo, he usado un par de comandos que no hemos visto antes - unlock -> Si por lo que sea alguna operación se queda a medio, el repositorio se queda bloqueado, con este comando se desbloquea - snapshots -> lista todos las copias que se han hecho en el repositorio

En cualquier caso, la documentacion de RESTIC esta muy bien estructurada y si necesitáis algo mas, seguro que ahí lo encontrareis

Thoughts? Leave a comment