incremental - ¿Cómo se diferencia `scp` de` rsync`?
rsync linux (6)
Un artículo sobre la configuración de Ghost blogging dice que use scp
para copiar desde mi máquina local a un servidor remoto:
scp -r ghost-0.3 root@*your-server-ip*:~/
Sin embargo, Railscast 339: Chef Solo Basics usa scp
para copiar en la dirección opuesta (desde el servidor remoto al equipo local):
scp -r [email protected]:/var/chef .
En el mismo Railscast, cuando el autor quiere copiar archivos al servidor remoto (la misma dirección que el primer ejemplo), usa rsync
:
rsync -r . [email protected]:/var/chef
¿Por qué usar el comando rsync
si scp
copiará en ambas direcciones? ¿Cómo difiere scp
de rsync
?
La principal diferencia entre estas herramientas es cómo copian archivos.
scp
básicamente lee el archivo fuente y lo escribe en el destino. Realiza una copia lineal simple, localmente o en una red.
rsync
también copia archivos localmente o en una red. Pero emplea un algoritmo especial de transferencia delta y algunas optimizaciones para hacer que la operación sea mucho más rápida. Considera la llamada.
rsync A host:B
rsync
verificará los tamaños de los archivos y las marcas de tiempo de modificación de A y B , y omitirá cualquier procesamiento posterior si coinciden.Si el archivo de destino B ya existe, el algoritmo de transferencia delta se asegurará de que solo se envíen las diferencias entre A y B a través del cable.
rsync
escribirá datos en un archivo temporal T y luego reemplazará el archivo de destino B con T para que la actualización se vea "atómica" a los procesos que podrían estar utilizando B.
Otra diferencia entre ellos se refiere a la invocación. rsync
tiene una gran cantidad de opciones de línea de comandos, lo que permite al usuario ajustar su comportamiento. Admite reglas de filtro complejas, se ejecuta en modo por lotes, modo daemon, etc. scp
solo tiene unos pocos conmutadores.
En resumen, use scp
para sus tareas diarias. Comandos que escribe de vez en cuando en su caparazón interactivo. Es más fácil de usar, y en esos casos las optimizaciones de rsync
no ayudarán mucho.
Para tareas recurrentes, como trabajos cron
, use rsync
. Como se mencionó, en invocaciones múltiples aprovechará los datos ya transferidos, funcionando muy rápido y ahorrando en recursos. Es una excelente herramienta para mantener sincronizados dos directorios en una red.
Además, cuando se trata de archivos grandes, use rsync
con la opción -P
. Si la transferencia se interrumpe, puede reanudarla donde se detuvo al volver a emitir el comando. Ver la answer Sid Kshatriya.
Me distingue que scp
siempre está encriptado con ssh (shell seguro), mientras que rsync
no está necesariamente encriptado. Más específicamente, rsync
no realiza ningún cifrado por sí mismo; todavía es capaz de usar otros mecanismos (ssh por ejemplo) para realizar encriptación.
Además de la seguridad, el cifrado también tiene un gran impacto en la velocidad de transferencia, así como en la sobrecarga de la CPU. (Mi experiencia es que rsync
puede ser significativamente más rápido que scp
).
Echa un vistazo a esta post para ver cuándo rsync
tiene encriptación.
Una característica principal de rsync sobre scp (además del algoritmo delta) es que verifica automáticamente si el archivo transferido se ha transferido correctamente. Scp no hará eso, lo que de vez en cuando puede ocasionar daños al transferir archivos más grandes. Entonces, en general, rsync es una copia con garantía.
Consulte la nota de página de --checksum
(centos) al final de la descripción de la opción --checksum
:
Tenga en cuenta que rsync siempre verifica que cada archivo transferido se haya reconstruido correctamente en el lado de recepción comprobando una suma de comprobación de archivo que se genera cuando se transfiere el archivo, pero esa verificación automática posterior a la transferencia no tiene nada que ver con esta opción. la transferencia "¿Es necesario actualizar este archivo?".
es mejor pensar en un contexto práctico. En nuestro equipo, utilizamos rsync -aP
para reemplazar un host malo de cassandra en nuestro clúster. No podemos hacer esto con scp (conservación lenta y sin progreso).
rysnc puede ser útil para ejecutar en conexiones lentas y no confiables. Por lo tanto, si la descarga se cancela en medio de un archivo grande, rysnc podrá continuar desde donde se quedó cuando se vuelva a invocar.
Utilice rsync -vP username@host:/path/to/file .
La opción -P conserva los archivos parcialmente descargados y también muestra el progreso.
Como es habitual, compruebe man rsync
scp es mejor para un archivo.
O una combinación de tar
y compresión para conjuntos de datos más pequeños, como árboles de código fuente con pequeños recursos ( es decir , imágenes, sqlite, etc. ).
- carpetas multimedia (40 GB)
- copias de seguridad de la base de datos (28 GB)
- mp3otecas (100 GB)
Resulta poco práctico crear un archivo zip / tar.gz para transferir con scp en este punto a los límites físicos del servidor alojado.
Como ejercicio, puede hacer algo de gimnasia como piping tar
en ssh
y redirigir los resultados a un archivo remoto . (guardando la necesidad de construir un swap o clon temporal también conocido como zip o tar.gz)
Sin embargo ,
rsync simplifica este proceso y te permite transferir datos sin consumir ningún espacio de disco adicional.
Además ,
Las actualizaciones continuas (cron?) Usan cambios mínimos frente a las copias clonadas completas que aceleran las grandes migraciones de datos a lo largo del tiempo.
tl; dr
scp
== pequeña escala (con espacio para crear archivos comprimidos en la misma unidad)
rsync
== gran escala (con la necesidad de hacer copias de seguridad de datos grandes y sin espacio)