--- title: "Cómo hacer backups con Duplicacy a S3 y B2 en Ubuntu 24.04" description: "Configura Duplicacy en Ubuntu 24.04 para hacer copias cifradas y deduplicadas a S3, replicarlas en Backblaze B2 y automatizarlas con un temporizador de systemd." category: "Herramientas de Servidor" language: es source: https://cubepath.com/es/docs/herramientas-de-servidor/duplicacy-backup-con-backends-de-almacenamiento-cloud updated: 2026-09-25 --- # Cómo hacer backups con Duplicacy a S3 y B2 en Ubuntu 24.04 Duplicacy es una herramienta de copias de seguridad que divide los archivos en fragmentos (chunks), los cifra y los sube a un almacenamiento local o en la nube, subiendo cada fragmento una sola vez aunque aparezca en varias copias. No usa bloqueos, así que varios servidores pueden escribir en el mismo almacenamiento a la vez y compartir la deduplicación. En este tutorial instalarás la CLI de Duplicacy en Ubuntu 24.04, harás copias cifradas de `/var/www` a un bucket S3, las replicarás en Backblaze B2, aplicarás una política de retención y lo automatizarás con systemd. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo`. - Un bucket S3 o compatible con S3, con una clave de acceso (access key y secret key) que pueda leer y escribir en él. - Opcional, para la copia secundaria: un bucket de Backblaze B2 con su `keyID` y `applicationKey`. > Nota: la CLI de Duplicacy es gratuita para uso personal. Para uso comercial requiere licencia; consulta las condiciones en duplicacy.com antes de usarla en producción en una empresa. En este tutorial los comandos se ejecutan como root (con `sudo -i`) porque la copia necesita leer archivos de varios usuarios y las credenciales se guardan en un archivo que solo root puede leer. ## Paso 1: Instalar la CLI de Duplicacy Duplicacy se distribuye como un único binario en las releases de GitHub. Consulta la última versión en `https://github.com/gilbertchen/duplicacy/releases` y descárgala (en este ejemplo, la 3.2.3 para x86_64): ```bash sudo -i VERSION=3.2.3 curl -fLo /usr/local/bin/duplicacy "https://github.com/gilbertchen/duplicacy/releases/download/v${VERSION}/duplicacy_linux_x64_${VERSION}" chmod 755 /usr/local/bin/duplicacy ``` En servidores ARM64 descarga el archivo `duplicacy_linux_arm64_${VERSION}`. Comprueba que el binario funciona: ```bash duplicacy -help | head -n 3 ``` ```output NAME: duplicacy - A new generation cloud backup tool based on lock-free deduplication ``` ## Paso 2: Guardar las credenciales en un archivo protegido Duplicacy lee las credenciales del almacenamiento y la contraseña de cifrado desde variables de entorno, lo que permite ejecutarlo sin preguntas desde systemd. Crea un archivo de entorno legible solo por root: ```bash mkdir -p /etc/duplicacy install -m 600 /dev/null /etc/duplicacy/duplicacy.env nano /etc/duplicacy/duplicacy.env ``` Añade estas líneas, sustituyendo los valores por los tuyos: ```ini DUPLICACY_PASSWORD=your_strong_encryption_password DUPLICACY_S3_ID=your_s3_access_key DUPLICACY_S3_SECRET=your_s3_secret_key ``` Las variables sin nombre de almacenamiento (`DUPLICACY_S3_ID`, `DUPLICACY_PASSWORD`) se aplican al almacenamiento llamado `default`. Carga el archivo en tu sesión actual: ```bash set -a; source /etc/duplicacy/duplicacy.env; set +a ``` > Importante: guarda la contraseña de cifrado fuera del servidor, por ejemplo en un gestor de contraseñas. Si pierdes el servidor y la contraseña, las copias no se pueden descifrar. ## Paso 3: Inicializar el repositorio En Duplicacy, el *repositorio* es el directorio que quieres copiar y el *almacenamiento* es el destino. Para no dejar el directorio de configuración `.duplicacy` dentro de `/var/www` (donde el servidor web podría servirlo), crea un directorio de trabajo aparte y usa `-repository` para indicar qué ruta se copia: ```bash mkdir -p /root/duplicacy/www cd /root/duplicacy/www duplicacy init -e -repository /var/www www-server s3://us-east-1@s3.amazonaws.com/your-bucket/duplicacy ``` - `-e` cifra el almacenamiento con la contraseña de `DUPLICACY_PASSWORD`. - `www-server` es el *snapshot ID*, el nombre que identifica las copias de este directorio. Debe ser único por origen. - La URL de S3 tiene el formato `s3://region@endpoint/bucket/ruta`. Para un proveedor compatible con S3, cambia la región y el endpoint por los del proveedor. ```output /var/www will be backed up to s3://us-east-1@s3.amazonaws.com/your-bucket/duplicacy with id www-server ``` Si quieres excluir rutas, crea el archivo de filtros `/root/duplicacy/www/.duplicacy/filters`. Cada línea empieza por `-` (excluir) o `+` (incluir) y las rutas son relativas a `/var/www`: ```text -*.log -cache/ -node_modules/ ``` ## Paso 4: Hacer la primera copia Lanza la copia con estadísticas y varios hilos de subida: ```bash cd /root/duplicacy/www duplicacy backup -stats -threads 4 ``` ```output Backup for /var/www at revision 1 completed Files: 1523 total, 84,211K bytes; 1523 new, 84,211K bytes All chunks: 32 total, 84,301K bytes; 32 new, 71,907K bytes, 23,451K bytes uploaded ``` La primera copia sube todos los datos. Las siguientes solo suben los fragmentos que han cambiado. Lista las revisiones disponibles: ```bash duplicacy list ``` ```output Snapshot www-server revision 1 created at 2026-09-25 10:14 ``` ## Paso 5: Añadir un segundo almacenamiento en Backblaze B2 La regla 3-2-1 recomienda tener una copia en otro proveedor. En lugar de copiar dos veces desde el servidor, Duplicacy puede replicar las revisiones de un almacenamiento a otro con `copy`. Para ello, el segundo almacenamiento debe crearse compatible con el primero usando `-copy`. Añade las credenciales de B2 al archivo de entorno. Para un almacenamiento con nombre, las variables llevan el nombre en mayúsculas después de `DUPLICACY_`: ```bash nano /etc/duplicacy/duplicacy.env ``` ```ini DUPLICACY_OFFSITE_PASSWORD=your_strong_encryption_password DUPLICACY_OFFSITE_B2_ID=your_b2_key_id DUPLICACY_OFFSITE_B2_KEY=your_b2_application_key ``` Recarga el archivo y añade el almacenamiento `offsite`: ```bash set -a; source /etc/duplicacy/duplicacy.env; set +a cd /root/duplicacy/www duplicacy add -e -copy default -bit-identical offsite www-server b2://your-b2-bucket ``` `-bit-identical` hace que los fragmentos sean idénticos en ambos almacenamientos, así podrás copiar los datos entre buckets con otras herramientas si lo necesitas. Copia las revisiones existentes a B2: ```bash duplicacy copy -from default -to offsite ``` Comprueba que la revisión está en el nuevo almacenamiento: ```bash duplicacy list -storage offsite ``` ```output Snapshot www-server revision 1 created at 2026-09-25 10:14 ``` ## Paso 6: Definir la política de retención `prune` elimina revisiones antiguas. Cada opción `-keep n:m` significa "conservar una revisión cada `n` días para las revisiones con más de `m` días". `n` igual a 0 significa borrar todas las revisiones más antiguas que `m`. Las opciones se escriben de mayor a menor `m`: ```bash duplicacy prune -keep 0:365 -keep 30:90 -keep 7:30 -keep 1:7 ``` Con esta política se conservan todas las revisiones de la última semana, una diaria hasta los 30 días, una semanal hasta los 90, una mensual hasta el año y nada más antiguo. Aplícala también al almacenamiento de B2: ```bash duplicacy prune -storage offsite -keep 0:365 -keep 30:90 -keep 7:30 -keep 1:7 ``` ## Paso 7: Automatizar las copias con systemd Crea un script que haga la copia, la replique y aplique la retención. `set -euo pipefail` detiene el script en el primer error para que systemd marque el servicio como fallido: ```bash nano /usr/local/bin/duplicacy-backup ``` ```bash #!/usr/bin/env bash set -euo pipefail cd /root/duplicacy/www duplicacy -log backup -stats -threads 4 duplicacy -log copy -from default -to offsite duplicacy -log prune -keep 0:365 -keep 30:90 -keep 7:30 -keep 1:7 duplicacy -log prune -storage offsite -keep 0:365 -keep 30:90 -keep 7:30 -keep 1:7 ``` ```bash chmod 750 /usr/local/bin/duplicacy-backup ``` Crea el servicio. `EnvironmentFile` carga las credenciales sin exponerlas en el script: ```bash nano /etc/systemd/system/duplicacy-backup.service ``` ```ini [Unit] Description=Duplicacy backup of /var/www Wants=network-online.target After=network-online.target [Service] Type=oneshot EnvironmentFile=/etc/duplicacy/duplicacy.env ExecStart=/usr/local/bin/duplicacy-backup Nice=10 IOSchedulingClass=idle ``` Crea el temporizador para lanzarlo cada noche a las 03:00: ```bash nano /etc/systemd/system/duplicacy-backup.timer ``` ```ini [Unit] Description=Nightly Duplicacy backup [Timer] OnCalendar=*-*-* 03:00:00 RandomizedDelaySec=15m Persistent=true [Install] WantedBy=timers.target ``` Recarga systemd, lanza una ejecución manual para probarlo y activa el temporizador: ```bash systemctl daemon-reload systemctl start duplicacy-backup.service journalctl -u duplicacy-backup.service -n 20 --no-pager systemctl enable --now duplicacy-backup.timer ``` Comprueba la próxima ejecución programada: ```bash systemctl list-timers duplicacy-backup.timer ``` ```output NEXT LEFT LAST PASSED UNIT ACTIVATES Fri 2026-09-26 03:07:12 UTC 16h left - - duplicacy-backup.timer duplicacy-backup.service ``` ## Paso 8: Verificar y restaurar Una copia que no se ha probado no es una copia. `check` confirma que todos los fragmentos de todas las revisiones existen en el almacenamiento, y `-files` descarga y verifica el contenido (más lento): ```bash cd /root/duplicacy/www duplicacy check ``` ```output All chunks referenced by snapshot www-server at revision 1 exist ``` Para ver los archivos de una revisión: ```bash duplicacy list -r 1 -files | head ``` Para restaurar un archivo concreto sobre `/var/www`, indica la revisión y la ruta relativa al repositorio: ```bash duplicacy restore -r 1 -overwrite -- html/index.php ``` Para restaurar en otra ubicación sin tocar `/var/www` (por ejemplo, en un servidor nuevo), inicializa un repositorio nuevo con el mismo snapshot ID y almacenamiento, y restaura allí: ```bash mkdir -p /root/restore-www cd /root/restore-www duplicacy init -e www-server s3://us-east-1@s3.amazonaws.com/your-bucket/duplicacy duplicacy restore -r 1 -threads 4 ``` Los archivos quedan en `/root/restore-www`, desde donde puedes compararlos o moverlos. ## Solución de problemas **`Failed to download the configuration file` o errores 403.** Las credenciales no se han cargado o no tienen permisos sobre el bucket. Comprueba con `env | grep DUPLICACY` que las variables están definidas en la sesión y revisa los permisos de la clave en el proveedor. **Duplicacy vuelve a pedir la contraseña.** El nombre de la variable no coincide con el del almacenamiento. Para `default` usa `DUPLICACY_PASSWORD`; para un almacenamiento llamado `offsite` usa `DUPLICACY_OFFSITE_PASSWORD`. **`copy` falla con un error de compatibilidad.** El almacenamiento de destino no se creó con `-copy default`. Crea un bucket o ruta nueva y vuelve a añadirlo con esa opción. **Una copia interrumpida.** Vuelve a lanzar `duplicacy backup`: los fragmentos ya subidos se reutilizan y la copia continúa donde se quedó. ## Conclusión Has configurado Duplicacy para hacer copias cifradas y deduplicadas de `/var/www` en S3, replicarlas en Backblaze B2, aplicar una política de retención y ejecutarlo todo cada noche con systemd. Como siguientes pasos, añade otros directorios como repositorios adicionales con su propio snapshot ID, programa un `duplicacy check -files` semanal y haz una restauración de prueba en otro servidor cada cierto tiempo.