rclone es una herramienta de línea de comandos para copiar y sincronizar archivos con más de 70 servicios de almacenamiento: compatibles con S3, Google Drive, Backblaze B2, SFTP y muchos otros. Funciona como un rsync para la nube: compara archivos, transfiere solo lo que ha cambiado y puede cifrar los datos antes de enviarlos. En este tutorial instalarás rclone en Ubuntu 24.04, configurarás un remoto compatible con S3, sincronizarás un directorio sin riesgo de borrar datos por error y programarás la copia diaria con un temporizador de 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 en un almacenamiento de objetos compatible con S3 (AWS S3, Cloudflare R2, Wasabi, MinIO, etc.) con su endpoint, access key y secret key. Los ejemplos usan un bucket llamado your_bucket.

Esta guía ejecuta rclone con sudo, porque las copias leerán directorios del sistema como /var/www o /etc. La configuración se guardará por tanto en /root/.config/rclone/rclone.conf.

Paso 1: Instalar rclone

Ubuntu 24.04 incluye rclone en sus repositorios, pero es una versión antigua. El proyecto publica un script de instalación que descarga el binario oficial más reciente. Descárgalo y revísalo antes de ejecutarlo:

sudo apt update
sudo apt install curl unzip
curl -fsSL https://rclone.org/install.sh -o rclone-install.sh
less rclone-install.sh
sudo bash rclone-install.sh

El script instala el binario en /usr/bin/rclone y la página de manual. Comprueba la versión:

rclone version
rclone v1.71.1
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.8.0-45-generic (x86_64)
- os/type: linux
- os/arch: amd64
...

Para actualizar más adelante, basta con sudo rclone selfupdate.

Paso 2: Configurar un remoto S3

Un remoto es una conexión con nombre a un servicio de almacenamiento. Puedes crearlo con el asistente interactivo (sudo rclone config) o en un solo comando con rclone config create. Para un almacenamiento compatible con S3 genérico:

sudo rclone config create s3backup s3 \
  provider=Other \
  endpoint=https://your_s3_endpoint \
  access_key_id=your_access_key \
  secret_access_key=your_secret_key \
  acl=private

Sustituye your_s3_endpoint, your_access_key y your_secret_key por los datos de tu proveedor. Si usas AWS, cambia provider=Other por provider=AWS, elimina endpoint y añade region=eu-west-1 (o tu región). rclone también tiene valores específicos como provider=Cloudflare, provider=Wasabi o provider=Minio; sudo rclone config los muestra todos.

Protege el archivo de configuración, ya que contiene las credenciales:

sudo rclone config file
sudo chmod 600 /root/.config/rclone/rclone.conf
Configuration file is stored at:
/root/.config/rclone/rclone.conf

Verifica que rclone puede conectarse listando los buckets:

sudo rclone lsd s3backup:
          -1 2026-09-20 11:02:31        -1 your_bucket

Si el bucket todavía no existe y tus credenciales permiten crearlo, usa sudo rclone mkdir s3backup:your_bucket.

Paso 3: Copiar y sincronizar archivos

rclone tiene dos comandos principales que conviene no confundir:

ComandoQué haceBorra en el destino
rclone copyCopia archivos nuevos o modificadosNo
rclone syncDeja el destino idéntico al origenSí, lo que no está en el origen

Empieza con copy, que nunca elimina nada. La opción -P muestra el progreso:

sudo rclone copy /etc s3backup:your_bucket/etc -P

Lista lo que se ha subido:

sudo rclone ls s3backup:your_bucket/etc | head -5
     1958 adduser.conf
      551 fstab
     3444 ssh/sshd_config
...

Antes de usar sync por primera vez, simula siempre la operación con --dry-run. Un error en el origen (un directorio vacío o mal escrito) provocaría el borrado de todo el destino:

sudo rclone sync /var/www s3backup:your_bucket/www --dry-run
2026/09/25 10:30:12 NOTICE: html/index.html: Skipped copy as --dry-run is set (size 10.671Ki)
2026/09/25 10:30:12 NOTICE: html/old.php: Skipped delete as --dry-run is set (size 2.104Ki)

Si el resultado es el esperado, ejecútalo de verdad. Con --backup-dir, los archivos que sync eliminaría o sobrescribiría se mueven a otra ruta del bucket en lugar de perderse, lo que te da un historial sencillo:

sudo rclone sync /var/www s3backup:your_bucket/www \
  --backup-dir s3backup:your_bucket/archive/$(date +%F) -P

La ruta de --backup-dir debe estar en el mismo remoto y fuera del directorio de destino.

Paso 4: Filtrar archivos y limitar el ancho de banda

Excluye lo que no necesitas guardar con --exclude. Los patrones son relativos al directorio de origen y ** coincide con cualquier número de niveles:

sudo rclone sync /var/www s3backup:your_bucket/www \
  --exclude '**/cache/**' \
  --exclude '**/node_modules/**' \
  --exclude '*.log' \
  --dry-run

Si tienes muchas reglas, guárdalas en un archivo (una por línea) y pásalo con --exclude-from /etc/rclone-exclude.txt.

Para no saturar la conexión del servidor en horario laboral, limita el ancho de banda con --bwlimit. Este ejemplo limita a 10 MiB/s durante el día y quita el límite por la noche:

sudo rclone sync /var/www s3backup:your_bucket/www --bwlimit "08:00,10M 23:00,off"

Con muchos archivos pequeños, subir el número de transferencias en paralelo (--transfers 8, por defecto 4) acelera la sincronización.

Paso 5: Cifrar los datos antes de subirlos (opcional)

El remoto crypt envuelve otro remoto y cifra el contenido y los nombres de archivo en tu servidor, de modo que el proveedor solo ve datos cifrados. Créalo con el asistente:

sudo rclone config

Elige n (nuevo remoto), llámalo cifrado, selecciona el tipo crypt y, cuando pregunte por el remoto a envolver, escribe s3backup:your_bucket/cifrado. Acepta el cifrado de nombres por defecto (standard) y deja que rclone genere una contraseña y una sal aleatorias o introduce las tuyas.

Sube una prueba a través del remoto cifrado y compara cómo se ve desde cada lado:

sudo rclone copy /etc/hostname cifrado:
sudo rclone ls cifrado:
sudo rclone ls s3backup:your_bucket/cifrado
       12 hostname
       60 q8l1v0kf4oa3b5l7d2iat6ckcg

A través de cifrado: ves el archivo original; en el bucket solo existe un nombre y contenido cifrados.

Paso 6: Verificar la copia

rclone check compara origen y destino por tamaño y hash, sin transferir nada:

sudo rclone check /var/www s3backup:your_bucket/www --exclude '**/cache/**' --exclude '**/node_modules/**' --exclude '*.log'
2026/09/25 10:41:03 NOTICE: S3 bucket your_bucket path www: 0 differences found
2026/09/25 10:41:03 NOTICE: S3 bucket your_bucket path www: 1532 matching files

Usa los mismos filtros que en la sincronización para que los archivos excluidos no aparezcan como diferencias. En remotos crypt, usa rclone cryptcheck en lugar de check, porque los hashes del proveedor corresponden al contenido cifrado.

Para restaurar, invierte origen y destino, primero en un directorio temporal:

sudo rclone copy s3backup:your_bucket/www /srv/restore/www -P

Paso 7: Automatizar la sincronización con systemd

Crea un script pequeño para la copia, de modo que la fecha de --backup-dir y los filtros vivan en un único sitio:

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

REMOTE="s3backup:your_bucket"
STAMP="$(date +%F)"

rclone sync /var/www "${REMOTE}/www" \
  --backup-dir "${REMOTE}/archive/${STAMP}/www" \
  --exclude '**/cache/**' \
  --exclude '**/node_modules/**' \
  --exclude '*.log' \
  --log-level INFO

rclone sync /etc "${REMOTE}/etc" \
  --backup-dir "${REMOTE}/archive/${STAMP}/etc" \
  --log-level INFO
sudo chmod 750 /usr/local/sbin/rclone-backup.sh
sudo /usr/local/sbin/rclone-backup.sh

Crea el servicio. La salida de rclone va al journal, así que no necesitas un archivo de log aparte:

sudo nano /etc/systemd/system/rclone-backup.service
[Unit]
Description=Sincronización de copias con rclone
Wants=network-online.target
After=network-online.target

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

Y el temporizador diario a las 02:30:

sudo nano /etc/systemd/system/rclone-backup.timer
[Unit]
Description=Ejecuta rclone-backup cada noche

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

[Install]
WantedBy=timers.target

Actívalo y lanza una ejecución de prueba:

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-backup.timer
sudo systemctl start rclone-backup.service
journalctl -u rclone-backup.service -n 20 --no-pager
Sep 25 10:52:40 web01 rclone-backup.sh[4121]: 2026/09/25 10:52:40 INFO  : html/index.html: Copied (replaced existing)
Sep 25 10:52:43 web01 systemd[1]: rclone-backup.service: Deactivated successfully.

Comprueba la próxima ejecución con systemctl list-timers rclone-backup.timer. Si el servicio falla, systemctl status rclone-backup.service mostrará failed y el journal indicará el motivo.

El directorio archive/ crecerá con el tiempo. La forma más sencilla de limpiarlo es una regla de ciclo de vida en el bucket de tu proveedor (por ejemplo, borrar objetos con prefijo archive/ tras 30 días). También puedes hacerlo con rclone: sudo rclone delete s3backup:your_bucket/archive --min-age 30d --rmdirs.

Solución de problemas

  • AccessDenied o SignatureDoesNotMatch: las claves o el endpoint son incorrectos, o la clave no tiene permisos sobre el bucket. Revisa el remoto con sudo rclone config show s3backup.
  • didn't find section in config file al usar sudo rclone: configuraste el remoto sin sudo, así que está en ~/.config/rclone/rclone.conf de tu usuario y no en el de root. Crea el remoto de nuevo con sudo o pasa --config /ruta/rclone.conf.
  • La sincronización vuelve a subir todo cada vez: algunos proveedores no conservan la fecha de modificación. Prueba con --checksum para comparar por hash en lugar de por fecha y tamaño.
  • sync ha borrado archivos por error: si usabas --backup-dir, recupéralos desde archive/<fecha>/ con rclone copy.

Conclusión

Tienes rclone conectado a un almacenamiento S3, una sincronización diaria de /var/www y /etc que conserva los archivos borrados o sobrescritos, y la opción de cifrarlo todo antes de que salga del servidor. Como siguientes pasos, combina rclone con copias locales en .tar.gz o volcados de base de datos, añade un segundo remoto en otro proveedor y prueba periódicamente la restauración de los datos.