Hacer copias de seguridad cifradas en Linux con Restic

Copiar la carpeta Documentos a un disco USB nos puede sacar de un apuro, pero tiene dos problemas: cualquiera que encuentre el disco puede abrir los archivos y, si sobrescribimos la copia, quizá perdamos justo la versión que necesitábamos recuperar. Restic resuelve ambas cosas. Guarda instantáneas cifradas y reutiliza los datos que ya estaban en copias anteriores para no repetirlos sin necesidad.

En este ejemplo vamos a guardar dos carpetas en un disco externo y, sobre todo, vamos a restaurar un archivo. Una copia que nunca se ha intentado recuperar todavía es una promesa.

Esquema de carpetas de Linux que se guardan cifradas con Restic en un disco externo y se restauran en otra carpeta
Restic cifra el contenido antes de guardarlo. La prueba importante consiste en restaurarlo en otra carpeta.

Instalar Restic y localizar el disco

En Ubuntu y Linux Mint podemos instalar el paquete de los repositorios:

sudo apt update
sudo apt install restic
restic version

Conectamos el disco externo y comprobamos dónde está montado:

lsblk -f

No copiemos a ciegas una ruta de internet. En muchos escritorios aparecerá bajo /media/nuestro-usuario/NOMBRE, pero lsblk -f nos permite reconocer el dispositivo por su tamaño, sistema de archivos y etiqueta. En los comandos siguientes utilizo /media/sergio/COPIAS/restic; hay que sustituirla por la ruta real de nuestro disco.

El repositorio no debería estar en el mismo disco físico que los originales. Si el disco interno falla y la copia estaba en otra partición de ese mismo disco, perderemos los dos a la vez.

Crear el repositorio cifrado

Primero creamos una carpeta vacía en el disco y la inicializamos:

mkdir -p /media/sergio/COPIAS/restic
restic -r /media/sergio/COPIAS/restic init

Restic nos pedirá una contraseña. Esa contraseña cifra las claves con las que se protege el repositorio: si la olvidamos, no existe un botón para recuperarla y las copias quedarán inaccesibles. Conviene guardarla en nuestro gestor de contraseñas, no en un archivo de texto junto al propio disco.

La opción -r señala el repositorio. La repetiremos en todos los comandos para que quede claro sobre qué copia estamos trabajando. Es más largo que usar una variable de entorno, pero reduce el riesgo de borrar o consultar por accidente otro repositorio.

Hacer la primera copia

Antes de escribir nada podemos hacer una simulación. En este caso vamos a incluir Documentos e Imágenes:

restic -r /media/sergio/COPIAS/restic backup \
  "$HOME/Documentos" "$HOME/Imágenes" --dry-run -vv

Revisamos la lista. Si aparecen carpetas que no queríamos guardar, corregimos las rutas; si todo encaja, quitamos --dry-run -vv:

restic -r /media/sergio/COPIAS/restic backup \
  "$HOME/Documentos" "$HOME/Imágenes"

Al terminar se crea una instantánea. Si repetimos la orden mañana, Restic no vuelve a almacenar todos los archivos como si fueran nuevos: compara el contenido y aprovecha lo que ya existe en el repositorio. Aun así, cada instantánea representa el estado completo de las rutas incluidas en ese momento.

Podemos verlas así:

restic -r /media/sergio/COPIAS/restic snapshots

No desconectamos el disco mientras la copia está trabajando. Cuando finalice, lo expulsamos desde el escritorio o desmontamos su partición correctamente.

Comprobar y restaurar, no sólo copiar

Una ejecución sin mensajes rojos no demuestra por sí sola que sabremos recuperar los datos. Primero comprobamos la estructura del repositorio:

restic -r /media/sergio/COPIAS/restic check

La comprobación completa lee además todos los paquetes de datos. Tarda más, especialmente con un disco grande, pero merece la pena hacerla periódicamente:

restic -r /media/sergio/COPIAS/restic check --read-data

Para ensayar una recuperación utilizamos una carpeta nueva. No restauraría la primera prueba encima de Documentos, porque podríamos mezclar archivos o sobrescribir algo actual:

mkdir -p "$HOME/Restaurado-restic"
restic -r /media/sergio/COPIAS/restic restore latest \
  --target "$HOME/Restaurado-restic"

Entramos en ~/Restaurado-restic y abrimos varios documentos y fotografías, no sólo miramos que sus nombres estén ahí. Cuando hayamos comprobado la recuperación podemos borrar esa carpeta de prueba; no afecta al repositorio.

Si necesitamos una instantánea concreta, copiamos su identificador desde restic snapshots y lo usamos en lugar de latest. Eso nos permite volver a una versión anterior aunque el archivo actual ya se hubiera modificado o borrado.

Lo que esta copia todavía no resuelve

El cifrado protege el contenido del disco perdido o robado, pero no sustituye una segunda copia. Si sólo existe un repositorio y el disco externo se rompe, tampoco podremos restaurar. Para los archivos importantes intentaría mantener otra copia en una ubicación distinta.

Tampoco empezaría el primer día con una orden automática de forget --prune. Esas opciones eliminan instantáneas y liberan datos que ya no quedan referenciados. Son necesarias cuando definimos una política de retención, pero antes hay que decidir cuántas copias diarias, semanales y mensuales queremos conservar y ejecutar el modo de simulación correspondiente. Crear, comprobar y restaurar una copia manual es una base mucho mejor que pegar una limpieza que aún no entendemos.

La documentación de Restic recoge repositorios por SFTP y en distintos servicios remotos cuando queramos sacar una copia fuera de casa. Para empezar, un disco externo que conectamos sólo durante la copia resulta fácil de comprobar y también queda menos expuesto a un borrado accidental o a un programa malicioso.

Si probáis el proceso, contadnos cuánto ocupa la primera instantánea y cuánto añade la segunda después de cambiar sólo unos pocos archivos.

Sergio Almela

Senior Software Engineer con más de diez años de experiencia. Escribo sobre Linux, software libre, backend, arquitectura, rendimiento, testing e IA aplicada al desarrollo.

Ver todas las entradas de Sergio Almela →

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *