En corto

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Reanudar un archivo enorme (imagen de VM, dump) sin empezar de cero
rsync -av --partial --append-verify --inplace --progress origen/ host:/destino/

# Solo el árbol de directorios, sin archivos
rsync -a -f'+ */' -f'- *' origen/ destino/

# Verificar una copia terminada sin copiar nada
rsync -avn --checksum --itemize-changes origen/ host:/destino/

# Otro puerto SSH
rsync -av -e 'ssh -p 2222' origen/ host:/destino/

Cómo decide rsync qué copiar

Antes de mover un byte, rsync compara cada archivo con su copia en destino usando hasta tres cosas: tamaño, fecha de modificación y checksum del contenido. Por defecto usa las dos primeras (un stat, gratis); la tercera obliga a leer el archivo entero en los dos lados.

OpciónComparaCopia el archivo si…Cuándo
(por defecto)tamaño + mtimedifiere cualquiera de los dosCasi siempre
--size-onlytamañoel tamaño difiereLas fechas no son de fiar (restauraciones, FAT, touch masivos) y aceptas perder cambios que no cambian el tamaño
--checksum / -ctamaño + checksumel tamaño o el contenido difieren; ignora la fechaVerificar integridad; builds que reinician fechas a 1970
--ignore-times / -InadasiempreForzar la recopia de todo

--checksum solo calcula el hash cuando el tamaño coincide, pero aun así lee cada archivo completo: sobre terabytes es lento, no es “más seguro por defecto”.

Reanudar transferencias grandes

Sin opciones, si la conexión se corta a mitad de un archivo de 200 GB, rsync borra el trozo y la siguiente pasada empieza de cero. Tres opciones cambian eso:

  • --partial conserva el archivo a medias. Mejor --partial-dir=.rsync-partial: lo guarda en un subdirectorio y el destino nunca expone un archivo truncado.
  • --append-verify retoma a partir del tamaño que ya tiene el destino, dando por bueno lo que hay, y al terminar verifica el checksum del archivo completo; si no cuadra, lo reenvía entero. Sirve para archivos que se escriben de forma secuencial (una imagen que se está copiando, un dump, un vídeo). --append a secas, sin verificación, no lo uses.
  • --inplace escribe directamente sobre el archivo destino en vez de un temporal más rename. Lo necesita --append-verify, ahorra el doble de espacio con archivos enormes, y en destinos con snapshots (ZFS, btrfs) solo reescribe los bloques que cambiaron, así que el snapshot siguiente es pequeño. A cambio, mientras dura la copia el archivo destino es inconsistente: no lo uses sobre algo que se esté sirviendo.
1
2
3
rsync -av --partial-dir=.rsync-partial --append-verify --inplace --progress \
  -e 'ssh -o Compression=no -c aes128-gcm@openssh.com' \
  /var/lib/vz/dump/ backup-host:/backups/vz/

Sobre SSH, el cifrado es el cuello de botella en LAN: aes128-gcm@openssh.com con AES-NI, o chacha20-poly1305@openssh.com en CPUs sin AES-NI, y Compression=no (comprimir datos ya comprimidos solo quema CPU). --bwlimit=50m si compartes el enlace.

Solo la estructura de directorios

1
rsync -a -f'+ */' -f'- *' origen/ destino/

Los filtros se evalúan en orden: + */ incluye todo lo que sea directorio; - * excluye el resto. Con -a conserva permisos y dueños. Útil para preparar un destino, para replicar un esqueleto en otro storage o para ver la forma de un dataset sin arrastrar los datos.

Verificar al terminar

1
rsync -avn --checksum --itemize-changes origen/ host:/destino/

-n no copia; --itemize-changes imprime una línea por diferencia. Salida vacía es copia idéntica. Sustituye a recorrer los dos lados con md5sum a mano y se encarga de la comparación por ti.

Trampas

  • La barra final cambia el resultado: origen/ copia el contenido; origen crea destino/origen/.
  • --delete con la ruta equivocada vacía el destino. Siempre -n primero.
  • --append-verify sobre archivos que cambian por el medio (bases de datos, discos de VM en uso) verifica, falla y reenvía entero cada vez; ahí --partial --inplace sin append.
  • -z comprime en vuelo: bien para texto, inútil para vídeos, ISOs, dumps .gz o imágenes de VM ya comprimidas.
  • macOS como origen: --iconv=utf-8-mac,utf-8 convierte los nombres de NFD a NFC en vuelo; sin eso, las tildes llegan “raras” a Linux (caso Nextcloud).
  • Hard links se pierden con --inplace si el archivo se reescribe; usa -H sin --inplace cuando importen.