In che modo `scp` differisce da` rsync`?


241

Un articolo sulla configurazione di Ghost blogging dice di usare scpper copiare dal mio computer locale su un server remoto:

scp -r ghost-0.3 root@*your-server-ip*:~/

Tuttavia, Railscast 339: Chef Solo Basics usa scpper copiare nella direzione opposta (dal server remoto al computer locale):

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

Nello stesso Railscast, quando l'autore vuole copiare i file sul server remoto (stessa direzione del primo esempio), usa rsync:

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

Perché usare il rsynccomando se scpverrà copiato in entrambe le direzioni? In cosa scpdifferisce da rsync?


oltre ad essere più semplice e sempre crittografato, nessuno ha sottolineato nulla che scp possa fare meglio di "rsync -aA". preferisco "rsync -aAX --delete source dest". verifica bsync per la sincronizzazione bidirezionale.
Tomachi,

Risposte:


345

La principale differenza tra questi strumenti è il modo in cui copiano i file.

scpfondamentalmente legge il file sorgente e lo scrive nella destinazione. Esegue una copia lineare semplice, localmente o su una rete.

rsynccopia anche i file localmente o su una rete. Impiega uno speciale algoritmo di trasferimento delta e alcune ottimizzazioni per rendere l'operazione molto più veloce. Considera la chiamata.

rsync A host:B
  • rsynccontrollerà le dimensioni dei file e i timestamp di modifica di A e B e salterà qualsiasi ulteriore elaborazione se corrispondono.

  • Se il file di destinazione B esiste già, l'algoritmo di trasferimento delta assicurerà che solo le differenze tra A e B vengano inviate tramite il filo.

  • rsyncscriverà i dati in un file temporaneo T , e quindi sostituire il file di destinazione B con T per rendere l'aspetto di aggiornamento "atomica" per i processi che potrebbero utilizzare B .

Un'altra differenza tra loro riguarda l'invocazione. rsyncha una pletora di opzioni da riga di comando, che consentono all'utente di ottimizzare il suo comportamento. Supporta regole di filtro complesse, viene eseguito in modalità batch, modalità demone, ecc. scpHa solo pochi switch.

In sintesi, utilizzare scpper le attività quotidiane. Comandi digitati di tanto in tanto sulla shell interattiva. È più semplice da usare e in quei casi le rsyncottimizzazioni non saranno di grande aiuto.

Per attività ricorrenti, come cronlavori, utilizzare rsync. Come accennato, su più invocazioni sfrutterà i dati già trasferiti, eseguendo molto rapidamente e risparmiando sulle risorse. È uno strumento eccellente per mantenere sincronizzate due directory su una rete.

Inoltre, quando si ha a che fare con file di grandi dimensioni, utilizzare rsynccon l' -Popzione. Se il trasferimento viene interrotto, è possibile riprenderlo nel punto in cui si è interrotto emettendo nuovamente il comando. Vedi la risposta di Sid Kshatriya .


14
Dici di usare scp per le tue attività quotidiane. Dalla tua spiegazione e dal PO, sembra che l'interfaccia per i due strumenti quando usati senza opzioni sia identica. Se rsync ha un'implementazione superiore e le interfacce sono le stesse, perché non usare sempre rsync?
Alex,

5
La loro interfaccia non è la stessa, anche senza opzioni. Rsync ha un'interpretazione speciale di una barra finale sull'argomento source (sincronizza la directory stessa rispetto al suo contenuto). Potrebbe avere altri gotcha, non ne sono sicuro.
Rafa,

2
Inoltre, immagino scpsia più probabile che sia disponibile su un sistema simile a Unix, quindi di tanto in tanto eviti un fastidioso "comando non trovato".
Rafa,

2
@ erikb85 rsync ha il flag -P che mostrerà una barra di avanzamento e consentirà la ripresa da un trasferimento parzialmente completato. digitalocean.com/community/tutorials/…
Ben

1
Un'altra differenza di interfaccia tra scpe rsync: rsync -arispetto scp -rpa preservare i tempi di modifica e le autorizzazioni.
Rafa,

71

rysnc può essere utile per funzionare su connessioni lente e inaffidabili. Quindi, se il download si interrompe nel mezzo di un file di grandi dimensioni, rysnc sarà in grado di continuare da dove era stato interrotto quando richiamato nuovamente.

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

L'opzione -P conserva i file parzialmente scaricati e mostra anche i progressi.

Come al solito controlla man rsync


32

Differenza b / n scp e rsync su parametro diverso

1. Prestazioni rispetto alla latenza

  • scp : scp è relativamente meno ottimizzato e veloce

  • rsync : rsync è relativamente più ottimizzato e veloce

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

2. Gestione delle interruzioni

  • scp : lo strumento da riga di comando scp non può riprendere i download interrotti da connessioni di rete perse

  • rsync: Se la precedente sessione rsync viene interrotta, puoi riprenderla tutte le volte che vuoi digitando lo stesso comando. rsync riavvierà automaticamente il trasferimento da dove era stato interrotto.

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

3. Esempio di 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 

L' -Popzione è uguale a quella che --partial --progressconsente a rsync di funzionare con file parzialmente scaricati. L' --rsh=sshopzione dice a rsync di usare ssh come shell remota.

4. Sicurezza:

scp è più sicuro. Devi usarlo rsync --rsh=sshper renderlo sicuro come SCP.

man document per saperne di più:

grafico delle prestazioni


Grazie per questa nuova risposta, soprattutto per la parte relativa alla sicurezza.
Zhihong,

su molti sistemi ssh è usato di default. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
Informazioni sulla sicurezza, dalle note sulla versione di 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 delle principali funzionalità di rsyncover scp(oltre all'algoritmo delta e alla crittografia se usato con w / ssh) è che verifica automaticamente se il file trasferito è stato trasferito correttamente. Scp non lo farà, il che a volte potrebbe causare danni durante il trasferimento di file di dimensioni maggiori. Quindi in generale rsync è una copia con garanzia .

Le manpage di Centos menzionano questo alla fine della --checksumdescrizione dell'opzione:

Nota che rsync verifica sempre che ogni file trasferito sia stato correttamente ricostruito sul lato ricevente controllando un checksum di tutto il file generato quando il file viene trasferito, ma che la verifica automatica dopo il trasferimento non ha nulla a che fare con questa opzione precedente- the-transfer "Questo file deve essere aggiornato?" dai un'occhiata.


5

C'è una distinzione per me che scpè sempre crittografata con ssh (shell sicura), mentre rsyncnon è necessariamente crittografata. Più specificamente,rsync non esegue alcuna crittografia da solo; è ancora in grado di utilizzare altri meccanismi (ad esempio ssh) per eseguire la crittografia.

Oltre alla sicurezza, anche la crittografia ha un impatto importante sulla velocità di trasferimento e sull'overhead della CPU. (La mia esperienza è che rsyncpuò essere significativamente più veloce di scp.)

Dai un'occhiata a questo post per quando rsyncè attiva la crittografia.


1

scp è il migliore per un file.
OPPURE una combinazione di tar& compressione per insiemi di dati più piccoli come alberi di codice sorgente con risorse di piccole dimensioni (ad esempio : immagini, sqlite ecc .).


Tuttavia , quando inizi a gestire volumi più grandi, dì:

  • cartelle multimediali (40 GB)
  • backup del database (28 GB)
  • librerie mp3 (100 GB)

Diventa impraticabile costruire un file zip / tar.gz per trasferire con scp a questo punto fare ai limiti fisici del server ospitato.

Come esercizio, si può fare un po ' di ginnastica , come tubazioni tarin sshe riorientare i risultati in un remoto file. (risparmiando la necessità di creare uno scambio o un clone temporaneo aka zip o tar.gz)

Tuttavia ,

rsync semplifica questo processo e consente di trasferire i dati senza consumare spazio su disco aggiuntivo.

Inoltre ,

Gli aggiornamenti continui (cron?) Utilizzano modifiche minime rispetto alle copie clonate complete per accelerare nel tempo grandi migrazioni di dati.

tl; dr
scp == piccola scala (con spazio per creare file compressi sulla stessa unità)
rsync== grande scala (con la necessità di eseguire il backup di dati di grandi dimensioni e senza spazio disponibile)


-1

è meglio pensare in un contesto pratico. Nel nostro team, usiamo rsync -aPper sostituire un host cassandra difettoso nel nostro cluster. Non possiamo farlo con scp (conservazione lenta e senza progressi).


Non portare davvero nulla di non ancora menzionato nelle altre risposte. Inoltre non dovremmo nemmeno rispondere a domande fuori tema.
Dan Cornilescu,

1
@DanCornilescu descrive un caso d'uso in uno scenario reale, che rende facile per gli altri capire la differenza. Non vedo altre risposte simili
del bao,

2
Vedi -P spiegate e le note relative alla lentezza / velocità nelle risposte di Sid e Rafa.
Dan Cornilescu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.