Schnellste Möglichkeit zum Kopieren von Ordnern mit vielen Dateien über SSH


13

Was ist der beste Weg, um Dateien auf dem Server über ssh zu duplizieren?

In meinem Fall: Ich spreche über das Duplizieren von Magento-Shop. (15000 Dateien ~ 50 MB)

cp -a source destination

Dauert Stunden ... (in meinem Fall Server ist 2,4 Xeon, 2 GB RAM)

Antworten:


18

Ein Wort: rsync.

Beachten Sie, dass das zum Kopieren verwendete Tool nicht der Flaschenhals ist, wenn Sie sich auf einer langsamen Verbindung befinden oder der Server stark ausgelastet ist.

Dies sollte Ihnen die grundlegende Verwendung zum Kopieren zwischen Ihrem lokalen Computer und dem Remote-Server ermöglichen: http://oreilly.com/pub/h/38

So kopieren Sie vom lokalen Computer auf einen Remoteserver (Sie müssen natürlich die Pfade, den Benutzernamen und die Hostadresse ersetzen):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a Archiv
  • -v wortreich
  • -z komprimieren
  • -e ssh "Verwenden Sie einen SSH-Tunnel"

Um in die andere Richtung zu kopieren, wechseln Sie die Pfade (erstens von , zweitens bis ):

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

Aber rsync ist auch nützlich, um Dinge auf demselben Server zu kopieren:

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

2
Beachten Sie, dass @Piskvor die -zOption für lokales Kopieren ausgelassen hat, da dies unnötigen Overhead verursacht. IMHO sollten Sie nur verwenden, -zwenn Sie rsync über eine langsame Netzwerkverbindung verwenden. Wenn Sie große Datenmengen über 100Base-T kopieren, ist dies möglicherweise kein Problem -z. Bei einer schnellen Netzwerkverbindung kann die Verwendung der Komprimierung die CPU blockieren und andere Prozesse blockieren.
Tomlogic

@tomlogic: Guter Punkt - mit anderen Worten, nicht -zzum Kopieren im LAN oder innerhalb eines Computers verwenden. Testen Sie mit und ohne -zfür das Kopieren über das Internet (der eine oder andere kann abhängig von vielen Dingen schneller sein).
Piskvor hat das Gebäude am

1
Ich würde auch die Komprimierung auslassen, wenn Sie wissen, dass Ihre Dateien bereits komprimiert sind, z.
Zeilenumbruch

Hinweis: Dies -e sshist jetzt die Standardeinstellung für Remote-Hosts, sodass die Option nicht explizit übergeben werden muss.
Piskvor hat das Gebäude

3

Ein anderes Wort: scp

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

Für One-Shot-Deals ist scp praktisch. Wenn es sich um viele Dateien handelt, ist rsync eine gute Idee. Wenn eine Verbindung getrennt wird, kann rsync dort weitermachen, wo sie aufgehört hat.

Ich wusste, dass rsync compression ( -z) hat, und habe gerade erfahren, dass scp auch dies tut ( -C).


Nun, IIRC verwenden beide die Kompressionsalgorithmen von SSH, zumindest für Netzwerkoperationen.
Piskvor hat das Gebäude am

0

In Ihrem Setup reicht wahrscheinlich rsync aus ... aber zum Beispiel, wenn es viele kleine Dateien gibt, ist es möglicherweise schneller, die Dateien zuerst zu tarieren, als sie zu übertragen, und dann per rsync. Dies liegt daran, dass das Übertragen von Besitzern, Zeitstempeln und Berechtigungen manchmal schwerer ist als die Datei selbst, wenn die Datei klein ist. Tar fügt alle diese Informationen in einer Datei zusammen und rsync kopiert größere Blöcke.

Oder noch besser, wenn keine Sicherheit benötigt wird, benutze tar und nc:

Bereiten Sie am Ziel einen empfangenden Daemon vor, dekomprimieren und entpacken Sie:

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

Auf der Quelle alles tarieren, parallel komprimieren und an das Ziel senden:

tar cvf - ./ | pigz | nc host 12345
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.