Eu tentei com o SCP, mas 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 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 pode estar errado? O SCP e o SFTP não suportam arquivos maiores que 2 GB? Se sim, como posso transferir arquivos maiores por SSH?
O sistema de arquivos de destino é ext4. A distribuição Linux é o CentOS 6.5. O sistema de arquivos atualmente possui arquivos grandes (acessíveis) nele (até 100 GB).
scp
sftp
large-files
eimrek
fonte
fonte
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
. Mas se você estiver executando um sistema 6.5 de 64 bits, provavelmente será mais fácil instalar os administradoresopenssh-5.3p1-94.el6_6.1.x86_64
e aopenssh-server-5.3p1-94.el6_6.1.x86_64
partir dos repositórios padrão.Respostas:
O problema original (baseado na leitura de todos os comentários da pergunta OP) era que o
scp
executável 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 indicadores de busca limitados a2^32 =~ 4GB
.Você pode dizer se
scp
é de 32 bits usando ofile
comando:Na maioria dos sistemas modernos, ele será de 64 bits, portanto, nenhum truncamento de arquivo ocorrerá:
Um aplicativo de 32 ainda deve ser capaz de suportar "arquivos grandes", mas precisa ser compilado da fonte com suporte a arquivos grandes, o que aparentemente esse caso não era.
A solução recomendada talvez seja usar uma distribuição padrão de 64 bits completa, na qual os aplicativos são compilados como 64 bits por padrão.
fonte
O Rsync é muito adequado para transferir arquivos grandes por ssh, pois é capaz de continuar as transferências interrompidas por algum motivo. Como ele usa funções hash para detectar blocos iguais de arquivos, o recurso de continuar é bastante robusto.
É surpreendente que suas versões
sftp
/scp
não pareçam suportar arquivos grandes - mesmo com binários de 32 bits, o suporte a LFS deve ser bastante padrão hoje em dia.fonte
rsync
é uma boa ideia agora. Use a-P
opção para obter indicação de progresso e instruir o receptor a manter um arquivo incompleto, caso a transferência seja interrompida novamente.Não tenho certeza sobre os limites de tamanho de arquivo do SCP e SFTP, mas você pode tentar solucionar o problema com a divisão:
Isso criará 1 arquivo GiB que, por padrão, são nomeados como
xaa, xab, xac, ...
. Você pode usar o scp para transferir os arquivos:Em seguida, no sistema remoto, recrie o arquivo original com cat:
Obviamente, as penalidades para essa solução alternativa são o tempo gasto nas operações de divisão e de gato, bem como o espaço em disco extra necessário nos sistemas local e remoto.
fonte