एक लिनक्स सर्वर से दूसरे में बड़ी फाइल कॉपी करें


20

मैं हमारे ला डेटा केंद्र में एक लिनक्स सर्वर से एक 10 गीगाबाइट लिंक पर एक अन्य लिनक्स सर्वर में हमारे लिनक्स डेटा केंद्र में 75 गीगाबाइट tgz (mysql lvm स्नैपशॉट) को कॉपी करने का प्रयास कर रहा हूं।

मुझे rsync या scp के साथ लगभग 20-30Kb / s मिल रहा है जो 200-300 घंटों के बीच उतार-चढ़ाव करता है।

फिलहाल यह एक अपेक्षाकृत शांत लिंक है क्योंकि दूसरा डेटा सेंटर अभी तक सक्रिय नहीं है और मैंने छोटी फ़ाइल स्थानांतरण से उत्कृष्ट गति प्राप्त की है।

मैंने अलग-अलग tcp ट्यूनिंग गाइडों का अनुसरण किया है जो मैंने बिना किसी लाभ के Google के माध्यम से पाया है (शायद मैं गलत गाइड पढ़ रहा हूं, एक अच्छा एक मिल गया है)।

मैंने टार + नेटकैट टनल टिप देखा है, लेकिन मेरी समझ यह है कि यह केवल छोटी फ़ाइलों के बहुत सारे के लिए अच्छा है जब फ़ाइल प्रभावी रूप से स्थानांतरित होने पर आपको अपडेट नहीं करती है।

इससे पहले कि मैं हार्ड ड्राइव को शिपिंग करने का सहारा लूं, क्या किसी के पास कोई अच्छा इनपुट है?

अद्यतन: ठीक है ... यह लिंक के बाद हो सकता है :( नीचे मेरे परीक्षण देखें ...

NY से LA में स्थानांतरण:

एक रिक्त फ़ाइल हो रही है।

[nathan@laobnas test]$ dd if=/dev/zero of=FROM_LA_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.412 seconds, 164 MB/s
[nathan@laobnas test]$ scp -C obnas:/obbkup/test/FROM_NY_TEST .
FROM_NY_TEST                                    3%  146MB   9.4MB/s   07:52 ETA

स्नैपशॉट टारबॉल प्राप्त करना।

[nathan@obnas db_backup]$ ls -la db_dump.08120922.tar.gz
-rw-r--r-- 1 root root 30428904033 Aug 12 22:42 db_dump.08120922.tar.gz

[nathan@laobnas test]$ scp -C obnas:/obbkup/db_backup/db_dump.08120922.tar.gz .
db_dump.08120922.tar.gz            0%   56MB 574.3KB/s 14:20:40 ET

LA से NY में स्थानांतरण:

एक रिक्त फ़ाइल हो रही है।

[nathan@obnas test]$ dd if=/dev/zero of=FROM_NY_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.2501 seconds, 165 MB/s
[nathan@obnas test]$ scp -C laobnas:/obbkup/test/FROM_LA_TEST .
FROM_LA_TEST                                    0% 6008KB 497.1KB/s 2:37:22 ETA

स्नैपशॉट टारबॉल प्राप्त करना।

[nathan@laobnas db_backup]$ ls -la db_dump_08120901.tar.gz
-rw-r--r-- 1 root root 31090827509 Aug 12 21:21 db_dump_08120901.tar.gz

[nathan@obnas test]$ scp -C laobnas:/obbkup/db_backup/db_dump_08120901.tar.gz .
db_dump_08120901.tar.gz                0%  324KB  26.8KB/s 314:11:38 ETA

मुझे लगता है कि मैं इसे उन लोगों के साथ ले जाऊंगा जो हमारी सुविधाओं को चलाते हैं लिंक को एमपीएलएस / ईथरनेट 10 एमबी लिंक के रूप में लेबल किया गया है। (कंधे उचकाने की क्रिया)


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

आप किस तरह की विलंबता देख रहे हैं?
रेट्रोस्टाइल

लिंक पर लगभग 80 एमएस।
नाथन मिलफोर्ड

हाँ, अब मैं केवल भ्रमित और निराश हूँ। मैंने इसे 50mb विखंडू में विभाजित किया है और यह अब भी धीरे-धीरे चलता है! लेकिन rsyncing अन्य डेटा 500kb / s हो जाता है ... वहाँ कुछ बहुत गलत होना चाहिए मुझे याद आ रही है ....
नाथन मिलफोर्ड

के साथ अपने यातायात का निरीक्षण करें tcpdump। यह पता लगाने में आपकी मदद कर सकता है कि स्थानांतरण में क्या कमी आई है।
lexsys

जवाबों:


16

चुपके से कोई?

यह मानते हुए कि यह एक बार की प्रतिलिपि है, मुझे लगता है कि फ़ाइल को सीडी (या अन्य मीडिया) में कॉपी करना संभव नहीं है और रात भर इसे गंतव्य तक पहुँचाया जा सकता है?

यह वास्तव में उस आकार के फ़ाइल स्थानांतरण के रूप में आपका सबसे तेज़ विकल्प हो सकता है, उस कनेक्शन पर, सही तरीके से कॉपी नहीं हो सकता है ... जिस स्थिति में आपको फिर से शुरू करना है।


rsync

मेरी दूसरी पसंद / प्रयास rsync होगा क्योंकि यह पता लगाता है कि यह विफल स्थानान्तरण, आंशिक स्थानान्तरण आदि का पता लगा सकता है और जहाँ इसे छोड़ा गया था वहाँ से उठा सकता है।

rsync --progress file1 file2 user@remotemachine:/destination/directory

--प्रोग्रेस फ़्लैग आपको बस वहां बैठने के बजाय कुछ प्रतिक्रिया देगा और आपको खुद दूसरे अनुमान लगाने के लिए छोड़ देगा। :-)


वुज़ (बिटटोरेंट)

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

मुझे लगता है कि आपकी स्थिति पर निर्भर करता है।

सौभाग्य!


अपडेट करें:

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


3
+1, हालाँकि इस मामले में संभवतः लागत-कुशल नहीं है। हार्ड ड्राइव से भरे 747 के बैंडविड्थ को कभी भी कम न
समझें

2
मुझे लिंक नहीं मिला, लेकिन कुछ साल पहले Google चारों ओर ड्राइव के शिपिंग बक्से को देख रहा था। यदि आप बिंदु A से बिंदु B तक 500TB की कुल ड्राइव ड्राइव कर सकते हैं, तो किसी भी तरह से आप इसे काट सकते हैं जो कुछ शक्तिशाली फाइन बैंडविड्थ है
STW

2
शायद आप इस लेख का जिक्र कर रहे हैं: arstechnica.com/science/news/2007/03/…
KPWINC

1
हाँ, मैं एक हार्ड ड्राइव शिपिंग समाप्त हो गया। वास्तविक समस्या, या इसलिए मुझे बताया गया था, स्विच (तों) पर प्रवाह नियंत्रण था।
नाथन मिलफोर्ड

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

7

मैंने अतीत में 60GB tbz2 फ़ाइल के साथ ऐसा किया है। मेरे पास अब स्क्रिप्ट नहीं है लेकिन इसे फिर से लिखना आसान होना चाहिए।

सबसे पहले, अपनी फ़ाइल को ~ 2GB के टुकड़ों में विभाजित करें:

split --bytes=2000000000 your_file.tgz

प्रत्येक टुकड़े के लिए, MD5 हैश की गणना करें (यह अखंडता की जांच करना है) और इसे कहीं स्टोर करें, फिर अपनी पसंद के टूल के साथ दूरस्थ साइट पर टुकड़ों और उनके md5 को कॉपी करना शुरू करें (मुझे: स्क्रीन में netcat-tar-पाइप सत्र)।

थोड़ी देर बाद, md5 से जांचें कि क्या आपके टुकड़े ठीक हैं, तो:

cat your_file* > your_remote_file.tgz

यदि आपने मूल फ़ाइल का MD5 भी किया है, तो उसे भी जांचें। यदि यह ठीक है, तो आप अपनी फ़ाइल को खोल सकते हैं, सब कुछ ठीक होना चाहिए।

(यदि मुझे समय मिल जाए, तो मैं स्क्रिप्ट फिर से लिखूंगा)


5

आम तौर पर मैं rsync का बहुत बड़ा पैरोकार हूँ, लेकिन जब पहली बार किसी फ़ाइल को स्थानांतरित किया जाता है, तो यह बहुत मायने नहीं रखता। यदि, हालांकि, आप फ़ाइल को केवल मामूली अंतर के साथ स्थानांतरित कर रहे थे, तो rsync स्पष्ट विजेता होगा। यदि आप वैसे भी rsync का उपयोग करना चुनते हैं, तो मैं --daemonप्रदर्शन-हत्या ssh सुरंग को खत्म करने के लिए मोड में एक छोर चलाने की अत्यधिक सलाह देता हूं । मैन पेज इस मोड का काफी अच्छी तरह से वर्णन करता है।

मेरी सिफारिश? FTP और HTTP सर्वर और क्लाइंट के साथ जो बाधित डाउनलोड को फिर से शुरू करने का समर्थन करते हैं। दोनों प्रोटोकॉल तेज और हल्के हैं, ssh-tunnel पेनल्टी से बचते हैं। Apache + wget तेजी से चिल्ला रही होगी।

नेटकैट पाइप ट्रिक भी ठीक काम करेगी। एक बड़ी फ़ाइल को स्थानांतरित करते समय टार आवश्यक नहीं है। और इसका कारण यह होने पर आपको सूचित नहीं करता है क्योंकि आपने इसे नहीं बताया था। -q0सर्वर की ओर एक ध्वज जोड़ें और यह वैसा ही व्यवहार करेगा जैसा आप अपेक्षा करेंगे।

सर्वर $ nc -l -p 5000> outfile.tgz

क्लाइंट $ nc -q0 server.example.com 5000 <infile.tgz

Netcat दृष्टिकोण के लिए नकारात्मक पक्ष यह है कि यह आपके स्थानांतरण को फिर से शुरू करने की अनुमति नहीं देगा यदि आपका स्थानांतरण 74GB में मर जाता है ...


Rsyncd के लिए +1। मैं वास्तव में अपने LAN पर स्थानांतरण के लिए इसका उपयोग करता हूं क्योंकि मैं CIFS या NFS की तुलना में उच्चतर थ्रूपुट देखता हूं।
ओफिडियन

1
जबकि FTP और HTTP डेटा को एन्क्रिप्ट नहीं करने के लिए "ssh-tunnel पेनल्टी" "दंड" से बचने की जरूरत है।
जे। मोनी

3

नेटकट (कभी-कभी एनसी कहा जाता है) को एक शॉट दें। निम्नलिखित एक निर्देशिका पर काम करता है, लेकिन यह सिर्फ एक फ़ाइल का मुकाबला करने के लिए काफी आसान होना चाहिए।

गंतव्य बॉक्स पर:

netcat -l -p 2342 | tar -C /target/dir -xzf -

स्रोत बॉक्स पर:

tar czf * | netcat target_box 2342

आप फ़ाइल को पहले से ही संपीड़ित होने के कारण थोड़ा अधिक गति के लिए दोनों टार कमांड में 'z' विकल्प को हटाने का प्रयास कर सकते हैं।


1

डिफ़ॉल्ट SCP और Rsync (जो SCP का उपयोग करता है) बड़ी फ़ाइलों के लिए बहुत धीमी है। मुझे लगता है कि मैं कम ओवरहेड के साथ एक प्रोटोकॉल का उपयोग करूंगा। क्या आपने एक सरल एन्क्रिप्शन साइबरफ़ॉर्म का उपयोग करने की कोशिश की है, या बिल्कुल भी गैर? --rshस्थानांतरण विधि को बदलने के लिए rsync के विकल्प को देखने का प्रयास करें ।

FTP या HTTP क्यों नहीं?


1
मैंने ol '"python -m SimpleHTTPServer" को कमांडलाइनफू से स्रोत पर किया और फ़ाइल को गंतव्य पर भूल गया। मुझे अभी भी "18.5K / s eta 15d 3h" मिलता है
नाथन मिलफोर्ड

1

हालाँकि यह स्थिति में एक बिट ओवरहेड जोड़ता है बिटटोरेंट वास्तव में बड़ी फ़ाइलों को स्थानांतरित करने का एक बहुत अच्छा समाधान है। बिटटोरेंट में बहुत अच्छी विशेषताएं हैं जैसे कि मूल रूप से फाइल को चैंकना और प्रत्येक चंक को चेक करना जो भ्रष्ट हो सकते हैं।

एक कार्यक्रम जैसे कि Azureus [जिसे अब Vuze के रूप में जाना जाता है] में वे सभी टुकड़े होते हैं जिनकी आपको एक ऐप में सर्वर बनाने और डाउनलोड करने की आवश्यकता होती है। बीन इन अज़्यूरस बिटटॉरेंट के लिए उपलब्ध समाधानों में से सबसे अधिक दुबला नहीं है और मुझे लगता है कि इसके जीयूआई की भी आवश्यकता है - हालांकि लाइनक्स के लिए बहुत सारे कमांड लाइन संचालित टोरेंट टूल हैं।


बीटी केवल प्रत्यक्ष हस्तांतरण की तुलना में तेजी से बढ़ता है अगर कई बीज होते हैं। उसके पास एक ही स्रोत है। इससे भी महत्वपूर्ण बात, उसके पास एक एकल स्रोत नेटवर्क है जिसमें खराब नेटवर्क कनेक्शन है। यहां तक ​​कि फ़ाइल को स्थानीय रूप से कई स्थानों पर कॉपी करना और फिर उस खराब कनेक्शन के कारण कई बीजों के साथ बीटी सेट करना काउंटर उत्पादक है। इसके अलावा कई प्रतियाँ बनाने और उन्हें बीज के रूप में स्थापित करने के लिए इसे कम करने के बजाय प्रतिलिपि समय को गुणा किया जाता है। बीपी एक व्यावहारिक समाधान हो सकता है अगर ओपी एक बड़ी फ़ाइल को कई प्राप्तकर्ताओं के लिए उपलब्ध कराने की कोशिश कर रहा था।
Xalorous

0

खैर, व्यक्तिगत रूप से, 20-30Kb / s 10Mb (10Mb और 10MB नहीं) लिंक के लिए बहुत कम लगता है।

यदि मैं आप होता, तो मैं दो कामों में से एक करता (मान लीजिए कि भौतिक पहुँच उपलब्ध नहीं है) -

या तो एक, मैं आपको बड़ी फ़ाइल को छोटे हिस्से में विभाजित करने की सलाह देता हूं, 500 एमबी के आस-पास संक्रमण में भ्रष्टाचार का बस।

जब आपके पास छोटा हिस्सा होता है, तो या तो rsync फिर से उपयोग करें, या मैं व्यक्तिगत रूप से एक निजी सुरक्षित एफ़टीपी सत्र का उपयोग करना पसंद करता हूं, और फिर पूरा होने पर फाइलों को सीआरसी।


0

कुछ प्रश्न चर्चाओं में मदद कर सकते हैं: डेटा को स्थानांतरित करना कितना महत्वपूर्ण है? क्या यह आपदा वसूली, हॉट बैकअप, ऑफलाइन स्टोरेज या क्या है? क्या आप डेटाबेस को बैकअप करने का इरादा कर रहे हैं, जबकि यह ऊपर या नीचे है? दूरस्थ प्रणाली में एक डेटाबेस स्थापित करने के बारे में क्या है और उन्हें या तो क्लस्टरिंग या चेंजगॉग्स के माध्यम से अपडेट करने के लिए सिंक में रखें (मैं पूरी तरह से MySql डेटाबेस सिस्टम की क्षमताओं पर पारंगत नहीं हूं)। यह लिंक के माध्यम से स्थानांतरित करने के लिए आवश्यक डेटा की मात्रा को कम करने में मदद कर सकता है।


यह एक अन्य MYSQL प्रतिकृति (हमारे मुख्य MYSQL उदाहरण के कहीं और) का LVM स्नैपशॉट है। एक बार स्थानांतरित और गंतव्य mysql उदाहरण स्थित होने पर बस उस स्नैपशॉट (इसे डेल्टा के रूप में उपयोग करें) और जहां मास्टर अभी है, के बीच अंतर को अपडेट कर सकते हैं। यह एक MYSQL बैकअप प्रासंगिक नहीं है, यह केवल डेटा का एक बड़ा हिस्सा है जिसे मुझे केवल एक बार स्थानांतरित करने की आवश्यकता है।
नाथन मिलफोर्ड

0

bbcp आपके लिए फ़ाइल को chunk करेगा और कई स्ट्रीम के साथ कॉपी करेगा।


0

गोगलर्स के लिए देर से जवाब:

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

यदि स्रोत फ़ाइलें भौतिक परिवहन के दौरान बदल जाती हैं, या यदि परिवहन मीडिया भरता है, तो आप केवल --only-write-बैच दोहरा सकते हैं जहाज | - अप-बैच-चक्र जब तक गंतव्य सभी को पकड़ नहीं लिया जाता है।

(संदर्भ: मैं rsync में इस सुविधा के लेखकों में से एक था - अधिक पृष्ठभूमि और उपयोग के मामलों के लिए, प्रोटोटाइप कार्यान्वयन की इस चर्चा को देखें: https://lists.samba.org/archive/rsync/2005-March/011964 .html )

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