Bei einem einfachen "copy" -Befehl für eine große Datei (2 GB) zwischen lokaler und SSH-Ausführung kann es zu Geschwindigkeitsunterschieden kommen?

281
Sopalajo de Arrierez

Beispielszenario:
- Linux- Maschine (Betriebssystem wird nicht unterstützt)
- OpenSSH Server .
- Große Quelldatei auf der Festplatte, etwa 2 GB (ich glaube, SSD oder klassisches HD stört auch nicht).
- Ziel für die Datei: ein (mäßig schnelles 2.0) USB-Stick (ich denke, dass 3.0 oder 1.0 auch nicht stören würde).

Ich werde ein einfaches bestellen:

cp MyBigFile.iso /media/pendrive 

Der Pendelantrieb ist an dieselbe Maschine angeschlossen.
Zwei Fälle:

  1. Lokale Shell (ich sitze auf dem Rechner und mache cp) Ausführung geordnete Kopie der großen Datei.
  2. Die SSH-Shell (ich gehe zu einem anderen Computer im selben LAN und protokolliere über den SSH-Client) entfernt die von der Ferne angeforderte Kopie der großen Datei.

Hat es Sinn, einen Geschwindigkeitsunterschied zu erwarten? Warum?

Ich denke, wenn die Kopie viele kleine Dateien enthält, könnte die Kommunikation (für die SSH-Shell) zwischen Server und Client viele kleine Verzögerungen hinzufügen (korrigieren Sie diese Logik auch, wenn Sie denken, dass ich falsch liege), aber Ich bin mir bei großen nicht sicher.

(Fühlen Sie sich frei, zu meinen oben genannten "nicht störenden " Szenarien zu sagen .)

0
Ich vermute, wenn Sie Dateien von der lokalen Maschine auf ein Stiftlaufwerk kopieren, das an die Maschine angeschlossen ist, besteht der einzige Geschwindigkeitsunterschied in der Zeit, die die Maschine benötigt, um den Kopierbefehl zu erhalten (ssh ist langsamer). Ich kann mich irren (daher nur ein Kommentar) und würde die Antwort interessant finden. Matthew Williams vor 10 Jahren 1
Gleicher Computer, @ MatthewWilliams. Ich habe die Frage bearbeitet, um sie zu zeigen. Danke. Sopalajo de Arrierez vor 10 Jahren 0
Ja, ich ging davon aus, dass dies der Fall ist. Vielen Dank für die Klarstellung. Matthew Williams vor 10 Jahren 0

1 Antwort auf die Frage

2
Alan Shutko

Wenn Sie ssh in einen Computer einschalten und ausführen cp fromFile toFile, wird diese Kopie vollständig auf dem Remote-Computer ausgeführt. Es kommuniziert nicht über ssh, um die Kopie auszuführen. Ohne Argumente meldet cp nicht einmal den Fortschritt der ssh-Sitzung, es wird nur abgeschlossen und dann wird die Aufforderung angezeigt.

Wenn Sie viele kleine Dateien kopieren und verwenden cp -v, gibt cp den Namen jeder Datei aus, wenn sie kopiert wird. Durch Drucken des Namens wird die Kommunikation über die SSH-Verbindung hergestellt. Wenn Sie eine langsame Verbindung haben, kann es sein, dass der Befehl cp Dateinamen schneller druckt, als ssh sie über die Leitung übertragen kann. Es scheint möglich, dass cp nach dem Drucken ausreichender Dateinamen den Versuch blockiert, in stdout zu schreiben.

Ich habe das nie wirklich gesehen, und die Festplattengeschwindigkeit war immer der limitierende Faktor, aber ich denke, das ist theoretisch möglich.

sollte der `cp`-Befehl ** der * SSH-Sitzung * nicht auch bei einer großen Dateikopie den Fortschritt ** melden? Wenn ja, wird dieser Fortschrittsbericht, wenn er häufig durchgeführt wird, die Übertragung nicht verlangsamen? Sopalajo de Arrierez vor 10 Jahren 0
Wenn Sie "cp" ohne Flags ausführen, werden keinerlei Fortschritte gemeldet. Es läuft einfach still und endet schließlich. Wenn Sie `cp -v` ausführen, werden die Dateinamen aller kopierten Dateien gemeldet. Die Dateinamen sind jedoch klein. So wie die Dinge funktionieren, schreibt `cp` in einen Puffer und` ssh` liest aus dem Puffer. "Cp" verlangsamt sich nur dann, wenn der Puffer gefüllt wird, bevor "ssh" die Informationen über das Netzwerk senden kann. Alan Shutko vor 10 Jahren 1