rclone sync o rclone copy: qué pasa si el origen se vacía por error
con el origen vacío, rclone sync dejó el destino sin ficheros y copy no borró nada; --max-delete 2 frenó el borrado a 2 de 5 ficheros y salió con código 7.
Contenido
Este artículo no lleva enlaces de afiliado.
Mucha gente usa rclone sync para "hacer la copia en la nube". Funciona hasta el día en que el origen está vacío por un error (un disco que no se monta, una ruta mal escrita). Esta prueba muestra qué pasa en ese caso y cómo limitar el daño.
Qué se probó
Prueba del 2026-10-19 con rclone v1.60.1, dos directorios locales como "nube" y ficheros sintéticos. Script completo al final del artículo. No se probaron proveedores remotos con versionado, --immutable ni --check-first.
1. Borrar un fichero en el origen
Con tres ficheros en el origen, se copian con rclone sync a un destino y con rclone copy a otro. Se borra f1.txt en el origen y se repite.
sync: el destino queda conf2.txtyf3.txt. El fichero borrado desaparece también de la copia.copy: el destino conservaf1.txt,f2.txtyf3.txt.
sync hace que el destino sea idéntico al origen, borrados incluidos. Esto es lo esperado, pero significa que no es una copia de seguridad: es un espejo.
2. El origen aparece vacío
Se vacía el origen y se lanza la orden.
rclone sync --dry-run -vavisa con "Skipped delete" para los 2 ficheros y resume "Deleted: 2 (files)". Es decir, el simulacro lo anuncia.rclone syncreal: el destino queda con 0 ficheros.rclone copyreal: el destino sigue con 3 ficheros.
Con sync y un origen vacío, la copia desaparece sin ningún error.
3. --backup-dir: lo borrado va a otra carpeta
rclone sync origen destino --backup-dir papelera mueve los ficheros que sync iba a borrar o sobrescribir a papelera. En la prueba, g1.txt terminó en la papelera en lugar de desaparecer. La carpeta de papelera debe estar fuera del destino y en el mismo remoto.
4. --max-delete: un límite de borrados
Con 5 ficheros en el destino y el origen vacío, rclone sync --max-delete 2 borró 2, dejó 3 y terminó con código de salida 7. Un script de copias puede detectar ese código y avisar en lugar de seguir.
Recomendación
- Para copias de seguridad, usa
copy, osynccon--backup-diry--max-delete. - Lanza siempre primero
--dry-runcuando cambies rutas. - Comprueba el código de salida del script (7 indica que se alcanzó el límite de borrados).
Relacionado: restic con rclone en la nube y cifrado con rclone crypt.
Script completo
#!/bin/bash
# rclone sync vs copy: what happens to files deleted at the source, and to a source that is empty by mistake.
# Usage: test-rclone-sync-vs-copy.sh WORKDIR. Synthetic data, local directory as the "cloud".
set -e
W=$1; rm -rf "$W"; mkdir -p "$W/src" "$W/sync" "$W/copy"
for i in 1 2 3; do echo "contenido $i" > "$W/src/f$i.txt"; done
rclone sync "$W/src" "$W/sync"; rclone copy "$W/src" "$W/copy"
echo "== borro f1 en origen y repito"
rm "$W/src/f1.txt"
rclone sync "$W/src" "$W/sync"; rclone copy "$W/src" "$W/copy"
echo "sync:"; ls "$W/sync"; echo "copy:"; ls "$W/copy"
echo "== origen vaciado por error (p. ej. disco no montado)"
rm -f "$W/src"/*
echo "-- sync --dry-run"; rclone sync "$W/src" "$W/sync" --dry-run -v 2>&1 | grep -E "Skipped delete|NOTICE|Deleted" | head
echo "-- sync real"; rclone sync "$W/src" "$W/sync" 2>&1 | tail -2; echo "sync tras vaciar:"; ls "$W/sync" | wc -l
echo "-- copy real"; rclone copy "$W/src" "$W/copy"; echo "copy tras vaciar:"; ls "$W/copy" | wc -l
echo "== sync --backup-dir"
for i in 1 2; do echo "v$i" > "$W/src/g$i.txt"; done; rclone sync "$W/src" "$W/sync"
rm "$W/src/g1.txt"; rclone sync "$W/src" "$W/sync" --backup-dir "$W/papelera"
echo "papelera:"; ls "$W/papelera"
echo "== sync --max-delete 2 con 5 ficheros en destino y origen vacío"
mkdir -p "$W/m/a" "$W/m/b"; for i in 1 2 3 4 5; do echo $i > "$W/m/b/f$i"; done
set +e; rclone sync "$W/m/a" "$W/m/b" --max-delete 2 >/dev/null 2>&1; echo "código de salida: $?"; set -e
echo "ficheros que quedan en destino: $(ls "$W/m/b" | wc -l)"