ถ่ายโอนไฟล์ขนาดใหญ่ (8 GB) ผ่าน ssh


27

ฉันลองกับ SCP แล้ว แต่มีข้อความว่า "ขนาดไฟล์เชิงลบ"

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

ลองใช้ SFTP อีกครั้งทำงานได้ดีจนกระทั่งไฟล์ 2 GB โอนแล้วหยุด

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 ไม่รองรับไฟล์ที่มีขนาดใหญ่กว่า 2 GB หรือไม่ ถ้าเป็นเช่นนั้นฉันจะถ่ายโอนไฟล์ที่ใหญ่กว่าผ่าน SSH ได้อย่างไร

ระบบไฟล์ปลายทางคือ ext4 การกระจาย Linux คือ CentOS 6.5 ระบบไฟล์ในปัจจุบันมีไฟล์ขนาดใหญ่ (เข้าถึงได้) ในนั้น (สูงสุด 100 GB)


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_64และopenssh-server-5.3p1-94.el6_6.1.x86_64จาก repos มาตรฐาน
Mark Plotnick

1
lol ที่ซอฟต์แวร์โดยใช้เลขจำนวนเต็มที่ลงนามสำหรับขนาดไฟล์
Lightness Races กับ Monica

คำตอบ:


9

ปัญหาดั้งเดิม (อ้างอิงจากการอ่านความคิดเห็นทั้งหมดเกี่ยวกับคำถาม OP) คือscpไฟล์ที่ปฏิบัติการได้ในระบบ 64 บิตนั้นเป็นแอพพลิเคชั่น 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- บิตโดยค่าเริ่มต้น


33

rsyncเหมาะอย่างยิ่งสำหรับการถ่ายโอนไฟล์ขนาดใหญ่ผ่าน ssh เนื่องจากสามารถถ่ายโอนต่อที่ถูกขัดจังหวะเนื่องจากสาเหตุบางประการ เนื่องจากมันใช้ฟังก์ชั่นแฮชเพื่อตรวจจับบล็อกไฟล์ที่เท่ากันคุณสมบัติต่อไปจึงค่อนข้างแข็งแกร่ง

เป็นเรื่องที่น่าแปลกใจที่sftp/ scpรุ่นของคุณดูเหมือนจะไม่รองรับไฟล์ขนาดใหญ่ - ถึงแม้จะมีไบนารี 32 บิต แต่การสนับสนุน LFSควรเป็นมาตรฐานที่ค่อนข้างดีในทุกวันนี้


4
เนื่องจากไฟล์ส่วนใหญ่ถูกถ่ายโอนไปแล้วrsyncตอนนี้เป็นความคิดที่ดี ใช้-Pตัวเลือกเพื่อรับการแจ้งความคืบหน้าและสั่งให้ผู้รับเก็บไฟล์ที่ไม่สมบูรณ์ในกรณีที่การถ่ายโอนถูกขัดจังหวะอีกครั้ง
Simon Richter

25

ฉันไม่แน่ใจเกี่ยวกับขนาดไฟล์ที่ จำกัด ของ SCP และ SFTP แต่คุณอาจลองแก้ไขปัญหาด้วยการแบ่ง:

split -b 1G matlab.iso

นี้จะสร้างไฟล์ 1 xaa, xab, xac, ...ลิ่มซึ่งโดยค่าเริ่มต้นมีชื่อเป็น จากนั้นคุณสามารถใช้ scp เพื่อถ่ายโอนไฟล์:

scp xa* xxx@xxx:

จากนั้นบนระบบรีโมตสร้างไฟล์ต้นฉบับด้วย cat:

cat xa* > matlab.iso

แน่นอนว่าบทลงโทษสำหรับวิธีแก้ปัญหานี้คือเวลาที่ใช้ในการดำเนินการแยกและ cat รวมถึงพื้นที่ดิสก์เพิ่มเติมที่จำเป็นสำหรับระบบโลคัลและระบบระยะไกล


1
ความคิดที่ดี. ฉันถ่ายโอนไฟล์ด้วยไดรฟ์ usb แล้ว แต่นี่อาจจะสะดวกกว่า ไม่สะดวกเท่าการรับ scp และ sftp ให้ทำงานอย่างถูกต้อง
eimrek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.