Il modo più semplice per il trasferimento rapido di file tra server Linux?


16

Devo trasferire file da un server CentOS a un altro. Trasferirà file da 5 MB ogni 10 minuti circa. Non è necessaria la crittografia.

Cosa è stato facile per un rapido trasferimento di file?

C'è qualcosa di più semplice di ftp?

Grazie!


1
Ho fiducia che il catrame su netcat trionferà ... heh heh ...: serverfault.com/questions/18125/…
Evan Anderson,

Dal momento che non ho bisogno di crittografia ma ho bisogno di velocità, preferisco rsync.
Alex L

Ho appena appreso che i trasferimenti http non hanno molte spese generali, quindi forse potrei semplicemente usarlo.
Alex L,

Non modificare una risposta alla tua domanda, pubblicala invece come risposta. Tornato alla situazione precedente.
HopelessN00b,

Risposte:


25

rsync

Userei rsync prima di usare ftp o tftp.

Più opzioni e (nella mia esperienza) trasferimento più affidabile.


1
Ho anche scoperto che rsync in genere ottiene un throughput più elevato rispetto a qualsiasi altra cosa (scp, cifs, nfs)
Ophidian,

che dire dei trasferimenti http?
Alex L

@Ophidian Intendi usare rsync come demone? Altrimenti come può essere più veloce di scp, poiché entrambi usano ssh e c'è la crittografia.
Balki,

@balki Sì, il demone rsync. Non è particolarmente loquace, fa un buon lavoro di alimentazione dei dati dal disco sulla linea e fa il minimo lavoro necessario per completare la richiesta (ad esempio applica le differenze per i file di testo).
Ofide

21

tar over ssh va bene, ma tar over TCP via netcat è il più basso possibile! Se questa è una cosa una tantum, provaci:

Sul ricevitore:

nc -l -p 8989 | tar x

Sul mittente:

tar cf - /source-path | nc (receiving host ip address) 8989

Se questo è qualcosa che farai regolarmente, probabilmente userò rsync.


+1 per netcat, il coltellino svizzero
chmeee

Lo stesso per non aver letto Evan. Hahaha! In realtà non è una cosa sola. Ha detto che trasferirà file da 5 MB ogni 10 minuti circa. Forse l'invio tramite codice Morse sarebbe una buona alternativa? ;-) (nota: scherzo privato tra Evan e me)
KPWINC,

8

Due persone hanno menzionato tar over ssh, ma non hanno detto come farlo. Per la cronaca, la procedura di base è eseguire:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Oppure, se si desidera iniziare i trasferimenti dall'estremità ricevente:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

Il vantaggio di farlo in questo modo rispetto alla soluzione netcat di Evan è che il tutto può essere avviato da un computer; non è necessario coordinare due invocazioni netcat. Se è necessario eseguirlo automaticamente, è possibile impostare una chiave ssh che consenta di effettuare connessioni senza passphrase e utilizzare quella chiave per queste connessioni.

ssh ha un'opzione -C per comprimere il suo flusso di dati, oppure puoi usare la capacità di compressione integrata di GNU tar:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync è un'altra opzione, ma il suo punto di forza è nell'aggiornamento dei file che già esistono sul lato ricevente. Ho trovato che è più lento di scp o tar / ssh quando lo si utilizza per trasferire file che non esistono già dall'altra parte.


1
+1 Cosa, vuoi dire, non tutti sanno intuitivamente come fare tar su ssh? Strano. :)
caos,

tar, di per sé, non è affidabile - non esiste un controllo di integrità, tuttavia con SSH (TLS) si ottiene l'integrità grazie alla capacità di TLS di rilevare in volo le modifiche ai dati. Rsync è una scelta migliore e Rsync in quanto farà un migliore controllo dell'integrità senza crittografia; l'OP ha dichiarato che la crittografia non era necessaria.
Kilo,

Di quale controllo di integrità ha bisogno tar? I livelli TCP e ssh forniscono un trasporto dati affidabile. Se stai affermando che il catrame stesso può avere dei bug, devi trattare rsync allo stesso modo. In effetti ho avuto i trasferimenti rsync bloccati su di me a causa di problemi di protocollo. Non ricordo di aver mai fatto una pipeline tar / untar.
Kenster,

6

Vorrei usare scpo tarpiù ssh, onestamente. La crittografia rallenta le cose, ma la facilità di installazione e utilizzo, l'affidabilità e (soggettivamente, ovviamente) la familiarità mi rendono disposto a prendere il colpo, a meno che non abbia davvero bisogno di quella velocità.

Puoi velocizzare il trasferimento ssh dicendogli di usare anche una cifra più veloce di quella predefinita. L'impostazione predefinita è di solito 3dese di solito puoi farlo -c des, quindi ovviamente sarà più veloce, ed -c blowfishè rappresentato altrettanto velocemente, anche se non l'ho provato esattamente.

(Ai tempi di SSHv1, si poteva fare spesso -c none, ma immagino che qualcuno abbia deciso che era un juju cattivo.)


4

Se devi passare attraverso scp / ssh, i miei esperimenti mostrano che la cifra più veloce abilitata di default in questi giorni è RC4. Si specifica la cifra tramite ' -c arcfour ' nel comando ssh / scp:

per copia iniziale:

  • scp -c arcfour -r foo/ desthost:/destdir

per aggiornamenti:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir

3

Rsync è una buona strada da percorrere perché se ti ritrovi a trasferire gli stessi file più di una volta, questo accelera la copia, come mostrato con questa citazione dalla pagina man.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.

2

FTP è piuttosto semplice, ma un modo ancora più semplice potrebbe essere quello di creare una condivisione NFS su una macchina e montarla sull'altra. Quindi la copia dei file consisterà nel fare un cp da una directory all'altra.


a seconda delle esigenze. Non userei NFS su Internet per esempio.
Kyle Hodgson,

1
Buon punto. In tal caso, consiglierei rsync in quanto può riprendere da dove era interrotto se interrotto. Anche perché trasferisce solo il delta tra l'origine e la destinazione.
Swoogan,

la domanda era molto generica, mi piace il soulution pubblicato da Swoogan, in particolare quell'autore ha menzionato la necessità della soluzione più semplice e non richiede la crittografia
integratorIT

2

Se vuoi la velocità puoi usare netcat e tar. Sarà più veloce di ssh, rsync o scp su una rete locale in cui la crittografia non è un problema. Google "netcat tar".

DestinationServer

nc -l -p 7878 | tar -C /target/dir -xzf -

SourceServer

tar -cz /source/dir | nc DestinationServer 7878

Ciò ovviamente richiede che netcat sia effettivamente installato. Google "netcat tar" per maggiori informazioni.


1

Credo che tu abbia già risolto il tuo problema ma nel caso in cui il tuo ssh funzioni su un'altra porta (non sulla porta standard 22) puoi usare questo

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / root@192.168.1.2: / remote / dir

Nota: - sostituire XXXXX con il numero di porta - sostituire 192.16.1.2 con l'IP del server remoto corretto


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.