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

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

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)이 있습니다.

답변1

SCP 및 SFTP의 파일 크기 제한이 확실하지 않지만 분할을 사용하여 문제를 해결할 수 있습니다.

split -b 1G matlab.iso

그러면 이름이 default 인 1GiB 파일이 생성됩니다 xaa, xab, xac, .... 그런 다음 scp를 사용하여 파일을 전송할 수 있습니다.

scp xa* xxx@xxx:

그런 다음 원격 시스템에서 cat을 사용하여 원본 파일을 다시 만듭니다.

cat xa* > matlab.iso

물론 이 해결 방법의 비용은 분할 및 Cat 작업에 소요되는 시간뿐 아니라 로컬 및 원격 시스템 모두에 필요한 추가 디스크 공간입니다.

답변2

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

놀랍게도 귀하 의 sftp/ 버전은 scp32비트 바이너리에서도 대용량 파일을 지원하지 않는 것 같습니다.LFS 지원이제 꽤 표준이 될 것입니다.

답변3

원래 문제(OP 질문에 대한 모든 설명을 읽어 본 결과)는 scp64비트 시스템의 실행 파일이 32비트 응용 프로그램이라는 것입니다. 컴파일되지 않은 32비트 애플리케이션"대용량 파일 지원"최종 검색 포인터는 2^32 =~ 4GB.

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

file `which scp`

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

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

32비트 응용 프로그램은 여전히 ​​"대형 파일"을 지원할 수 있지만 대용량 파일을 지원하는 소스에서 컴파일해야 하는데 이 경우에는 확실히 그렇지 않습니다.

권장되는 해결 방법은 애플리케이션이 기본적으로 64비트용으로 컴파일되는 전체 표준 64비트 배포판을 사용하는 것입니다.

관련 정보