ssh를 통해 대용량 (8GB) 파일 전송


27

SCP로 시도했지만 "네거티브 파일 크기"라고 표시되어 있습니다.

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

또한 SFTP를 사용하여 2GB의 파일이 전송 될 때까지 정상적으로 작동 한 다음 중지했습니다.

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

무엇이 잘못 될 수 있는지 아십니까? SCP와 SFTP가 2GB보다 큰 파일을 지원하지 않습니까? 그렇다면 SSH를 통해 더 큰 파일을 어떻게 전송할 수 있습니까?

대상 파일 시스템은 ext4입니다. Linux 배포판은 CentOS 6.5입니다. 파일 시스템에는 현재 (액세스 가능한) 큰 파일이 있습니다 (최대 100GB).


5
가변 크기 오버런처럼 보입니다. 그러나 AFAIK scp / sftp에는 크기 제한이 없습니다. 대상 파일 시스템은 무엇입니까? LARGEFILES를 지원합니까?
Milind Dumbare

1
응용 프로그램 sftp 및 scp는 어떻습니까? 바이너리에 대해 file 명령을 사용하여이를 찾을 수 있습니다.
mdpc

1
@ 쉐퍼드-그렇습니다.
mdpc

2
32 비트 응용 프로그램은로 컴파일 된 대용량 파일에 액세스 할 수 있습니다 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. 64 비트 6.5 시스템을 실행하는 경우, 아마도 관리자가 설치가 쉬울 것 openssh-5.3p1-94.el6_6.1.x86_64openssh-server-5.3p1-94.el6_6.1.x86_64표준의 repos에서.
Mark Plotnick

1
파일 크기에 부호있는 정수를 사용하는 소프트웨어에서의 lol
Monica

답변:


9

원래 문제 (OP 질문에 대한 모든 의견을 읽은 결과)은 scp64 비트 시스템 의 실행 파일이 32 비트 응용 프로그램이라는 것이 었습니다. "큰 파일 지원"으로 컴파일되지 않은 32 비트 응용 프로그램 은로 제한된 탐색 포인터로 끝납니다 2^32 =~ 4GB.

scp다음 file명령 을 사용하여 32 비트 인지 알 수 있습니다 .

file `which scp`

대부분의 최신 시스템에서는 64 비트이므로 파일 잘림이 발생하지 않습니다.

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

32- 응용 프로그램은 여전히 ​​"큰 파일"을 지원할 수 있어야하지만이 경우에는 그렇지 않은 큰 파일 지원으로 소스에서 컴파일되어야합니다.

권장 솔루션은 앱이 기본적으로 64 비트로 컴파일되는 전체 표준 64 비트 배포를 사용하는 것입니다.


33

Rsync 는 어떤 이유로 인해 중단 된 전송을 계속할 수 있기 때문에 ssh를 통해 큰 파일을 전송하는 데 매우 적합합니다. 해시 함수를 사용하여 동일한 파일 블록을 감지하므로 계속 기능은 매우 강력합니다.

sftp/ scp버전이 큰 파일을 지원하지 않는 것은 놀라운 일입니다. 32 비트 바이너리를 사용하더라도 LFS 지원 은 현재 매우 표준 적이어야합니다.


4
파일의 많은 부분이 이미 전송되었다고 가정 rsync하면 좋은 생각입니다. 이 -P옵션을 사용하여 진행 표시를 받고 전송이 다시 중단 될 경우 수신자에게 불완전한 파일을 유지하도록 지시하십시오.
Simon Richter

25

SCP와 SFTP의 파일 크기 제한에 대해 잘 모르겠지만 split 문제를 해결해 볼 수도 있습니다.

split -b 1G matlab.iso

기본적으로 이름이 1 GiB 파일 1 개가 생성됩니다 xaa, xab, xac, .... 그런 다음 scp를 사용하여 파일을 전송할 수 있습니다.

scp xa* xxx@xxx:

그런 다음 원격 시스템에서 cat을 사용하여 원래 파일을 다시 작성하십시오.

cat xa* > matlab.iso

물론이 해결 방법의 처벌은 로컬 및 원격 시스템에 필요한 추가 디스크 공간뿐만 아니라 분할 및 고양이 작업에 걸리는 시간입니다.


1
좋은 생각. 이미 USB 드라이브로 파일을 전송했지만 더 편리했을 것입니다. 그러나 scp 및 sftp를 올바르게 작동시키는 것만 큼 편리하지는 않습니다.
eimrek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.