Il modo più veloce per copiare una cartella che contiene molti file tramite SSH


13

Qual è il modo migliore per duplicare i file sul server tramite ssh?

Nel mio caso: sto parlando di duplicare il negozio di Magento. (15000 file ~ 50 MB)

cp -a source destination

Sta impiegando ore ... (nel mio caso il server è 2.4 Xeon, 2 GB di RAM)

Risposte:


18

Una sola parola: rsync.

Si noti che se si utilizza un collegamento lento o il server è sotto carico, lo strumento utilizzato per la copia non sarà il collo di bottiglia e qualsiasi modo di copiare sarà comunque lento.

Ciò dovrebbe fornire l'utilizzo di base per la copia tra il computer locale e il server remoto: http://oreilly.com/pub/h/38

Per copiare dal computer locale a un server remoto (è necessario sostituire i percorsi, il nome utente e l'indirizzo host, ovviamente):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a archivio
  • -v verboso
  • -z comprimere
  • -e ssh "usa un tunnel SSH"

Per copiare nell'altra direzione, cambia i percorsi (il primo è da , il secondo è a ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

Ma rsync è utile anche per copiare cose sullo stesso server:

rsync -av /path-to/copy/from /path_to/copy/to

2
Si noti che @Piskvor ha lasciato -zfuori l' opzione per la copia locale poiché aggiunge un sovraccarico non necessario. IMHO, dovresti usarlo solo -zquando usi rsync attraverso un collegamento di rete lento. Se si copiano grandi quantità di dati su 100Base-T, si potrebbe andare bene anche senza -z. Con una connessione di rete veloce, l'utilizzo della compressione può agganciare la CPU e far morire di fame altri processi.
tomlogic

@tomlogic: buon punto - in altre parole, non utilizzare -zper la copia LAN o la copia all'interno di una macchina; prova con e senza -zper la copia su Internet (l'una o l'altra potrebbe essere più veloce, a seconda di molte cose).
Piskvor lasciò l'edificio il

1
Tralascerei anche la compressione se sai che i tuoi file sono già compressi, come la sincronizzazione di un albero di cartelle pieno di file JPEG poiché non c'è nulla da guadagnare.
interruzione di riga

Nota: -e sshora è predefinito per gli host remoti, quindi non è necessario passare esplicitamente l'opzione.
Piskvor lasciò l'edificio il

3

Un'altra parola: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Per le offerte one-shot, scp è utile. Se sono molti file, rsync è una buona idea. Se una connessione viene interrotta, rsync può riprendere da dove era stata interrotta.

Sapevo che rsync aveva la compressione ( -z) e ho appena appreso che anche scp ( -C).


Bene, IIRC utilizzano entrambi gli algoritmi di compressione di SSH, almeno per le operazioni di rete.
Piskvor lasciò l'edificio il

0

Nella tua configurazione, probabilmente rsync è abbastanza ... ma ad esempio, se ci sono molti file di piccole dimensioni, potrebbe essere più veloce eseguire il tar dei file prima di trasferirli, quindi tramite rsync. Questo perché trasferire il proprietario, i timestamp, le autorizzazioni è talvolta più pesante del file stesso se il file è piccolo. Tar unirà tutte quelle informazioni in un file e rsync copierà blocchi più grandi.

O ancora meglio, se non è necessaria alcuna sicurezza, utilizzare tar e nc:

Sulla destinazione, preparare un demone ricevente, decomprimere e decomprimere:

nc -l -p 12345 | pigz -d | tar xvf - 

Sulla sorgente, tar tutto, comprimere in parallelo e inviarlo alla destinazione:

tar cvf - ./ | pigz | nc host 12345
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.