--- title: "Backups en Backblaze B2 con restic en Ubuntu 24.04" description: "Configura copias cifradas e incrementales de tu servidor Ubuntu 24.04 en Backblaze B2 con restic, retención automática y un timer diario de systemd." category: "Integración Cloud" language: es source: https://cubepath.com/es/docs/integración-cloud/almacenamiento-backblaze-b2-para-backups-de-servidor updated: 2026-09-25 --- # Backups en Backblaze B2 con restic en Ubuntu 24.04 Backblaze B2 es un almacenamiento de objetos en la nube con un precio por TB muy bajo, lo que lo convierte en un destino habitual para copias de seguridad externas. restic es una herramienta de backup que cifra los datos en el servidor antes de enviarlos, solo sube los bloques que han cambiado y guarda cada copia como un snapshot que puedes restaurar de forma independiente. En este tutorial configurarás restic en Ubuntu 24.04 con un bucket de B2 como destino, programarás una copia diaria con retención automática y comprobarás que puedes restaurar. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con un usuario no root con privilegios `sudo`. - Una cuenta de Backblaze con B2 Cloud Storage activado. - Una idea clara de qué directorios quieres respaldar. Los ejemplos usan `/etc`, `/home` y `/var/www`. ## Paso 1: Crear el bucket y una application key en B2 Primero crearás un bucket privado y una clave que solo tenga acceso a ese bucket, para que una filtración de la clave no comprometa el resto de la cuenta. 1. En el panel de Backblaze, ve a **Buckets** y pulsa **Create a Bucket**. 2. Escribe un nombre (son únicos en todo B2, en esta guía se usa `mis-backups-servidor`), marca **Private** y crea el bucket. 3. Abre la configuración del ciclo de vida del bucket (**Lifecycle Settings**) y selecciona **Keep only the last version of the file**. restic ya gestiona su propio historial con snapshots, y así B2 no acumula versiones ocultas de los archivos que restic borra al hacer limpieza. 4. Ve a **Application Keys** y pulsa **Add a New Application Key**. Ponle un nombre como `restic-mi-servidor`, en **Allow access to Bucket(s)** elige solo `mis-backups-servidor` y en **Type of Access** deja **Read and Write**. 5. Copia el **keyID** y la **applicationKey**. La applicationKey solo se muestra una vez. En los pasos siguientes aparecen como `your_key_id` y `your_application_key`. ## Paso 2: Instalar restic restic está en los repositorios de Ubuntu 24.04: ```bash sudo apt update sudo apt install restic ``` Comprueba la versión instalada: ```bash restic version ``` ```output restic 0.16.4 compiled with go1.22.2 on linux/amd64 ``` ## Paso 3: Guardar las credenciales de forma segura restic lee la configuración del repositorio y las credenciales de B2 de variables de entorno. En lugar de escribirlas en un script, las guardarás en un archivo que solo root puede leer y que después cargará systemd. Crea el directorio de configuración: ```bash sudo install -d -m 700 /etc/restic ``` Genera una contraseña aleatoria para cifrar el repositorio: ```bash sudo sh -c 'openssl rand -base64 32 > /etc/restic/password' sudo chmod 600 /etc/restic/password ``` > Importante: guarda una copia de `/etc/restic/password` fuera del servidor, por ejemplo en tu gestor de contraseñas. Sin esa contraseña los datos del repositorio no se pueden descifrar, ni siquiera con acceso completo al bucket. Crea el archivo de entorno: ```bash sudo nano /etc/restic/b2.env ``` ```ini B2_ACCOUNT_ID=your_key_id B2_ACCOUNT_KEY=your_application_key RESTIC_REPOSITORY=b2:mis-backups-servidor:servidores/mi-servidor RESTIC_PASSWORD_FILE=/etc/restic/password RESTIC_CACHE_DIR=/var/cache/restic ``` `RESTIC_REPOSITORY` sigue el formato `b2:nombre-del-bucket:ruta`. Usar una ruta por servidor permite guardar varios servidores en el mismo bucket con repositorios separados. Protege el archivo: ```bash sudo chmod 600 /etc/restic/b2.env ``` ## Paso 4: Inicializar el repositorio Para ejecutar restic a mano con estas variables, abre una shell de root y carga el archivo de entorno: ```bash sudo -i set -a; . /etc/restic/b2.env; set +a ``` `set -a` exporta automáticamente todas las variables que se definen al cargar el archivo. Ahora inicializa el repositorio: ```bash restic init ``` ```output created restic repository 3f1c9a2b7e at b2:mis-backups-servidor:servidores/mi-servidor Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost. ``` ## Paso 5: Hacer la primera copia de seguridad Sigue en la shell de root del paso anterior y lanza la primera copia. `--exclude-caches` omite los directorios marcados como caché y `--exclude` descarta patrones que no merece la pena guardar: ```bash restic backup /etc /home /var/www --exclude-caches --exclude '*.tmp' --tag diario ``` ```output repository 3f1c9a2b opened (version 2, compression level auto) created new cache in /var/cache/restic no parent snapshot found, will read all files Files: 4127 new, 0 changed, 0 unmodified Dirs: 812 new, 0 changed, 0 unmodified Added to the repository: 212.408 MiB (98.113 MiB stored) processed 4127 files, 301.522 MiB in 0:41 snapshot 8c1d2e4f saved ``` Ejecuta el mismo comando otra vez: esta vez restic solo leerá los archivos que han cambiado y la copia terminará en unos segundos. Lista los snapshots: ```bash restic snapshots ``` ```output ID Time Host Tags Paths ---------------------------------------------------------------------- 8c1d2e4f 2026-09-25 10:31:07 mi-servidor diario /etc /home /var/www b27a90c1 2026-09-25 10:33:45 mi-servidor diario /etc /home /var/www ---------------------------------------------------------------------- 2 snapshots ``` Si alguna de las rutas no existe en tu servidor, restic termina con un aviso y código de salida 3. Quita esa ruta del comando antes de automatizarlo. ## Paso 6: Probar una restauración Restaura un archivo concreto del último snapshot en un directorio temporal, sin tocar los datos originales: ```bash restic restore latest --target /tmp/restauracion --include /etc/hostname cat /tmp/restauracion/etc/hostname ``` ```output mi-servidor ``` También puedes explorar un snapshot antes de restaurar: ```bash restic ls latest /etc/ssh ``` Para restaurar un directorio completo, usa `--include /var/www` y copia después los archivos a su sitio. Evita `--target /` salvo que sepas exactamente lo que vas a sobrescribir. Cuando termines, sal de la shell de root: ```bash exit ``` ## Paso 7: Automatizar la copia con systemd Crearás un servicio que hace la copia y aplica la política de retención, y un timer que lo ejecuta cada noche. ```bash sudo nano /etc/systemd/system/restic-backup.service ``` ```ini [Unit] Description=Copia de seguridad con restic a Backblaze B2 Wants=network-online.target After=network-online.target [Service] Type=oneshot EnvironmentFile=/etc/restic/b2.env ExecStart=/usr/bin/restic backup /etc /home /var/www --exclude-caches --exclude '*.tmp' --tag diario ExecStartPost=/usr/bin/restic forget --tag diario --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune Nice=10 IOSchedulingClass=idle ``` La política de `forget` conserva un snapshot por día durante 7 días, uno por semana durante 4 semanas y uno por mes durante 6 meses. `--prune` elimina del bucket los datos que ya no usa ningún snapshot. `ExecStartPost` solo se ejecuta si la copia ha terminado bien. Crea el timer: ```bash sudo nano /etc/systemd/system/restic-backup.timer ``` ```ini [Unit] Description=Copia diaria con restic [Timer] OnCalendar=*-*-* 04:00:00 RandomizedDelaySec=30m Persistent=true [Install] WantedBy=timers.target ``` Activa el timer y lanza una ejecución manual para verificar el servicio: ```bash sudo systemctl daemon-reload sudo systemctl enable --now restic-backup.timer sudo systemctl start restic-backup.service sudo journalctl -u restic-backup.service -n 30 --no-pager ``` Al final del journal deberías ver el snapshot guardado y el resumen de `forget`, sin errores. Comprueba cuándo será la próxima ejecución: ```bash systemctl list-timers restic-backup.timer ``` ## Paso 8: Verificar la integridad del repositorio `restic check` comprueba que la estructura del repositorio es coherente. Añadir `--read-data-subset` descarga y verifica además una parte de los datos, lo que detecta corrupción sin tener que bajar el repositorio completo: ```bash sudo bash -c 'set -a; . /etc/restic/b2.env; set +a; restic check --read-data-subset=5%' ``` ```output using temporary cache in /tmp/restic-check-cache-123456 load indexes check all packs check snapshots, trees and blobs read 5.0% of data packs no errors were found ``` Ejecútalo de vez en cuando, por ejemplo una vez al mes, o crea un segundo servicio y timer con este comando. ## Solución de problemas **`unable to authorize account` o `401 Unauthorized`.** El keyID o la applicationKey no son correctos, o la clave se ha borrado. Genera una nueva en **Application Keys** y actualiza `/etc/restic/b2.env`. **`Fatal: unable to open config file` o `Is there a repository at the following location?`.** El repositorio no se ha inicializado en esa ruta o `RESTIC_REPOSITORY` tiene un error tipográfico. Revisa el nombre del bucket y la ruta. **`wrong password or no key found`.** El archivo `/etc/restic/password` no coincide con el que se usó en `restic init`. Recupera la contraseña de tu copia externa. **`unable to create lock in backend: repository is already locked`.** Otra ejecución sigue en curso o se interrumpió. Comprueba que no hay ningún proceso restic activo y, en ese caso, ejecuta `restic unlock` con las variables cargadas. **El servicio falla con código 3.** Alguna de las rutas no existe o hay archivos que no se pudieron leer. El detalle está en `journalctl -u restic-backup.service`. ## Conclusión Tu servidor guarda cada noche una copia cifrada e incremental en Backblaze B2, con una política de retención que limpia los snapshots antiguos y una restauración ya probada. Como siguientes pasos, puedes añadir el volcado de tus bases de datos antes de la copia, programar `restic check` de forma periódica o crear una segunda clave de B2 de solo lectura para restaurar desde otro equipo sin exponer permisos de escritura.