Tutorial completo de Restic en Linux para copias de seguridad seguras

Última actualización: 17/12/2025
Autor: Isaac
  • Restic ofrece copias de seguridad cifradas, deduplicadas y multiplataforma, ideales para Linux y otros sistemas.
  • Permite guardar backups en discos locales, servidores SSH y nubes tipo S3, con políticas flexibles de retención.
  • Su uso por línea de comandos facilita la automatización con scripts y cron, tanto en servidores como en dispositivos Android.
  • Incluye herramientas para verificar integridad y restaurar datos de forma granular a partir de snapshots.

Tutorial Restic en Linux

Si utilizas Linux a diario, tarde o temprano vas a necesitar un sistema de copias de seguridad que sea fiable, rápido y fácil de restaurar. Restic se ha ganado a pulso esa fama: es sencillo de usar, cifra todo lo que guarda y funciona igual de bien tanto en un portátil doméstico como en un servidor en la nube.

En las siguientes líneas vas a ver cómo montar un sistema de backups con Restic en Linux que te permita hacer copias cifradas, automáticas y verificadas, ya sea en un disco local, en otro servidor vía SSH o en servicios en la nube compatibles (S3, Backblaze B2, Azure, etc.). La idea es que, una vez lo dejes todo configurado, solo tengas que acordarte de comprobar de vez en cuando que puedes restaurar tus datos.

¿Qué es Restic y por qué merece la pena en Linux?

Restic es un programa de copia de seguridad de código abierto que se centra en ser rápido, seguro y eficiente. Está escrito en Go y se distribuye como un único binario, así que no necesitas desplegar servidores ni montar arquitecturas raras: lo ejecutas donde guardas datos o donde quieras almacenar las copias y listo.

Una de sus grandes bazas es que es multiplataforma. Puedes usar Restic en Linux, BSD, macOS, Windows e incluso en arquitecturas como ARM (por ejemplo, en una Raspberry Pi). Eso quiere decir que con la misma herramienta puedes unificar las copias de respaldo de todos tus equipos.

Restic se basa en dos conceptos clave: los repositorios y las instantáneas (snapshots). El repositorio es el lugar donde se guarda la información (local, remoto o en la nube) y las instantáneas representan el estado de los datos en un momento concreto. Cada vez que lanzas un backup, Restic crea un nuevo snapshot con solo los cambios respecto a los anteriores.

Para proteger la información, Restic cifra todos los datos del repositorio con AES-256 y autenticación Poly1305-AES. Ningún fichero se guarda en claro: aunque alguien accediera al repositorio, sin la contraseña no podría leer absolutamente nada.

Otro punto fuerte es la de-duplicación. Cuando vuelves a ejecutar una copia, Restic detecta los bloques ya existentes y solo sube o guarda lo que haya cambiado realmente. El resultado: menos tiempo de copia y mucho menos espacio ocupado, aunque lances backups completos de forma frecuente.

Ventajas prácticas de Restic para tus copias de seguridad

Además de los aspectos técnicos, en el día a día se agradece que Restic sea muy cómodo de usar. Al ser de línea de comandos, es perfecto para automatizar copias en servidores sin entorno gráfico o integrarlo con scripts, cron, systemd timers, etc.

Puedes almacenar las copias en casi cualquier sitio: un directorio local, un disco USB, un servidor SSH/SFTP o nubes tipo S3 como Amazon S3, MinIO, Backblaze B2, Wasabi, Google Cloud Storage, OpenStack Swift o Azure Blob Storage. Incluso puedes apoyarte en rclone para añadir todavía más backends.

Otra ventaja muy útil es que puedes navegar por el contenido de un snapshot sin restaurarlo completo. A través de comandos como restic mount o listados de ficheros, es sencillo localizar un archivo concreto y recuperarlo sin tener que volcar toda la copia.

El proceso de restauración es bastante directo: con un solo comando puedes recuperar un directorio, un fichero o una copia entera en la ruta que elijas. Y si quieres, es posible montar el repositorio en modo solo lectura para explorar los datos como si fuera un sistema de archivos más.

Por último, Restic incluye comandos para verificar la integridad de las copias, depurar datos antiguos y aplicar políticas de retención (por número de copias, por antigüedad, por etiquetas, etc.), algo imprescindible cuando el repositorio empieza a crecer.

Instalar Restic en Linux (y mantenerlo actualizado)

La forma más sencilla de instalar Restic en la mayoría de distribuciones Linux es tirar del gestor de paquetes de tu sistema. En Debian, Ubuntu y derivadas puedes usar:

sudo apt install restic

En otras distribuciones, los comandos habituales serían similares a estos, que te sirven como referencia rápida para ver cómo se maneja en distintos entornos GNU/Linux:

  • sudo dnf install restic en Fedora, RHEL, CentOS, Rocky o AlmaLinux
  • sudo pacman -S restic en Arch Linux
  • sudo zypper install restic en openSUSE
  • sudo apk add restic en Alpine
  • sudo emerge -a sys-apps/restic en Gentoo

También puedes instalar Restic desde el código fuente o usar contenedores. Por ejemplo, en Docker basta con descargar la imagen oficial con un simple docker pull:

docker pull restic/restic

Si prefieres compilarlo, primero necesitas tener instalado Go y después clonar el repositorio y ejecutar el script de construcción. Esto te permite incluso generar binarios para otras plataformas (Windows, FreeBSD, Linux ARM, etc.):

git clone https://github.com/restic/restic
cd restic
go run build.go

Compilar para otros sistemas es tan sencillo como indicar el sistema objetivo en el comando, algo muy práctico cuando tienes entornos heterogéneos y quieres usar el mismo motor de backup en todos.

  Cómo eliminar Spotify de Windows 7

Si has instalado Restic desde los repositorios de tu distribución, es posible que no tengas la última versión estable. El propio programa ofrece un comando para auto-actualizar el binario desde GitHub, manteniendo todo al día sin romper tu flujo de trabajo:

sudo restic self-update

Este comando descarga la última versión, verifica la firma GPG y reemplaza el binario antiguo, por lo que en cuestión de segundos tienes Restic actualizado a la versión más reciente en tu sistema.

Crear y proteger el repositorio de backup

Antes de realizar la primera copia, es necesario crear el repositorio donde se almacenarán los datos. En un escenario típico, puedes tener un servidor VPS o equipo remoto que actuará como servidor de copias.

Por ejemplo, en el servidor que guardará los backups se puede crear un directorio dedicado, algo tan sencillo como:

mkdir /home/ubuntu/rpi4_bk

Una vez tengas la ruta, inicializas el repositorio con el comando init y la opción -r para indicar dónde se guardarán los datos:

restic -r /home/ubuntu/rpi4_bk init

El programa te pedirá una contraseña para el repositorio. Es vital que esta clave sea robusta y que la guardes muy bien, porque sin ella el contenido del repositorio es irrecuperable. Cada operación que implique leer o modificar datos (hacer backups, restaurar, listar snapshots, comprobar integridad, etc.) necesitará esta contraseña o un fichero de contraseña.

Si en lugar de un directorio local usas un almacenamiento remoto, el procedimiento es parecido, pero la ruta del repositorio apunta, por ejemplo, a un backend SFTP o a una URL de tipo S3. Lo importante es entender que el repositorio es el contenedor cifrado donde vivirán todas tus instantáneas de backup.

Preparar un usuario dedicado y permisos en Linux

En máquinas Linux donde quieras hacer copia de todo el sistema, surge un problema recurrente: con un usuario normal no puedes leer ficheros propiedad de root ni áreas restringidas. La solución más directa sería ejecutar Restic como root, pero puedes optar por un enfoque más fino.

Un patrón muy interesante consiste en crear un usuario sin privilegios administrativos, por ejemplo llamado restic, y ajustar los permisos de forma que ese usuario pueda leer todos los datos necesarios sin ser root:

sudo useradd -m restic
sudo passwd restic

Después se cambia la propiedad y los permisos del binario de Restic para que solo lo puedan ejecutar root y el usuario restic, reforzando la seguridad de la herramienta en el sistema:

sudo chown root:restic /usr/bin/restic
sudo chmod 750 /usr/bin/restic

El paso clave es aplicar una capacidad especial al binario con setcap, de forma que pueda leer todo el sistema sin importar los permisos de los archivos. Se usa la capacidad cap_dac_read_search=+ep, que permite a Restic atravesar directorios y leerlos como si fuera root, pero sin necesitar correr como tal:

sudo setcap cap_dac_read_search=+ep /usr/bin/restic

Con esta configuración, cuando lances los backups usando el usuario restic podrás respaldar absolutamente todos los ficheros del sistema, respetando una separación de privilegios más segura que ejecutar siempre como root.

Acceso remoto al servidor de copias vía SSH

Si tus copias van a un servidor remoto a través de SFTP/SSH, el usuario que ejecute Restic en el cliente (por ejemplo, el usuario restic de una Raspberry Pi) debe poder conectarse sin introducir contraseña cada vez.

Para eso se le crea una carpeta .ssh en su directorio home y dentro un subdirectorio donde guardará la clave privada usada para autenticarse frente al servidor de backup. Todo este proceso se puede hacer con comandos sencillos: crear directorios, generar o copiar la clave y ajustar permisos para que solo el usuario restic pueda leerla.

La clave privada se almacena en un fichero, por ejemplo ubuntu_server, al que se le asignan permisos 0400 y propiedad del usuario restic. Eso garantiza que la clave esté protegida y solo accesible al usuario que la necesita:

chown restic:restic ubuntu_server
chmod 0400 ubuntu_server

Para simplificar el uso de la clave, se configura el fichero ~/.ssh/config del usuario restic indicando un alias de host (por ejemplo vps2), la IP o nombre del servidor, el puerto SSH, el usuario remoto y la ruta a la clave privada. De este modo, cuando Restic use el backend SFTP con sftp:vps2:/ruta, empleará automáticamente esa configuración.

Una vez hecho esto, el usuario restic de la máquina cliente puede conectarse al servidor de copias sin contraseña, lo que permite que los backups automáticos funcionen sin intervención humana.

Definir qué se incluye y qué se excluye en las copias

Para tener control fino sobre qué entra en el backup, es habitual usar dos ficheros de texto: uno con lo que quieres incluir y otro con lo que quieres excluir. Restic los admite mediante las opciones –files-from y –exclude-file.

Por ejemplo, en el home del usuario restic puedes crear una carpeta ~/restic y dentro un archivo files_to_backup.txt donde listas directorios como /home/pi y otras rutas importantes:

/home/pi
/media/nextcloud/twitter
/media/nextcloud/podcast
/media/nextcloud/services/jellyfin/

En paralelo, se crea un files_to_exclude.txt donde se detallan rutas que no interesa respaldar (p. ej. un directorio de vídeos muy pesado) o patrones como todos los ficheros con cierta extensión. Gracias a esto puedes afinar el tamaño y relevancia de tus copias:

/home/pi/videos
*.txt

Combinando ambos ficheros consigues que la copia incluya todo lo que te interesa (como el home completo y algunas carpetas de un servicio tipo Nextcloud o Jellyfin) y excluya lo que no aporta gran cosa o se puede regenerar fácilmente.

  Activar ReBAR (Resizable BAR) en el UEFI: compatibilidad, mods y riesgos

Realizar un backup manual con Restic

Cuando ya tienes repositorio, usuario dedicado, conexión SSH y listas de inclusión/exclusión, estás listo para lanzar tu primera copia de seguridad manual. Esto viene genial para validar que todo esté bien antes de automatizar nada.

Un comando típico, si el repositorio está en un servidor SFTP accesible como vps2 y la ruta de destino es /home/ubuntu/rpi4_bk/, sería algo como:

sudo -u restic restic -r sftp:vps2:/home/ubuntu/rpi4_bk/ backup \
--tag raspberry --tag docker \
-v --exclude-file=/home/restic/restic/files_to_exclude.txt \
--files-from=/home/restic/restic/files_to_backup.txt

Se usa sudo -u restic para lanzar el comando como el usuario restic, se indica el backend SFTP, se añaden etiquetas a la copia (por ejemplo, para distinguir backups de distintas máquinas o servicios) y se especifican los ficheros a incluir y excluir.

Durante la ejecución verás cómo Restic escanea los directorios, calcula el tamaño, sube los nuevos bloques y termina creando un snapshot con su identificador único. Una vez termina, en el servidor de copias el repositorio contendrá una instantánea completa del estado de tus datos en ese momento.

Comprobar que la copia está bien hecha

No tiene sentido hacer backups si luego no puedes restaurarlos, así que un paso obligatorio es aprender a verificar lo que se ha guardado. Restic ofrece varios comandos para ello, tanto desde el servidor de copias como desde el cliente.

Para listar las instantáneas almacenadas en un repositorio local, puedes usar algo como:

restic -r /home/ubuntu/rpi4_bk/ snapshots

El listado muestra el ID de cada snapshot, la fecha, el host que la creó, las etiquetas y las rutas incluidas. Con esa información sabes qué versiones de tus datos están disponibles y cuándo se generaron.

Si en lugar de acceder al repositorio local quieres hacerlo desde el cliente que creó las copias vía SFTP, el comando es casi idéntico pero cambiando la ruta del repositorio por la URL remota:

sudo restic -r sftp:vps2:/home/ubuntu/rpi4_bk/ snapshots

Para verificar la integridad del repositorio se usa el comando check, que recorre índices, paquetes y árboles de datos y comprueba que todo sea consistente. Es una forma muy potente de asegurarte de que no hay corrupción ni problemas en tus copias:

restic -r /home/ubuntu/rpi4_bk/ check

Conviene ejecutar esta comprobación periódicamente, sobre todo si usas discos externos, almacenamiento en red o servicios donde pueda haber cortes, ya que te da tranquilidad sobre la salud real de tus backups.

Eliminar snapshots y políticas de retención

Con el tiempo, la cantidad de snapshots guardadas puede crecer bastante y conviene tener una forma ordenada de eliminar copias antiguas para liberar espacio y mantener el repositorio controlado.

La forma más básica consiste en borrar instantáneas concretas usando su ID. Primero listamos las copias con el comando de snapshots y después podemos eliminar una en concreto con forget:

restic -r /home/ubuntu/rpi4_bk/ forget 3161b4f6

Este comando saca el snapshot del índice, pero los datos compartidos pueden permanecer en el disco si forman parte de otras instantáneas. Para limpiar definitivamente lo que ya no se necesita, se ejecuta prune sobre el repositorio:

restic -r /home/ubuntu/rpi4_bk/ prune

Si quieres hacerlo de golpe desde el cliente contra un backend SFTP, puedes combinar ambos pasos en un solo comando, pidiendo a Restic que olvide un snapshot concreto y luego limpie los datos asociados.

Más interesante aún es usar las políticas de retención incorporadas. Por ejemplo, si quieres conservar solo las últimas seis copias por cada host, se puede usar:

restic forget -r /home/ubuntu/rpi4_bk/ --group-by host --keep-last 6 --prune

Con esto, Restic mantendrá las seis snapshots más recientes para cada máquina y eliminará las más antiguas, ajustando el espacio del repositorio automáticamente. También hay opciones para retener copias por antigüedad (días, semanas, meses) o por etiquetas, lo que te da mucha flexibilidad para diseñar tu política de copias.

Automatizar los backups con scripts y cron

Una vez comprobado que el backup manual funciona como toca, el siguiente paso lógico es automatizar el proceso. Lo habitual es usar un pequeño script que haga todo el trabajo y programarlo con cron o un servicio equivalente.

El primer detalle a resolver es la contraseña del repositorio. Para evitar teclearla en cada ejecución, se suele crear un fichero, por ejemplo pass en /home/restic/restic, que contenga la clave. Se le dan permisos estrictos para que solo el usuario restic (y root) pueda leerlo:

echo "mi_password" > /home/restic/restic/pass
chmod 0400 /home/restic/restic/pass

También puedes tener un archivo de salida, como raspberry.txt, donde se redirige toda la información generada por el script. Así podrás revisar fácilmente si el proceso ha ido bien o si ha aparecido algún error.

El script de automatización puede llamarse run_backup.sh y contener varias secciones: escribir la fecha del backup, ejecutar el comando de copia, aplicar la política de retención y, opcionalmente, realizar un check de integridad al final.

#!/bin/bash
echo -e "Backup $HOSTNAME realizado el $(date +'%d/%m/%Y a las %R')" > /home/restic/restic/raspberry.txt 2>&1
sudo -u restic restic -r sftp:vps2:/home/ubuntu/rpi4_bk/ backup \
--password-file="/home/restic/restic/pass" \
--tag raspberry --tag docker \
-v --exclude-file=/home/restic/restic/files_to_exclude.txt \
--files-from=/home/restic/restic/files_to_backup.txt >> /home/restic/restic/raspberry.txt 2>&1
sudo -u restic restic -r sftp:vps2:/home/ubuntu/rpi4_bk/ forget \
--password-file="/home/restic/restic/pass" \
--group-by host --keep-last 6 --prune >> /home/restic/restic/raspberry.txt 2>&1
sudo -u restic restic -r sftp:vps2:/home/ubuntu/rpi4_bk/ check \
--password-file="/home/restic/restic/pass" >> /home/restic/restic/raspberry.txt 2>&1

Una vez creado el script, no olvides darle permisos de ejecución. A partir de ese momento, cualquier usuario autorizado (por ejemplo, tu usuario normal mediante sudo) podrá lanzar el backup automático simplemente llamando al script.

  Configura una carpeta compartida para toda la familia en Windows 11

Programar la ejecución con cron en Linux y Android

Para que las copias se hagan sin que tengas que acordarte, lo habitual es añadir una entrada en el crontab del usuario que quieres que dispare el proceso. Por ejemplo, si quieres que el usuario pi ejecute el script todos los sábados a la 1:05 de la madrugada, bastaría con editar su crontab:

crontab -e

Y añadir una línea del tipo:

5 1 * * 6 bash /home/restic/restic/run_backup.sh

Cron se encargará de lanzar el script en el horario indicado sin necesidad de intervención. De esta forma tendrás copias periódicas y consistentes sin tener que hacerlo a mano cada vez.

En entornos Android, se puede llegar a algo similar usando Termux y el paquete termux-services, que aporta soporte para cron a través de cronie. El flujo sería instalar Termux, añadir termux-services, habilitar los servicios y configurar un cron que llame a un script de backup basado en Restic, igual que harías en un Linux de escritorio, pero adaptando rutas y variables.

Restic en Android y almacenamiento tipo S3 con MinIO

Restic no se limita al mundo del PC o el servidor. También puedes usarlo para proteger tus datos en dispositivos Android, que al final son ordenadores más que manejan información personal y de trabajo.

Una opción consiste en utilizar un proyecto específico llamado Restic Android, que utiliza termux/proot para ejecutar el binario de Restic de Linux dentro de Android. Esta app permite gestionar repositorios S3, B2 o REST, configurar carpetas de backup, programar horarios y definir políticas de limpieza, aunque el proyecto se encuentra aún en fase temprana de desarrollo y no está exento de fallos.

Otra vía más flexible pasa por usar directamente Restic dentro de Termux. Así mantienes la configuración de backups en tus dotfiles, compartiendo scripts entre tu ordenador de sobremesa y el dispositivo Android con pequeñas variaciones. Es muy cómodo si ya trabajas con plantillas (por ejemplo, archivos Jinja) y herramientas como jinrender para generar scripts con las variables correspondientes de cada dispositivo.

En ambos casos, el almacenamiento remoto se puede basar en servicios compatibles con S3. Aquí es donde entra MinIO, un servidor de objetos que replica la API de S3 y que puedes autohospedar en tu propio servidor o incluso en tu PC. Así consigues todas las ventajas del modelo S3 sin pagar por un servicio externo ni depender de terceros.

Evidentemente, esto implica instalar, configurar y mantener MinIO, pero en muchos casos el coste compensa la flexibilidad y el control total sobre tus datos. En combinación con Restic, tienes un sistema de copias cifradas y deduplicadas en un backend de objetos que tú controlas al 100 %, tanto para Linux como para Android.

Operaciones básicas: snapshots, restauración y limpieza

En el uso diario de Restic, además de hacer copias y programarlas, hay tres operaciones que conviene tener muy claras: listar snapshots, restaurar datos y eliminar copias viejas.

Para ver qué copias tienes almacenadas, el comando de snapshots ya comentado te muestra el inventario completo.

Si en algún momento quieres comparar dos snapshots para ver qué cambió entre una y otra, puedes usar restic diff pasando los IDs que te interesen, lo que ayuda mucho a entender la evolución de tus datos.

La restauración se hace con el comando restore, indicando el ID del snapshot (o la palabra clave latest si quieres el más reciente) y la ruta de destino. Restic no restaura por defecto sobre la ubicación original, así que debes especificar un directorio target donde se volcará el contenido:

restic restore latest -r /path/to/backup-repository --target /tmp/restore

Si solo quieres recuperar un directorio concreto, se pueden usar opciones adicionales como --include o --path para limitar qué parte del snapshot se restaura, ahorrando tiempo y espacio cuando buscas un conjunto pequeño de archivos.

En cuanto a la limpieza, aparte de los comandos forget y prune, Restic permite definir reglas más elaboradas del estilo “conservar las últimas N copias, mantener las de los últimos X días, semanas o meses, o no borrar las que tengan ciertas etiquetas”. Esto te da herramienta suficiente para diseñar estrategias de retención bastante sofisticadas sin complicarte la vida.

Con Restic puedes montar en Linux (y también en otros sistemas, incluyendo Android) un sistema de copias de seguridad que sea rápido, seguro y cómodo de gestionar: instalas el binario, creas un repositorio cifrado, defines qué se copia y qué no, automatizas con un script y cron, aplicas políticas de retención y verificas de vez en cuando la integridad. Todo ello aprovechando backends locales, SSH o nubes tipo S3, con de-duplicación, cifrado fuerte y un flujo de restauración sencillo que te permite dormir bastante más tranquilo sabiendo que tus datos importantes están bien resguardados.