Transfert de fichiers volumineux (8 Go) via ssh

27

Je l'ai essayé avec SCP, mais il indique "Taille de fichier négative".

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

A également essayé d'utiliser SFTP, a bien fonctionné jusqu'à ce que 2 Go du fichier soient transférés, puis s'est arrêté:

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

Une idée de ce qui pourrait être faux? SCP et SFTP ne prennent-ils pas en charge les fichiers de plus de 2 Go? Si oui, comment puis-je transférer des fichiers plus gros via SSH?

Le système de fichiers de destination est ext4. La distribution Linux est CentOS 6.5. Le système de fichiers contient actuellement de gros fichiers (accessibles) (jusqu'à 100 Go).

eimrek
la source
5
Ressemble à un dépassement variable de taille. Mais AFAIK scp / sftp n'a pas de limite de taille. Qu'est-ce que le système de fichiers de destination? Prend-il en charge les LARGEFILES?
Milind Dumbare
1
Qu'en est-il des applications sftp et scp? Vous pouvez le découvrir en utilisant la commande file contre leurs binaires.
mdpc
1
@ berger - oui.
mdpc
2
Les applications 32 bits peuvent accéder à des fichiers volumineux s'ils sont compilés avec -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Mais si vous exécutez un système 64 bits 6.5, il serait probablement plus facile d'installer les administrateurs openssh-5.3p1-94.el6_6.1.x86_64et à openssh-server-5.3p1-94.el6_6.1.x86_64partir des référentiels standard.
Mark Plotnick
1
lol au logiciel en utilisant des entiers signés pour la taille du fichier
Courses de légèreté avec Monica

Réponses:

9

Le problème d'origine (basé sur la lecture de tous les commentaires de la question OP) était que l' scpexécutable sur le système 64 bits était une application 32 bits. Une application 32 bits qui n'est pas compilée avec la «prise en charge des gros fichiers» se retrouve avec des pointeurs de recherche limités à 2^32 =~ 4GB.

Vous pouvez dire si scpest 32 bits en utilisant la filecommande:

file `which scp`

Sur la plupart des systèmes modernes, il sera de 64 bits, donc aucune troncature de fichier ne se produira:

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

Une application 32 devrait toujours être capable de prendre en charge les "gros fichiers" mais elle doit être compilée à partir des sources avec une prise en charge des gros fichiers, ce que ce cas n'était apparemment pas.

La solution recommandée est peut-être d'utiliser une distribution 64 bits standard complète où les applications sont compilées en 64 bits par défaut.

arielf
la source
33

Rsync est très bien adapté pour transférer des fichiers volumineux sur ssh car il est capable de poursuivre les transferts qui ont été interrompus pour une raison quelconque. Puisqu'il utilise des fonctions de hachage pour détecter des blocs de fichiers égaux, la fonction continue est assez robuste.

Il est assez surprenant que vos versions sftp/ scpne semblent pas prendre en charge les fichiers volumineux - même avec les binaires 32 bits, le support LFS devrait être assez standard, de nos jours.

maxschlepzig
la source
4
Étant donné qu'une grande partie du fichier est déjà transférée, rsyncc'est une bonne idée maintenant. Utilisez l' -Poption pour à la fois obtenir une indication de progression et demander au destinataire de conserver un fichier incomplet au cas où le transfert serait à nouveau interrompu.
Simon Richter
25

Je ne suis pas sûr des limites de taille de fichier de SCP et SFTP, mais vous pouvez essayer de contourner le problème avec split:

split -b 1G matlab.iso

Cela va créer 1 fichiers GiB qui, par défaut, sont nommés comme xaa, xab, xac, .... Vous pouvez ensuite utiliser scp pour transférer les fichiers:

scp xa* xxx@xxx:

Ensuite, sur le système distant, recréez le fichier d'origine avec cat:

cat xa* > matlab.iso

Bien sûr, les pénalités pour cette solution de contournement sont le temps pris dans les opérations split et cat, ainsi que l'espace disque supplémentaire nécessaire sur les systèmes locaux et distants.

Tournoiement en haut
la source
1
bonne idée. J'ai déjà transféré le fichier avec un lecteur USB, mais cela aurait probablement été plus pratique. Cependant, ce n'est pas aussi pratique que de faire fonctionner scp et sftp correctement.
eimrek