Ssh पर बड़ी (8 GB) फ़ाइलों को स्थानांतरित करना


27

मैंने इसे एससीपी के साथ आज़माया, लेकिन यह "नकारात्मक फ़ाइल आकार" कहता है।

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

एसएफटीपी का उपयोग करने की भी कोशिश की गई, तब तक ठीक काम किया जब तक कि 2 जीबी फ़ाइल स्थानांतरित नहीं हुई, फिर रुक गई:

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

कोई अंदाजा क्या गलत हो सकता है? एससीपी और एसएफटीपी उन फाइलों का समर्थन नहीं करते जो 2 जीबी से बड़ी हैं? यदि ऐसा है, तो मैं SSH पर बड़ी फ़ाइलों को कैसे स्थानांतरित कर सकता हूं?

गंतव्य फ़ाइल सिस्टम ext4 है। लिनक्स वितरण CentOS 6.5 है। फाइलसिस्टम में वर्तमान में (100 जीबी तक) बड़ी (सुलभ) फाइलें हैं।


5
आकार के एक चर ओवररन की तरह दिखता है। लेकिन AFAIK scp / sftp की कोई आकार सीमा नहीं है। डेस्टिनेशन फाइल सिस्टम क्या है? क्या यह LARGEFILES का समर्थन करता है?
मिलिंद डुम्बरे

1
अनुप्रयोगों sftp और scp के बारे में क्या? आप उनके बायनेरिज़ के खिलाफ फ़ाइल कमांड का उपयोग करके यह पता लगा सकते हैं।
mdpc

1
@ शेफर्ड - हाँ।
एमडीपीसी

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मानक रिपोज से।
मार्क प्लॉटनिक

1
lol फ़ाइल आकार के लिए हस्ताक्षर किए पूर्णांकों का उपयोग कर सॉफ्टवेयर
मोनिका के साथ लपट दौड़

जवाबों:


9

मूल समस्या (ओपी प्रश्न पर सभी टिप्पणियों को पढ़ने पर आधारित) यह थी कि scp64-बिट सिस्टम पर निष्पादन योग्य 32-बिट अनुप्रयोग था। एक 32-बिट एप्लिकेशन जिसे "बड़ी-फ़ाइल समर्थन" के साथ संकलित नहीं किया गया है, वह सीमित बिंदु वाले तलाशकर्ताओं के साथ समाप्त होता है 2^32 =~ 4GB

यदि आप scp32-बिट 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 बिट बायनेरिज़ के साथ, एलएफएस समर्थन आजकल बहुत मानक होना चाहिए।


4
यह देखते हुए कि फ़ाइल का एक बड़ा हिस्सा पहले ही स्थानांतरित हो चुका है, rsyncअब एक अच्छा विचार है। -Pविकल्प का उपयोग प्रगति संकेत प्राप्त करने के लिए करें और फिर से स्थानांतरण बाधित होने की स्थिति में रिसीवर को एक अपूर्ण फ़ाइल रखने का निर्देश दें।
साइमन रिक्टर

25

मुझे SCP और SFTP की फ़ाइल आकार सीमा के बारे में निश्चित नहीं है, लेकिन आप विभाजन के साथ समस्या के आसपास काम करने की कोशिश कर सकते हैं:

split -b 1G matlab.iso

यह 1 GiB फाइल बनाएगा, जिसे डिफ़ॉल्ट रूप से नाम दिया गया है xaa, xab, xac, ...। तब आप फ़ाइलों को स्थानांतरित करने के लिए scp का उपयोग कर सकते हैं:

scp xa* xxx@xxx:

फिर रिमोट सिस्टम पर बिल्ली के साथ मूल फ़ाइल को फिर से बनाएँ:

cat xa* > matlab.iso

बेशक, इस वर्कअराउंड के लिए दंड विभाजन और बिल्ली के संचालन में समय लगता है, साथ ही स्थानीय और दूरस्थ सिस्टम पर अतिरिक्त डिस्क स्थान की आवश्यकता होती है।


1
अच्छा विचार। मैंने पहले ही एक usb ड्राइव के साथ फाइल ट्रांसफर कर दी थी, लेकिन यह शायद अधिक सुविधाजनक था। हालांकि, सही तरीके से काम करने के लिए scp और sftp मिलना उतना सुविधाजनक नहीं है।
इमरेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.