En corto
| |
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ón | Compara | Copia el archivo si… | Cuándo |
|---|---|---|---|
| (por defecto) | tamaño + mtime | difiere cualquiera de los dos | Casi siempre |
--size-only | tamaño | el tamaño difiere | Las fechas no son de fiar (restauraciones, FAT, touch masivos) y aceptas perder cambios que no cambian el tamaño |
--checksum / -c | tamaño + checksum | el tamaño o el contenido difieren; ignora la fecha | Verificar integridad; builds que reinician fechas a 1970 |
--ignore-times / -I | nada | siempre | Forzar 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:
--partialconserva el archivo a medias. Mejor--partial-dir=.rsync-partial: lo guarda en un subdirectorio y el destino nunca expone un archivo truncado.--append-verifyretoma 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).--appenda secas, sin verificación, no lo uses.--inplaceescribe directamente sobre el archivo destino en vez de un temporal másrename. 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.
| |
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
| |
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
| |
-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;origencreadestino/origen/. --deletecon la ruta equivocada vacía el destino. Siempre-nprimero.--append-verifysobre archivos que cambian por el medio (bases de datos, discos de VM en uso) verifica, falla y reenvía entero cada vez; ahí--partial --inplacesin append.-zcomprime en vuelo: bien para texto, inútil para vídeos, ISOs, dumps.gzo imágenes de VM ya comprimidas.- macOS como origen:
--iconv=utf-8-mac,utf-8convierte los nombres de NFD a NFC en vuelo; sin eso, las tildes llegan “raras” a Linux (caso Nextcloud). - Hard links se pierden con
--inplacesi el archivo se reescribe; usa-Hsin--inplacecuando importen.