Rclone es una herramienta de línea de comandos para copiar y sincronizar archivos con más de 70 servicios de almacenamiento: Amazon S3 y compatibles, Backblaze B2, Google Drive, SFTP y muchos más. Además de copy y sync, permite cifrar los datos antes de subirlos, filtrar qué se envía, limitar el ancho de banda por franjas horarias y montar un remoto como si fuera un disco. En este tutorial montarás en Ubuntu 24.04 una copia de seguridad cifrada de /var/www hacia un bucket S3, conservando las versiones de los archivos modificados o borrados, programada con un temporizador de systemd y con un montaje de solo lectura para explorar la copia.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Un bucket en un servicio compatible con S3 y unas claves de acceso (Access Key ID y Secret Access Key) con permiso de lectura, escritura, listado y borrado sobre él.
  • Los datos que quieras respaldar. En los ejemplos se usa /var/www; cámbialo por tu ruta.

Todos los comandos de rclone de esta guía se ejecutan con sudo, porque la copia la hará un servicio de root que necesita leer cualquier archivo. La configuración quedará en /root/.config/rclone/rclone.conf.

Paso 1: Instalar rclone desde el paquete oficial

Ubuntu 24.04 incluye rclone 1.60, una versión de 2022. Instala el paquete .deb oficial para tener la versión actual (usa linux-arm64 en servidores ARM):

cd /tmp
curl -fsSLO https://downloads.rclone.org/rclone-current-linux-amd64.deb
sudo apt install ./rclone-current-linux-amd64.deb

Comprueba la versión:

rclone version | head -n 1
rclone v1.75.1

Para actualizar en el futuro, repite la descarga y la instalación del paquete.

Paso 2: Crear el remoto S3

Un remoto es una conexión con nombre a un servicio de almacenamiento. Crea uno llamado s3backup. Para Amazon S3:

sudo rclone config create s3backup s3 provider=AWS env_auth=false access_key_id=YOUR_ACCESS_KEY secret_access_key=YOUR_SECRET_KEY region=eu-west-1 no_check_bucket=true

Para otro proveedor compatible con S3, usa provider=Other e indica su endpoint:

sudo rclone config create s3backup s3 provider=Other env_auth=false access_key_id=YOUR_ACCESS_KEY secret_access_key=YOUR_SECRET_KEY endpoint=https://s3.your_provider.com no_check_bucket=true

no_check_bucket=true evita que rclone intente crear el bucket en cada operación, algo necesario cuando las claves solo tienen permisos sobre un bucket existente.

Verifica que el remoto funciona listando el contenido del bucket:

sudo rclone lsd s3backup:your_bucket

Si el bucket está vacío el comando no imprime nada y termina sin error. Un error AccessDenied o SignatureDoesNotMatch indica claves, región o endpoint incorrectos.

Paso 3: Añadir una capa de cifrado con crypt

El backend crypt envuelve otro remoto y cifra contenido y nombres de archivo en el servidor antes de subirlos. El proveedor solo ve datos ilegibles. Créalo con el asistente interactivo, que puede generar contraseñas aleatorias:

sudo rclone config

Responde así a las preguntas principales:

  1. n para crear un remoto nuevo y ponle de nombre cifrado.
  2. En el tipo de almacenamiento, escribe crypt.
  3. En remote, indica la ruta que envolverá: s3backup:your_bucket/cifrado.
  4. En filename_encryption, elige standard (cifra los nombres de archivo).
  5. En directory_name_encryption, elige true.
  6. Para la contraseña, elige g para generar una aleatoria y acepta la propuesta. Repite para la segunda contraseña (salt).
  7. Revisa el resumen, confirma con y y sal con q.

Protege el archivo de configuración y comprueba cómo ha quedado:

sudo chmod 600 /root/.config/rclone/rclone.conf
sudo rclone config redacted cifrado
[cifrado]
type = crypt
remote = s3backup:your_bucket/cifrado
filename_encryption = standard
directory_name_encryption = true
password = XXX
password2 = XXX

Haz una prueba de ida y vuelta:

echo "prueba de cifrado" | sudo rclone rcat cifrado:prueba.txt
sudo rclone cat cifrado:prueba.txt
sudo rclone ls s3backup:your_bucket/cifrado
prueba de cifrado
       66 d0q6hl1v3ai7ao3hd2l5tq1ok8

A través de cifrado: ves el archivo en claro; a través de s3backup: solo un nombre cifrado. Borra la prueba con sudo rclone deletefile cifrado:prueba.txt.

Paso 4: Definir filtros

Los filtros evitan subir archivos que no hacen falta al restaurar. Crea un archivo de reglas:

sudo mkdir -p /etc/rclone
sudo nano /etc/rclone/backup-filters.txt
# Excluir temporales y dependencias que se pueden regenerar
- *.tmp
- *.swp
- .cache/**
- node_modules/**
- vendor/**

Cada línea que empieza por - excluye lo que coincide; lo que no coincide con ninguna regla se incluye. Comprueba qué se copiaría sin transferir nada:

sudo rclone ls /var/www --filter-from /etc/rclone/backup-filters.txt | head

Paso 5: Sincronizar conservando versiones

rclone sync hace que el destino sea idéntico al origen, lo que incluye borrar en el destino lo que se borró en origen. Para que un borrado accidental no se propague a la copia, usa --backup-dir: los archivos que sync borraría o sobrescribiría se mueven a otra carpeta en lugar de perderse.

Haz primero una simulación con --dry-run:

sudo rclone sync /var/www cifrado:www/current \
  --backup-dir cifrado:www/archive/$(date +%F_%H%M) \
  --filter-from /etc/rclone/backup-filters.txt \
  --dry-run

Si la lista de operaciones es la esperada, ejecútalo de verdad con estadísticas de progreso:

sudo rclone sync /var/www cifrado:www/current \
  --backup-dir cifrado:www/archive/$(date +%F_%H%M) \
  --filter-from /etc/rclone/backup-filters.txt \
  --transfers 8 \
  --progress

--transfers 8 sube ocho archivos en paralelo (el valor por defecto es 4), útil con muchos archivos pequeños.

Verifica que la copia coincide con el origen. Con remotos cifrados se usa cryptcheck, que compara sumas de comprobación a través del cifrado:

sudo rclone cryptcheck /var/www cifrado:www/current --filter-from /etc/rclone/backup-filters.txt
NOTICE: Encrypted drive 'cifrado:www/current': 0 differences found
NOTICE: Encrypted drive 'cifrado:www/current': 1532 matching files

Paso 6: Automatizar con un temporizador de systemd

Crea un script que encapsule la sincronización, la limpieza de versiones antiguas y el límite de ancho de banda:

sudo nano /usr/local/sbin/rclone-backup.sh
#!/usr/bin/env bash
set -euo pipefail

SRC="/var/www"
DEST="cifrado:www/current"
ARCHIVE_ROOT="cifrado:www/archive"
STAMP="$(date +%F_%H%M)"

rclone sync "$SRC" "$DEST" \
  --backup-dir "${ARCHIVE_ROOT}/${STAMP}" \
  --filter-from /etc/rclone/backup-filters.txt \
  --transfers 8 \
  --bwlimit "08:00,20M 23:00,off" \
  --log-level INFO \
  --stats-one-line \
  --stats 5m

# Eliminar versiones archivadas de más de 90 días y las carpetas vacías
rclone delete "$ARCHIVE_ROOT" --min-age 90d
rclone rmdirs "$ARCHIVE_ROOT" --leave-root

--bwlimit "08:00,20M 23:00,off" limita la subida a 20 MB/s entre las 08:00 y las 23:00 y la deja libre por la noche. Hazlo ejecutable:

sudo chmod 750 /usr/local/sbin/rclone-backup.sh

Crea el servicio:

sudo nano /etc/systemd/system/rclone-backup.service
[Unit]
Description=Copia cifrada de /var/www con rclone
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
Environment=RCLONE_CONFIG=/root/.config/rclone/rclone.conf
ExecStart=/usr/local/sbin/rclone-backup.sh
Nice=10
IOSchedulingClass=idle

RCLONE_CONFIG indica de forma explícita dónde está la configuración, para no depender de que el servicio tenga definida la variable HOME.

Y el temporizador que lo lanza cada noche:

sudo nano /etc/systemd/system/rclone-backup.timer
[Unit]
Description=Copia diaria con rclone

[Timer]
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target

Persistent=true ejecuta la copia al arrancar si el servidor estaba apagado a la hora programada. Activa el temporizador y lanza una ejecución manual para probar:

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-backup.timer
sudo systemctl start rclone-backup.service

Comprueba el resultado y la próxima ejecución:

sudo journalctl -u rclone-backup.service -n 20 --no-pager
systemctl list-timers rclone-backup.timer
NEXT                        LEFT     LAST PASSED UNIT                ACTIVATES
Fri 2026-09-26 02:38:12 UTC 11h left -    -      rclone-backup.timer rclone-backup.service

Como rclone escribe su registro en la salida de error, todo queda en el journal sin necesidad de archivos de log ni rotación.

Paso 7: Montar la copia en solo lectura

Montar el remoto permite navegar por la copia con herramientas normales (ls, less, diff) sin descargarla entera. Instala FUSE 3 y crea el punto de montaje:

sudo apt install fuse3
sudo mkdir -p /mnt/backup-www

Crea una unidad de systemd para el montaje:

sudo nano /etc/systemd/system/rclone-mount-www.service
[Unit]
Description=Montaje de solo lectura de la copia rclone
Wants=network-online.target
After=network-online.target

[Service]
Type=notify
Environment=RCLONE_CONFIG=/root/.config/rclone/rclone.conf
ExecStart=/usr/bin/rclone mount cifrado:www /mnt/backup-www --read-only --vfs-cache-mode minimal --dir-cache-time 1h
ExecStop=/usr/bin/fusermount3 -u /mnt/backup-www
Restart=on-failure

[Install]
WantedBy=multi-user.target

rclone mount avisa a systemd cuando el montaje está listo, por eso se usa Type=notify. Arráncalo y compruébalo:

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-mount-www.service
sudo ls /mnt/backup-www
archive  current

Solo root puede ver el contenido, porque el montaje no usa --allow-other. Es lo adecuado para una copia de seguridad.

Paso 8: Restaurar archivos

Para recuperar un archivo o un directorio de la última copia, usa rclone copy hacia una ruta temporal:

sudo rclone copy cifrado:www/current/your_site /tmp/restore/your_site --progress

Para recuperar una versión anterior de un archivo que se modificó o borró, búscala en las carpetas de archive:

sudo rclone ls cifrado:www/archive --include "**/wp-config.php"
     3271 2026-09-24_0231/your_site/wp-config.php

Y cópiala:

sudo rclone copy cifrado:www/archive/2026-09-24_0231/your_site/wp-config.php /tmp/restore/

Revisa lo recuperado antes de moverlo a su ubicación final.

Solución de problemas

directory not found en el primer sync. Es normal que el destino no exista la primera vez; rclone lo crea. Si el error se refiere al origen, revisa la ruta local.

Failed to create file system ... AccessDenied. Las claves no tienen permiso sobre el bucket o la ruta, o falta no_check_bucket=true y las claves no pueden crear buckets. Revisa con sudo rclone config redacted s3backup.

El montaje falla porque no encuentra fusermount3. Falta el paquete fuse3. Instálalo y reinicia la unidad con sudo systemctl restart rclone-mount-www.

--backup-dir falla por solapamiento. La carpeta de versiones no puede estar dentro del destino del sync. Por eso en esta guía el destino es www/current y las versiones van a www/archive.

Conclusión

Tienes rclone actualizado en Ubuntu 24.04 con un remoto S3 cifrado, una sincronización diaria con filtros y límite de ancho de banda que conserva 90 días de versiones, verificación con cryptcheck y un montaje de solo lectura para restaurar con comodidad. Como siguientes pasos, puedes añadir un segundo remoto en otro proveedor y replicar la copia con rclone sync cifrado: otro_remoto:, activar el bloqueo de objetos (Object Lock) en el bucket si tu proveedor lo ofrece, o añadir un OnFailure= al servicio para recibir un aviso cuando la copia falle.