खराब कनेक्शन पर बड़ी फ़ाइल डाउनलोड करें


30

क्या कोई मौजूदा उपकरण है, जिसका उपयोग खराब कनेक्शन पर बड़ी फ़ाइलों को डाउनलोड करने के लिए किया जा सकता है?

मुझे नियमित रूप से एक अपेक्षाकृत छोटी फ़ाइल डाउनलोड करनी है: 300 एमबी, लेकिन धीमी (80-120 केबीटी / सेकंड) टीसीपी कनेक्शन यादृच्छिक रूप से 10-120 सेकंड के बाद टूट जाता है। (यह एक बड़ी कंपनी का नेटवर्क है। हमने कई बार उनके (भारत से काम करने वाले) लोगों से संपर्क किया, लेकिन वे कुछ भी नहीं करना चाहते या नहीं कर सकते।) समस्या उनके उल्टे परदे के पीछे / लोड बैलेंसर्स के साथ हो सकती है।

अब तक मैंने pcurl के एक संशोधित संस्करण का उपयोग किया: https://github.com/brunoborges/pcurl

मैंने इस लाइन को बदल दिया:

curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &

इसके लिए:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &

मुझे जोड़ना पड़ा --speed-limit 2048 --speed-time 10क्योंकि कनेक्शन केवल मिनटों के लिए लटका रहता है जब यह विफल हो जाता है।

लेकिन हाल ही में यह स्क्रिप्ट भी पूरी नहीं हो सकी है।

एक समस्या यह है कि यह -C -भाग को नजरअंदाज करता है, इसलिए यह पुन: प्रयास के बाद खंड को "जारी" नहीं रखता है। यह संबंधित अस्थायी फ़ाइल को छोटा करने के लिए लगता है, और प्रत्येक असफल होने के बाद शुरुआत से शुरू होता है। (मुझे लगता है कि --rangeऔर -Cविकल्पों का एक साथ उपयोग नहीं किया जा सकता है।)

दूसरी समस्या यह है कि यह स्क्रिप्ट एक ही समय में सभी खंडों को डाउनलोड करती है। इसमें 300 सेगमेंट नहीं हो सकते हैं, जिनमें से केवल एक बार में 10 डाउनलोड किए जा रहे हैं।

मैं इस विशिष्ट उद्देश्य के लिए C # में एक डाउनलोड टूल लिखने के बारे में सोच रहा था, लेकिन अगर कोई मौजूदा टूल है, या यदि कर्ल कमांड विभिन्न मापदंडों के साथ ठीक से काम कर सकता है, तो मैं कुछ समय बचा सकता हूं।

अद्यतन 1: अतिरिक्त जानकारी: समानांतर डाउनलोड की कार्यक्षमता को हटाया नहीं जाना चाहिए, क्योंकि उनके पास एक बैंडविड्थ सीमा (80-120 Kbytes / sec, ज्यादातर 80) प्रति कनेक्शन है, इसलिए 10 कनेक्शन 10 गुना स्पीडअप का कारण बन सकते हैं। मुझे फ़ाइल डाउनलोड 1 घंटे में समाप्त करना है, क्योंकि फ़ाइल प्रति घंटा उत्पन्न होती है।


4
एफ़टीपी / एचटीटीपी पर फ़ाइलों को एक्सेस करने का एकमात्र विकल्प है? आप कुछ का उपयोग नहीं कर सकते हैं rsync(जो आपको स्थानांतरण को फिर से शुरू करने देगा) lftpभी प्रसारण को स्वचालित रूप से पुनः आरंभ करने की अनुमति देता है।
Kusalananda

हां, उन्होंने कुछ साल पहले HTTPS की सभी पहुंच अपने सर्वर तक सीमित कर दी थी। BTW सर्वर विशिष्ट स्थिति में पुनरारंभ करने की अनुमति देता है, pcurl उस का उपयोग करता है।
क्रिचिंग बिल्ली का बच्चा

1
आप स्क्रिप्टिंग के लिए एक कमांडलाइन टूल ढूंढ रहे हैं? क्योंकि अन्यथा मैं बस FileZilla या एक समान ftp / sftp क्लाइंट का उपयोग करूँगा जो एक डाउनलोड को पुनरारंभ करने का समर्थन करता है।
बकुरीउ

5
"एक अपेक्षाकृत छोटी फ़ाइल: 300 एमबी" आह, मुझे बूढ़ा महसूस करने का तरीका :)
मोनिका

4
इसके अलावा, वाह, यह एक भयावह नेटवर्क है।
मोनिका

जवाबों:


33

lftp( विकिपीडिया ) इसके लिए अच्छा है। यह कई प्रोटोकॉल का समर्थन करता है, कई समवर्ती समानांतर कनेक्शन का उपयोग करके फ़ाइलें डाउनलोड कर सकता है (उपयोगी है जहां भीड़ के कारण बहुत अधिक पैकेट नुकसान नहीं होता है), और स्वचालित रूप से डाउनलोड फिर से शुरू कर सकता है। यह भी स्क्रिप्टेड है।

यहाँ ठीक ट्यूनिंग के साथ आप के लिए आया था (आप के लिए क्रेडिट):

lftp -c 'set net:idle 10
         set net:max-retries 0
         set net:reconnect-interval-base 3
         set net:reconnect-interval-max 3
         pget -n 10 -c "https://host/file.tar.gz"'

धन्यवाद। मैं यह कोशिश की, लेकिन यह समानांतर कनेक्शन का उपयोग करने के लिए प्रतीत नहीं होता है:lftp -e 'set net:timeout 15; set net:max-retries 0; set net:reconnect-interval-base 3; set net:reconnect-interval-max 3; pget -n 10 -c "https://host/file.tar.gz"; exit'
क्रिटिंग बिल्ली का बच्चा

ओह, जब मैंने "नेट: टाइमआउट" सेटिंग को हटा दिया, तो यह समानांतर हो गया। लेकिन यह थोड़ी देर के बाद धीमा हो जाता है। मुझे लगता है कि कनेक्शन "हैंग" होने लगते हैं।
क्रिचिंग बिल्ली का बच्चा

1
यह net:idleसेटिंग के साथ पूरी तरह से काम करता है । धन्यवाद! मैं प्रश्न के लिए अपने समाधान जोड़ देंगे।
बिल्ली का बच्चा

1
ध्यान दें कि लॉफ्टप अंतर्निहित स्थानांतरण प्रोटोकॉल के रूप में धार का समर्थन करता है। इसका इस्तेमाल करें। अन्य सभी प्रोटोकॉल जो इसका समर्थन करते हैं, प्रति-चंक त्रुटि का पता लगाने / सुधार का समर्थन नहीं करते हैं और त्रुटि का पता लगाने के लिए टीसीपी पर भरोसा करते हैं। ध्यान दें कि टोरेंट टीसीपी एरर डिटेक्शन का उपयोग करता है लेकिन इसके शीर्ष पर आपकी पूरी फाइल के sha1 हैश की पुष्टि होती है और साथ ही प्रत्येक ब्लॉक नेटवर्क पर ट्रांसफर हो जाता है। मेरे अनुभव में एक 4 जी नेटवर्क पर 4GB की फिल्म में आम तौर पर लगभग दो हैश वेरिफिकेशन एरर होते हैं - इसका मतलब है कि टीसीपी को प्राप्त पैकेट को त्रुटि मुक्त माना जाता है, भले ही वे भ्रष्ट थे
स्लीपबेटमैन

1
@slebetman, यहाँ ओपी HTTPS का उपयोग करता है। एचएलएसी के माध्यम से टीएलएस अतिरिक्त अखंडता जांच (टीसीपी के कमजोर चेकसम पर) प्रदान करता है। इसके अलावा HTTP के साथ सामग्री या मात्रा checksuming के लिए समर्थन हासिल है Content-MD5और Digestहेडर (हालांकि मैं अगर पता नहीं है lftpका समर्थन करता है उन या वे ओपी के मामले में इस्तेमाल किया जाएगा तो)। किसी भी मामले में, ऐसा नहीं लगता है कि धार ओपी के लिए एक विकल्प होगा।
स्टीफन चेजलस

12

मैं अपनी स्थिति में आप के लिए यह परीक्षण नहीं कर सकते, लेकिन आप का उपयोग नहीं किया जाना चाहिए --rangeके साथ -C -। इस विषय पर मैन पेज का क्या कहना है:

हस्तांतरण को फिर से शुरू करने के लिए स्वचालित रूप से पता लगाने के -C -लिए कि बताने के curlलिए उपयोग करें । इसके बाद यह पता लगाने के लिए दिए गए आउटपुट / इनपुट फ़ाइलों का उपयोग करता है।

इसके बजाय यह प्रयास करें:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - -o "${FILENAME}.part${i}" "${URL}" &

मैं यह भी दृढ़ता से अनुशंसा करता हूं कि आप हमेशा अपने चर को डबल-कोट करें ताकि शेल उन्हें पार्स करने की कोशिश न करे। (एक URL पर विचार करें https://example.net/param1=one&param2=two, जहां शेल मूल्य को विभाजित करेगा &।)

संयोग से, 120 केबी / एस लगभग 1.2 एमबी / एस है, जो दुनिया के कई हिस्सों में एक विशिष्ट एक्सडीएसएल अपलोड गति है। एमबी प्रति 10 सेकंड, तो पूरी फ़ाइल के लिए एक घंटे से थोड़ा कम। इतना धीमा नहीं है, हालांकि मैं सराहना करता हूं कि आप गति के बजाय विश्वसनीयता से अधिक चिंतित हैं।


2
धन्यवाद। यह दृष्टिकोण काम करेगा, लेकिन यह धीमा है, क्योंकि यह समानांतर में डाउनलोड नहीं हो रहा है। उनके पास प्रति कनेक्शन की गति सीमा है, और मुझे 1 घंटे में डाउनलोड समाप्त करना होगा, क्योंकि वे प्रति घंटा फ़ाइल उत्पन्न करते हैं। प्रश्न का अद्यतन करना।
क्रिचिंग बिल्ली का बच्चा


4

बॉक्स के बाहर: एक ऐपिस पर रखें और बिटोरेंट का उपयोग करें। जब आप टोरेंट बनाते हैं तो ब्लॉक को छोटा करें। जाहिर है, फ़ाइल को एन्क्रिप्ट करें ताकि टोरेंट को खोजने वाले को और कुछ न मिले।


1
यह दुर्लभ निगम है जो आंतरिक रूप से धार पर फ़ाइलों को वितरित करता है।
रॉनजॉन

5
ठीक ठीक। यहां तक ​​कि अगर कनेक्शन वास्तव में खराब है और फ़ाइल किसी तरह खराब हो गई है, तो उसे ठीक काम करना चाहिए। PRO-TIP: इसे एन्क्रिप्ट करें, इसे 'KimKardashianNude.mp4' नाम दें और हजारों लोगों को कनेक्शन के साथ मदद करें। निःशुल्क मुक्त करने के लिए स्वचालित, वितरित बैकअप! :)
एरिक डुमिनील

जैसा कि लिनुस ने खुद कहा है - "केवल विम्प्स टेप बैकअप का उपयोग करते हैं: असली पुरुष बस अपने महत्वपूर्ण सामान को ftp पर अपलोड करते हैं, और बाकी दुनिया को इसे आइना
दिखाते हैं

@ रॉन जॉन मुझे पता है कि इसका आमतौर पर उपयोग नहीं किया जाता है लेकिन इसका मतलब यह नहीं है कि इसका उपयोग नहीं किया जा सकता है। खराब कनेक्शन के साथ बिटोरेंट प्रोटोकॉल बहुत अच्छा है।
लोरेन Pechtel

@LorenPechtel बंदरगाहों को अनुमोदित करने के लिए जोखिम कार्य आदेश, बंदरगाहों को खोलने के लिए एनओसी के लिए एक डब्ल्यूओ, और टोरेंट ग्राहकों को स्थापित करने के लिए लिनक्स और विंडोज टीमों के लिए डब्ल्यूओ, और एक और डब्ल्यूओ उन सभी की निगरानी के लिए ताकि वे अनुमोदित फाइलें हो रही हैं। का तबादला। और उस में से कोई भी HIPPA, PCI या इस तथ्य को ध्यान में नहीं रखता है कि एक फाइल जो प्वाइंट ए से प्वाइंट बी तक जाने वाली है, अब प्वाइंट ए से पॉइंट्स सी, डी, ई, एफ, जी, एच, आई और जे तक जा रही है। प्वाइंट बी RISK के लिए हो रही है कि बहुत ही कारण के लिए अस्वीकृत हो जाएगा।
रॉनजॉन

3

मेरी पिछली नौकरी में भी यही समस्या थी (300GB + ऑफसाइट डेटाबेस बैकअप के साथ (कार्यालय से) अस्थिर कनेक्शन पर)। उपयोगकर्ताओं को लगभग फ़ाइल को डाउनलोड करने में बड़ी समस्या थी। कनेक्शन से पहले 1 जीबी बाहर conked। चूंकि उन्होंने RDP कनेक्शन पर मानक विंडोज कॉपी / पेस्ट फ़ाइल का उपयोग किया था, इसलिए कोई आश्चर्य नहीं।

एक बात जो मुझे पता चली, वह यह थी कि हमारी वीपीएन सेटिंग्स नेटवर्क सेटअप (मुख्य रूप से एमटीयू की लंबाई) के साथ पूरी तरह से बेमेल थीं। दूसरी बात यह है कि इंटरनेट पर सामान की नकल करने के लिए विंडोज की फाइल कॉपियर नहीं बनाई गई है।

मेरा पहला समाधान एक साधारण एफ़टीपी सर्वर था, हालांकि, यह संचरण समय (अक्सर हमारे कनेक्शन पर 3-4 घंटे) की समस्या को हल नहीं करता था।

मेरा दूसरा समाधान सिंटिंघिंग का उपयोग करके फाइलों को सीधे एक इनडोर एनएएस में भेजने के लिए किया गया था । बैकअप पूरा होने के बाद हर रात, सिंक्थिंग ने हमें कार्यालय में एक एनएएस को जो कुछ भी चाहिए था, उसे वापस भेज दिया। न केवल 3+ घंटे ट्रांसमिशन समय की समस्या हल हो गई थी, लेकिन अगर कोई संकट था, तो मुझे डेटा को कूरियर करने के लिए 1-2 घंटे बख्शा गया था। हर सुबह 8 बजे, एनएएस पर फ़ाइलों को अपडेट किया जाएगा, और हमारे पास हमारे बैकअप तैयार थे। यहां तक ​​कि बड़ी फ़ाइलों के साथ (एक बिंदु पर लगभग 700GB डेटाबेस), मुझे अभी तक किसी भी फ़ाइल भ्रष्टाचार या अन्य समस्याओं का अनुभव करना है ...

Syncthing को स्थापित करना और प्रबंधित करना बहुत आसान है और सभी प्लेटफार्मों (यहां तक ​​कि फोन) के लिए उपलब्ध है, और खराब कनेक्शन की बहुत अच्छी हैंडलिंग है। यदि कनेक्शन विफल हो जाता है, तो Syncthing बस कुछ मिनट इंतजार करता है और फिर से कोशिश करता है।

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

सिन्क्थिंग के बारे में एक और अच्छी बात यह है कि इसे केवल फाइल में बदलाव (एक अंतर बैकअप में) सिंक करने के लिए सेट किया जा सकता है ... संभवतः आपकी बैंडविड्थ समस्या का एक हिस्सा हल कर रहा है।


Syncthing का उल्लेख करने के लिए +1 - बैकअप के लिए एक Google ड्राइव / ड्रॉपबॉक्स विकल्प
एडवर्ड टॉर्वाल्ड्स

1

आप एक घटिया कनेक्शन - zmodem पर फ़ाइलों को स्थानांतरित करने के लिए एक पुराने स्कूल समाधान पर विचार कर सकते हैं ।

यह वापस विकसित किया गया था जब 2400 बॉड मॉडेम लोगों को फोन उठाते थे और कनेक्शन को बमबारी करते थे। एक कोशिश के काबिल हो सकता है।


0

आप Kermit का उपयोग करके देख सकते हैं :

सुविधा जो किर्मिट प्रोटोकॉल को अन्य लोगों से अलग करती है, किसी भी प्रकार के कंप्यूटर के किसी भी प्रकार और कनेक्शन के अनुकूलन की अनुमति देने के लिए सेटिंग्स की एक विस्तृत श्रृंखला है - पैकेट की लंबाई, पैकेट एन्कोडिंग, विंडो का आकार, वर्ण सेट, त्रुटि का पता लगाने की विधि, टाइमआउट , ठहराव। अधिकांश अन्य प्रोटोकॉल केवल कुछ प्रकार के या कनेक्शन के गुणों पर काम करने के लिए डिज़ाइन किए गए हैं, और / या कुछ प्रकार के कंप्यूटरों के बीच या फ़ाइल सिस्टम की तरह, और इसलिए अन्यत्र खराब तरीके से काम करते हैं (या बिल्कुल नहीं) और कुछ को प्रस्तुत करते हैं यदि कोई भी तरीका अनियोजित के लिए अनुकूल हो -परिस्थितियों के लिए। दूसरी ओर, Kermit, आपको किसी भी कनेक्शन पर सफल फ़ाइल स्थानांतरण और उच्चतम संभव प्रदर्शन प्राप्त करने की अनुमति देता है। "

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.