Transferindo arquivos grandes (8 GB) pelo ssh

25

Eu tentei com o SCP, mas ele diz "Tamanho do arquivo negativo".

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

Também tentei usar o SFTP, funcionou bem até que 2 GB do arquivo foram transferidos e depois parou:

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

Alguma ideia do que poderia estar errado? O SCP e o SFTP não suportam arquivos maiores que 2 GB? Se sim, então como posso transferir arquivos maiores através do SSH?

O sistema de arquivos de destino é ext4. A distribuição do Linux é o CentOS 6.5. O sistema de arquivos atualmente possui arquivos grandes (acessíveis) nele (até 100 GB).

    
por eimrek 16.03.2015 / 17:59

3 respostas

6

O problema original (baseado na leitura de todos os comentários para a questão OP) era que o executável scp no sistema de 64 bits era um aplicativo de 32 bits. Um aplicativo de 32 bits que não é compilado com "suporte a arquivos grandes" acaba com ponteiros de busca limitados a 2^32 =~ 4GB .

Você pode dizer se scp é de 32 bits usando o comando file :

file 'which scp'

Na maioria dos sistemas modernos, ele será de 64 bits, portanto, não ocorrerá truncamento de arquivo:

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

Um aplicativo 32 ainda deve ser capaz de suportar "arquivos grandes", mas deve ser compilado a partir do código-fonte com suporte para arquivos grandes, o que aparentemente não é esse caso.

A solução recomendada é, talvez, usar uma distribuição padrão completa de 64 bits, em que os aplicativos são compilados como 64 bits por padrão.

    
por 23.03.2015 / 22:25
32

O Rsync é muito adequado para a transferência de arquivos grandes sobre o ssh, pois ele é capaz de continuar com as transferências que foram interrompidas devido a alguma razão. Como ele usa funções hash para detectar blocos de arquivos iguais, o recurso continue é bastante robusto.

É surpreendente que suas versões sftp / scp não pareçam suportar arquivos grandes - mesmo com binários de 32 bits, Suporte a LFS deve ser bastante normal, hoje em dia.

    
por 16.03.2015 / 21:38
21

Não tenho certeza sobre os limites de tamanho de arquivo de SCP e SFTP, mas você pode tentar resolver o problema com a divisão:

split -b 1G matlab.iso

Isso criará 1 arquivos GiB que, por padrão, são nomeados como xaa, xab, xac, ... . Você poderia então usar o scp para transferir os arquivos:

scp xa* xxx@xxx:

Em seguida, no sistema remoto, recrie o arquivo original com cat:

cat xa* > matlab.iso

Naturalmente, as penalidades para essa solução alternativa são o tempo gasto nas operações split e cat, bem como o espaço extra em disco necessário nos sistemas local e remoto.

    
por 16.03.2015 / 18:23