Übertragen großer Dateien (8 GB) über ssh

27

Ich habe es mit SCP versucht, aber es steht "Negative Dateigröße".

>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size

Auch versucht mit SFTP, funktionierte gut, bis 2 GB der Datei übertragen worden waren, dann gestoppt:

sftp> put matlab.iso
Uploading matlab.iso to /home/x/matlab.iso
matlab.iso                                           -298% 2021MB -16651.-8KB/s   00:5d
o_upload: offset < 0

Irgendeine Idee, was falsch sein könnte? Unterstützen SCP und SFTP keine Dateien, die größer als 2 GB sind? Wenn ja, wie kann ich größere Dateien über SSH übertragen?

Das Zieldateisystem ist ext4. Die Linux-Distribution ist CentOS 6.5. Das Dateisystem enthält derzeit (zugreifbare) große Dateien (bis zu 100 GB).

Eimrek
quelle
5
Sieht aus wie ein variabler Überlauf der Größe. AFAIK scp / sftp kennt jedoch keine Größenbeschränkung. Was ist das Zieldateisystem? Unterstützt es LARGEFILES?
Milind Dumbare
1
Was ist mit den Anwendungen sftp und scp? Sie können dies mit dem Befehl file anhand der Binärdateien herausfinden.
mdpc
1
@ Shepherd - ja.
mdpc
2
32-Bit-Anwendungen können auf große Dateien zugreifen, wenn sie mit kompiliert wurden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Wenn Sie jedoch ein 64-Bit-6.5-System verwenden, ist die Installation der Administratoren openssh-5.3p1-94.el6_6.1.x86_64und openssh-server-5.3p1-94.el6_6.1.x86_64der Standard-Repos wahrscheinlich einfacher .
Mark Plotnick
1
lol bei Software mit signierten ganzen Zahlen für die Dateigröße
Lightness Races mit Monica

Antworten:

9

Das ursprüngliche Problem (basierend auf dem Lesen aller Kommentare zur OP-Frage) war, dass die scpausführbare Datei auf dem 64-Bit-System eine 32-Bit-Anwendung war. Eine 32-Bit-Anwendung, die nicht mit "Unterstützung für große Dateien" kompiliert wurde , hat nur Suchzeiger 2^32 =~ 4GB.

scpMit dem folgenden fileBefehl können Sie feststellen, ob es sich um 32-Bit- Dateien handelt:

file `which scp`

Auf den meisten modernen Systemen wird es 64-Bit sein, so dass keine Dateikürzung auftreten würde:

$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB  shared object, x86-64 ...

Eine 32-Anwendung sollte weiterhin "große Dateien" unterstützen können, muss jedoch aus dem Quellcode mit Unterstützung für große Dateien kompiliert werden, was in diesem Fall anscheinend nicht der Fall war.

Die empfohlene Lösung ist möglicherweise die Verwendung einer 64-Bit-Vollstandarddistribution, bei der Apps standardmäßig als 64-Bit kompiliert werden.

Arielf
quelle
33

Rsync eignet sich sehr gut zum Übertragen großer Dateien über ssh, da es Übertragungen fortsetzen kann, die aus irgendeinem Grund unterbrochen wurden. Da es Hash-Funktionen verwendet, um gleiche Dateiblöcke zu erkennen, ist die Continue-Funktion recht robust.

Es ist ein wenig überraschend, dass Ihre sftp/ scp-Versionen keine großen Dateien zu unterstützen scheinen - selbst mit 32-Bit-Binärdateien sollte die LFS-Unterstützung heutzutage ein ziemlich normaler Standard sein.

maxschlepzig
quelle
4
Da ein großer Teil der Datei bereits übertragen wurde, rsyncist dies jetzt eine gute Idee. Verwenden Sie die -POption, um sowohl eine Fortschrittsanzeige zu erhalten als auch den Empfänger anzuweisen, eine unvollständige Datei aufzubewahren, falls die Übertragung erneut unterbrochen wird.
Simon Richter
25

Ich bin mir über die Dateigrößenbeschränkungen von SCP und SFTP nicht sicher, aber Sie könnten versuchen, das Problem mit split zu umgehen:

split -b 1G matlab.iso

Dadurch werden 1 GiB-Dateien erstellt, die standardmäßig den Namen haben xaa, xab, xac, .... Sie könnten dann scp verwenden, um die Dateien zu übertragen:

scp xa* xxx@xxx:

Erstellen Sie dann auf dem fernen System die ursprüngliche Datei mit cat neu:

cat xa* > matlab.iso

Die Nachteile für diese Problemumgehung sind natürlich die Zeit, die für den Split- und den Cat-Vorgang benötigt wird, sowie der zusätzliche Speicherplatz, der auf den lokalen und Remote-Systemen benötigt wird.

Spinup
quelle
1
gute Idee. Ich habe die Datei bereits mit einem USB-Laufwerk übertragen, aber dies wäre wahrscheinlich praktischer gewesen. Es ist jedoch nicht so praktisch, scp und sftp zum korrekten Funktionieren zu bringen.
Eimrek