Truyền tệp lớn (8 GB) qua ssh


27

Tôi đã thử nó với SCP, nhưng nó nói "Kích thước tệp âm".

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

Cũng đã thử sử dụng SFTP, hoạt động tốt cho đến khi 2 GB tệp được chuyển, sau đó dừng:

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

Bất cứ ý tưởng những gì có thể là sai? Không hỗ trợ các tệp SCP và SFTP lớn hơn 2 GB? Nếu vậy, làm thế nào tôi có thể chuyển các tệp lớn hơn qua SSH?

Hệ thống tập tin đích là ext4. Bản phân phối Linux là CentOS 6.5. Hệ thống tệp hiện có (có thể truy cập) các tệp lớn trên đó (tối đa 100 GB).


5
Trông giống như một biến đổi vượt quá kích thước. Nhưng AFAIK scp / sftp không có giới hạn kích thước. Hệ thống tập tin đích là gì? Nó có hỗ trợ LỚN không?
Milind Dumbare

1
Những gì về các ứng dụng sftp và scp? Bạn có thể tìm thấy điều này bằng cách sử dụng lệnh tập tin chống lại nhị phân của họ.
mdpc

1
@shepherd - vâng.
mdpc

2
Các ứng dụng 32 bit có thể truy cập các tệp lớn nếu chúng được biên dịch -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Nhưng nếu bạn đang chạy hệ thống 64 bit 64, có thể dễ dàng cài đặt quản trị viên hơn openssh-5.3p1-94.el6_6.1.x86_64openssh-server-5.3p1-94.el6_6.1.x86_64từ các repos tiêu chuẩn.
Đánh dấu Plotnick

1
lol tại phần mềm sử dụng số nguyên đã ký cho kích thước tệp
Lightness Races với Monica

Câu trả lời:


9

Vấn đề ban đầu (dựa trên việc đọc tất cả các bình luận cho câu hỏi OP) là việc scpthực thi trên hệ thống 64 bit là một ứng dụng 32 bit. Một ứng dụng 32 bit không được biên dịch với "hỗ trợ tệp lớn" kết thúc bằng các con trỏ tìm kiếm bị giới hạn 2^32 =~ 4GB.

Bạn có thể biết nếu scplà 32-bit bằng cách sử dụng filelệnh:

file `which scp`

Trên hầu hết các hệ thống hiện đại, nó sẽ là 64 bit, do đó sẽ không xảy ra cắt ngắn tệp:

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

Một ứng dụng 32 vẫn có thể hỗ trợ "các tệp lớn" nhưng nó phải được biên dịch từ nguồn với sự hỗ trợ tệp lớn mà trường hợp này rõ ràng là không.

Giải pháp được đề xuất có lẽ là sử dụng bản phân phối 64 bit tiêu chuẩn đầy đủ trong đó các ứng dụng được biên dịch thành 64 bit theo mặc định.


33

Rsync rất phù hợp để chuyển các tệp lớn qua ssh vì nó có thể tiếp tục chuyển bị gián đoạn do một số lý do. Vì nó sử dụng các hàm băm để phát hiện các khối tệp bằng nhau, tính năng tiếp tục khá mạnh mẽ.

Điều đáng ngạc nhiên là các phiên bản sftp/ của bạn scpdường như không hỗ trợ các tệp lớn - ngay cả với các tệp nhị phân 32 Bit, hiện tại hỗ trợ LFS phải khá chuẩn.


4
Cho rằng một phần lớn của tập tin đã được chuyển, rsyncbây giờ là một ý tưởng tốt. Sử dụng -Ptùy chọn để vừa nhận được chỉ dẫn tiến trình vừa hướng dẫn người nhận giữ một tệp không đầy đủ trong trường hợp việc chuyển bị gián đoạn một lần nữa.
Simon Richter

25

Tôi không chắc chắn về giới hạn kích thước tệp của SCP và SFTP, nhưng bạn có thể thử khắc phục sự cố với phân tách:

split -b 1G matlab.iso

Điều này sẽ tạo 1 tệp GiB, theo mặc định, được đặt tên là xaa, xab, xac, .... Sau đó, bạn có thể sử dụng scp để chuyển các tệp:

scp xa* xxx@xxx:

Sau đó, trên hệ thống từ xa tạo lại tệp gốc với cat:

cat xa* > matlab.iso

Tất nhiên, các hình phạt cho cách giải quyết này là thời gian thực hiện các thao tác tách và mèo, cũng như không gian đĩa phụ cần thiết trên các hệ thống cục bộ và từ xa.


1
ý tưởng tốt. Tôi đã chuyển tập tin với một ổ đĩa USB, nhưng điều này có lẽ sẽ thuận tiện hơn. Tuy nhiên, không thuận tiện bằng việc nhận scp và sftp để hoạt động chính xác.
eimrek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.