¿Cómo difiere `scp` de` rsync`?


241

Un artículo sobre la configuración de los blogs de Ghost dice usar scppara 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 utiliza scppara copiar en la dirección opuesta (desde el servidor remoto a la máquina local):

scp -r root@178.xxx.xxx.xxx:/var/chef .

En el mismo Railscast, cuando el autor quiere copiar archivos al servidor remoto (en la misma dirección que el primer ejemplo), usa rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef

¿Por qué usar el rsynccomando si scpcopiará en ambas direcciones? ¿Cómo scpdifiere de rsync?


Además de ser más simple y siempre encriptado, nadie ha señalado nada que scp pueda hacer mejor que "rsync -aA". prefiero "rsync -aAX --delete source dest". pago bsync para sincronización bidireccional.
Tomachi

Respuestas:


345

La principal diferencia entre estas herramientas es cómo copian los archivos.

scpbásicamente lee el archivo fuente y lo escribe en el destino. Realiza una copia lineal simple, localmente o sobre una red.

rsynctambién copia archivos localmente o en una red. Pero emplea un algoritmo especial de transferencia delta y algunas optimizaciones para que la operación sea mucho más rápida. Considera la llamada.

rsync A host:B
  • rsyncverificará los tamaños de los archivos y las marcas de tiempo de modificación de A y B , y omitirá cualquier procesamiento adicional si coinciden.

  • Si el archivo de destino B ya existe, el algoritmo de transferencia delta se asegurará de que solo las diferencias entre A y B se envíen por cable.

  • rsyncva a escribir los datos en un archivo temporal T , y luego vuelva a colocar el archivo de destino B con T para hacer la mirada de actualización "atómica" a los procesos que puedan estar utilizando B .

Otra diferencia entre ellos se refiere a la invocación. rsynctiene 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 demonio, etc. scptiene solo unos pocos interruptores.

En resumen, utilícelo scppara sus tareas diarias. Comandos que escribe de vez en cuando en su shell interactivo. Es más simple de usar, y en esos casos las rsyncoptimizaciones no ayudarán mucho.

Para tareas recurrentes, como crontrabajos, use rsync. Como se mencionó, en las invocaciones múltiples aprovechará los datos que ya se transfirieron, con un rendimiento muy rápido y ahorrando recursos. Es una excelente herramienta para mantener dos directorios sincronizados en una red.

Además, cuando se trata de archivos grandes, use rsynccon la -Popción. Si se interrumpe la transferencia, puede reanudarla donde se detuvo volviendo a emitir el comando. Ver la respuesta de Sid Kshatriya .


14
Dices que uses scp para tus tareas diarias. Según su explicación y el OP, parece que la interfaz para las dos herramientas cuando se usa sin opciones es idéntica. Si rsync tiene una implementación superior y las interfaces son las mismas, ¿por qué no usar siempre rsync?
Alex

55
Su interfaz no es la misma, incluso sin opciones. Rsync tiene una interpretación especial de una barra diagonal final en el argumento fuente (sincroniza el directorio en sí mismo con su contenido). Puede tener otras trampas, no estoy seguro.
Rafa

2
Además, supongo que scpes más probable que esté disponible en un sistema similar a Unix, por lo que evita un molesto "comando no encontrado" de vez en cuando.
Rafa

2
@ erikb85 rsync tiene el indicador -P que mostrará una barra de progreso y permitirá reanudar desde una transferencia parcialmente completada. digitalocean.com/community/tutorials/…
Ben

1
Otra diferencia de interfaz entre scpy rsync: rsync -aversus scp -rppara preservar los tiempos de modificación y los permisos.
Rafa

71

rysnc puede ser útil para ejecutarse en conexiones lentas y poco confiables. Entonces, si su descarga se interrumpe en medio de un archivo grande, rysnc podrá continuar desde donde lo dejó cuando se invoca nuevamente.

Utilizar rsync -vP username@host:/path/to/file .

La opción -P conserva los archivos descargados parcialmente y también muestra el progreso.

Como de costumbre comprobar man rsync


32

Diferencia b / w scp y rsync en diferentes parámetros

1. Rendimiento sobre latencia

  • scp : scp es relativamente menos optimiza y acelera

  • rsync : rsync es comparativamente más optimizado y rápido

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. Manejo de interrupciones

  • scp : la herramienta de línea de comando scp no puede reanudar descargas canceladas de conexiones de red perdidas

  • rsync: Si la sesión rsync anterior se interrumpe, puede reanudarla tantas veces como desee escribiendo el mismo comando. rsync reiniciará automáticamente la transferencia donde la dejó.

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3. Ejemplo de comando

scp

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

La -Popción es la misma que --partial --progresspermite que rsync funcione con archivos parcialmente descargados. La --rsh=sshopción le dice a rsync que use ssh como un shell remoto.

4. Seguridad:

scp es más seguro. Tienes que usar rsync --rsh=sshpara hacerlo tan seguro como scp.

documento man para saber más:

tabla de rendimiento


Gracias por esta nueva respuesta, especialmente por la parte de seguridad.
zhihong

En muchos sistemas, ssh se usa por defecto. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
Acerca de la seguridad, de las notas de la versión de openSSH 8.0 : The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
downtheroad

6

Una característica importante de rsyncover scp(además del algoritmo delta y el cifrado si se usa con ssh) es que verifica automáticamente si el archivo transferido se ha transferido correctamente. Scp no hará eso, lo que ocasionalmente podría resultar en corrupción al transferir archivos más grandes. Entonces, en general, rsync es una copia con garantía .

Las páginas de manual de Centos mencionan esto al final de la --checksumdescripción de la opción:

Tenga en cuenta que rsync siempre verifica que cada archivo transferido se haya reconstruido correctamente en el lado receptor al verificar una suma de verificación de todo el archivo que se genera a medida que se transfiere el archivo, pero esa verificación automática después de la transferencia no tiene nada que ver con esta opción antes: the-transfer "¿Es necesario actualizar este archivo?" cheque.


5

Hay una distinción para mí que scpsiempre está encriptada con ssh (shell seguro), mientras rsyncque no está necesariamente encriptada. Más específicamente, rsyncno realiza ningún cifrado por sí mismo; todavía es capaz de usar otros mecanismos (ssh, por ejemplo) para realizar el cifrado.

Además de la seguridad, el cifrado también tiene un gran impacto en su velocidad de transferencia, así como en la sobrecarga de la CPU. (Mi experiencia es que rsyncpuede ser significativamente más rápido que scp).

Mira esta publicación para saber cuándo rsynctiene el cifrado activado.


1

scp es mejor para un archivo.
O una combinación de tarcompresión para conjuntos de datos más pequeños, como árboles de código fuente con recursos pequeños ( es decir , imágenes, sqlite, etc. ).


Sin embargo , cuando comience a lidiar con volúmenes más grandes, diga:

  • carpetas multimedia (40 GB)
  • copias de seguridad de bases de datos (28 GB)
  • bibliotecas de mp3 (100 GB)

No es práctico construir un archivo zip / tar.gz para transferir con scp en este punto a los límites físicos del servidor alojado.

A modo de ejercicio, puede hacer algunas gimnasia tales como tuberías tarhacia sshy redirigir los resultados en una remota de archivos. (ahorrando la necesidad de construir un intercambio o clon temporal también conocido como zip o tar.gz)

Sin embargo ,

rsync simplifica este proceso y le permite transferir datos sin consumir espacio en disco adicional.

también ,

Las actualizaciones continuas (¿cron?) Usan cambios mínimos en comparación con las copias clonadas completas aceleran las migraciones de datos grandes con el tiempo.

tl; dr
scp == pequeña escala (con espacio para construir archivos comprimidos en la misma unidad)
rsync== gran escala (con la necesidad de hacer una copia de seguridad de datos grandes y no queda espacio)


-1

Es mejor pensar en un contexto práctico. En nuestro equipo, usamos rsync -aPpara reemplazar un host cassandra malo en nuestro clúster. No podemos hacer esto con scp (preservación lenta y sin progreso).


Realmente no traigo nada aún no mencionado en las otras respuestas. Además, ni siquiera deberíamos responder preguntas fuera del tema.
Dan Cornilescu

1
@DanCornilescu describe un caso de uso en un escenario real, lo que facilita que otros entiendan la diferencia. No veo ninguna otra respuesta similar
del bao

2
Ver -P explicado y notas relacionadas con la lentitud / velocidad en las respuestas de Sid y Rafa.
Dan Cornilescu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.