एक सर्वर से दूसरे में फ़ाइलों के बारे में 300gb स्थानांतरण


20

मेरे पास लगभग 200,000 फाइलें हैं जिन्हें मैं आज एक नए सर्वर में स्थानांतरित कर रहा हूं। मैंने पहले कभी इतने बड़े पैमाने पर कुछ नहीं किया है, और मैं इस बारे में कुछ सलाह लेना चाहता हूं कि मुझे इस बारे में कैसे जाना चाहिए। मैं उन्हें दो सेंटोस 6 डिस्ट्रो के बीच स्थानांतरित कर रहा हूं, और वे देश के विभिन्न स्थानों में हैं। मेरे पास सभी बड़े निर्देशिकाओं और फ़ाइलों को एक बड़े पैमाने पर टारबॉल में टारगेट करने के लिए मूल सर्वर पर पर्याप्त एचडीडी स्पेस नहीं है, इसलिए मेरा सवाल यह है कि मुझे इन सभी फ़ाइलों को कैसे स्थानांतरित करना चाहिए? rsync? rsync का उपयोग करने का कुछ विशेष तरीका? यह कैसे करना है पर कोई इनपुट / सुझाव आश्चर्यजनक होगा।

धन्यवाद

संपादित करें: सोच रहे लोगों के लिए, मैं इस तरह से screenएक बड़ी rsyncकमांड चलाते समय अत्यधिक सुझाव देता हूं । खासकर जब कुछ मूर्खतापूर्ण हो सकता है और आप सर्वर ए से कनेक्शन खो देते हैं जिससे आप rsyncकमांड चला रहे हैं । फिर बस स्क्रीन को अलग करें और इसे बाद में फिर से शुरू करें।


4
क्या आपने rsyncअभी तक कोशिश की है? शायद फ़ाइलों के एक छोटे से सेट पर या तो? उसके लिए आदर्श उपकरण होना चाहिए।
19

यह लगभग निश्चित रूप से इस काम के लिए सबसे अच्छा साधन नहीं है, लेकिन आप इस तथ्य में दिलचस्पी ले सकते हैं कि आप फ़ाइल को स्थानांतरित करने से पहले किसी फ़ाइल में संपीड़ित करने के बजाय एक ssh कनेक्शन के माध्यम से टार कर सकते हैं:tar cz | ssh user@example.com tar xz
Aesin

2
यह विषय से बाहर हो सकता है, लेकिन (विशेष रूप से प्रारंभिक लोड के लिए, और फिर rsyncबाद के अपडेट के लिए उपयोग किया जा सकता है ): "कभी भी टेप से भरे स्टेशन वैगन की बैंडविड्थ को कम न समझें" (यानी: क्या आपने 2 डी एचडी (या usb2 प्लग करने पर विचार किया है) / usb3 डिस्क), इस पर बैकअप लें, और उस एक को फ़ेडेक्स के माध्यम से दूरस्थ स्थान पर भेजें। यह किसी भी चीज़ की तुलना में अधिक तेज़ हो सकता है, और अन्य उपयोगों के लिए बैंडविड्थ को बचा सकता है।
ओलिवियर डुलैक

मेरे पास एक प्रदाता पर कोई BW सीमा नहीं है, और दूसरा मैं इस महीने तक नहीं पहुंचूंगा। इसलिए मेरे पास वास्तव में इसे बर्बाद करने वाला कोई मुद्दा नहीं है: P
मास्टरगर्ल

1
@OlivierDulac what-if.xkcd.com/31
बॉब

जवाबों:


24

बस शमौन का जवाब देना , rsyncनौकरी के लिए सही उपकरण है:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

मान लें कि आपके पास दूरस्थ मशीन तक पहुंच है, तो आप ऐसा कुछ करना चाहेंगे:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

इस निर्देशिका में कॉपी कर देंगे path/to/local/fooकरने के लिए /path/to/remote/barदूरस्थ सर्वर पर। एक नया उपनिर्देशिका नाम bar/fooबनाया जाएगा। यदि आप केवल एक निर्देशिका की सामग्री को कॉपी करना चाहते हैं , तो लक्ष्य पर उस नाम की निर्देशिका बनाए बिना, एक अनुगामी स्लैश जोड़ें:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

यह foo/दूरस्थ निर्देशिका में सामग्री की प्रतिलिपि बनाएगा bar/

कुछ प्रासंगिक विकल्प:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

तो क्या मैं कर सकता rsync -hrtplu --progressथा अगर मैं प्रगति को देखना चाहता था जैसा वह साथ जा रहा है?
मास्टरगर्ल

@ मैस्टरबेरी यप, बिल्कुल। मेरे पास एक बैकअप स्क्रिप्ट है जो चलती है rsync --progress --stats -hrtl --update source destination
टेराडॉन

मुझे लगता है कि इसे चलाने के लिए मुद्दे हो रहे हैं। rsync -hrtplu --progress --rsh='ssh -p2202'मैं क्या उपयोग कर रहा हूं और यह कनेक्ट नहीं हो सकता है। 255 त्रुटि प्राप्त करते रहें। लेकिन मैं इसे में sshd'd हूँ। इसलिए मुझे पता है कि इसका फ़ायरवॉल नहीं है ... क्या मुझे cmd के माध्यम से भी पासवर्ड प्रदान करने की आवश्यकता है? या यह सिर्फ मुझे इसके लिए नहीं पूछेंगे?
मास्टरबरी

डेरप, एनवीएम। मैं अपने फ़ायरवॉल पर आउटबाउंड ट्रैफ़िक के बारे में भूल गया। धन्यवाद
MasterGberry

महत्वपूर्ण नोट: rsync के साथ, "--delete" का उपयोग करते समय अतिरिक्त सावधानी बरतें: इसके बारे में बहुत कुछ पढ़ें, अन्य (/ tmp / ...) फ़ोल्डरों पर परीक्षण करें, और जब एक अनुगामी जोड़ रहे हों या नहीं तो परिवर्तन से सावधान रहें "/" स्रोत dir (s) या गंतव्य dir के अंत में।
ओलिवियर दुलक

14

यह इस बात पर निर्भर करता है कि इसे कितनी तेजी से कॉपी करने की आवश्यकता है, और कितना बैंडविड्थ उपलब्ध है।

एक खराब नेटवर्क कनेक्शन के लिए टेपों से भरे ट्रक की बैंडविड्थ पर विचार करें। (पढ़ें: एक 2.5 इंच HDD मेल करें, या बस इसे स्वयं वहां चलाएं। 300 गीगाबिट ड्राइव को ढूंढना आसान होना चाहिए)।

यदि यह कम समय के लिए महत्वपूर्ण है या आप बहुत बैंडविड्थ तो rsync महान है। यदि कोई त्रुटि है तो आप पहले की फ़ाइलों को फिर से कॉपी किए बिना जारी रख सकते हैं।

[संपादित करें] मैं यह जोड़ना भूल गया कि यदि आपका डेटा कॉपी के दौरान उपयोग किया जाता है तो आप कई बार rsync चला सकते हैं।

उदाहरण:
1) उपयोग में डेटा। Rsync -> सभी डेटा कॉपी हो जाता है। इसमें कुछ समय लग सकता है।
2) फिर से rsync चलाएँ, केवल बदली हुई फ़ाइलों को कॉपी किया जाता है। यह उपवास होना चाहिए।

आप इसे कई बार कर सकते हैं जब तक कि कोई बदलाव न हो, या आप इसे स्मार्ट / सुरक्षित तरीके से कर सकते हैं, केवल कॉपी के दौरान डेटा को पढ़कर। (उदाहरण के लिए, यदि यह उपयोग किए गए साझा सेट पर है जो केवल पढ़ने के लिए शेयर है। या डेटा को rsync करें, तो रात में शेयर को केवल पढ़ने के लिए सेट करें जबकि आप इसे दूसरी बार चलाते हैं।


1
कोई भी सर्वर ऐसा नहीं होना चाहिए जहाँ बैंडविड्थ 300G को उचित समय में संभाल न सके ...
Dan

1
जो 'उचित' पर निर्भर करता है। कहते हैं कि सबसे कमजोर लिंक 100 mbit है (मुझे परवाह नहीं है अगर वह कार्यालय से अपलोड सीमा है या दूसरे पर डाउनलोड है)। यह मोटे तौर पर 10MB / सेकंड के लिए अनुमति देता है। (10 से div उचित लगता है, मुझे पता है कि आप थोड़ा और प्राप्त कर सकते हैं यदि सभी पूरी तरह से अच्छी तरह से हो जाता है। जैसे कोई और किसी चीज के लिए लाइन का उपयोग नहीं कर रहा है)। 10MB / सेकंड ~~ 600MB / मिनट ~~ 36000MB / घंटा ~~ 36 GB / घंटा ~~ 300GB 8h20min है। जो कि रातोंरात उल्लेखनीय है। वह भी बहुत सारी धारणाएँ बनाता है। उदाहरण के लिए, यदि अपलोड केवल 2 mbit है (हमारे पास उन गति वाले कार्यालय हैं) तो इसे 50 गुना लंबा (415h, या 17.3%) लगता है।
हेन्नेस

ओह! हां, 8-10 वाजिब है, लेकिन मैं वास्तव में कई तरह की धारणाएं बना रहा हूं।
दान

2
@ यदि यह एक आवश्यकता है कि सर्वर ऊपर है और अनुरोधों की सेवा कर रहा है, तो अपस्ट्रीम बैंडविड्थ को संतृप्त करना शायद एक बुरा विचार है। इसलिए आपको कृत्रिम रूप से उस खाते की हस्तांतरण गति को कम करना होगा।
बॉब

6

मैं rsync के लिए जाना होगा! मैं इसे अपने सर्वर से ऑफ़साइट सर्वर पर बैकअप के लिए उपयोग कर रहा हूं और यह ठीक काम करता है। आमतौर पर नकल करने के लिए कुछ MB होते हैं लेकिन कुछ दिनों में यह 20-30GB तक हो जाता है और यह समस्या के बिना काम करता है।


0

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


इस उत्तर की भाषा और शैली को सुधारने की आवश्यकता है।
FSMaxB

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

will took nearly about 10h. It will be better to copy data on HDD and move them between server.सिवाय इसके कि यह देश भर में है, इसलिए इसे अधिक समय लगेगा।
रोब

@FSMaxB: मैं इसे बाद में, thx करूँगा।
पावेल

@Rob: मैंने इसे पढ़ा है;) कि सर्वर दो अलग-अलग स्थानों पर हैं। इसलिए, आपको यह गणना करने की आवश्यकता है कि आपके लिए क्या बेहतर होगा। देश भर में यात्रा करना (ईंधन, आदि की लागत की जांच करना) या नेटवर्क कनेक्शन का उपयोग करना। इससे ज्यादा फायदेमंद क्या होगा।
पावेल

0

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

tar cf - * | ( cd /target; tar xfp -)

अगली बार ssync का उपयोग करें


यदि आपके पास पर्याप्त सीपीयू शक्ति है तो आप लूप में गज़िप जोड़कर इस पर सुधार कर सकते हैं। और NFS के बिना आप netcat का उपयोग कर सकते हैं। (या यहां तक ​​कि दोनों: tar -cf - * | gzip | nc -p 4567औरnc -l 4567 | gunzip | tar xf -
हेन्स

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