सवाल दो सर्वरों के बीच बड़ी संख्या में फ़ाइलों की प्रतिलिपि कैसे कॉपी करें


मुझे दो सेवा (उबंटू) के बीच बड़ी संख्या में एमपी 3 स्थानांतरित करने की आवश्यकता है। विशाल से मेरा मतलब है कि लगभग 300 मिलियन औसतन एक लाख फाइलें हैं। मैंने कोशिश की scp लेकिन यह लगभग एक सप्ताह ले लिया होगा। (लगभग 500 केबी / एस) अगर मैं HTTP द्वारा एक फ़ाइल को स्थानांतरित करता हूं, तो मुझे 9-10 एमबी / एस मिलता है, लेकिन मुझे नहीं पता कि उन सभी को कैसे स्थानांतरित किया जाए।

क्या उन सभी को जल्दी से स्थानांतरित करने का कोई तरीका है?


81
2018-06-02 19:55


मूल


सर्वर के बीच आपके पास किस प्रकार का नेटवर्क है। मैंने प्रत्येक मशीन में 1 एनआईसी के बीच एक जीबी ईथरनेट क्रॉसओवर का उपयोग किया है। एससीपी का उपयोग कर उस कॉन्फ़िगरेशन में डालकर मुझे बहुत अच्छा लगा - Jim Blizard
आप जांच कर सकते हैं कि एसपीपी इतनी धीमी क्यों है। यह धीमा हो सकता है तो एन्क्रिप्शन की वजह से ftp जैसी चीजें लेकिन यह इतना धीमी नहीं होनी चाहिए। - Zoredache
मेरे बीच 100 एमबीपीएस है। छोटी फाइलों पर एसपीपी धीमा है (उनमें से ज्यादातर छोटे हैं) - nicudotro


जवाब:


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

tar -c /path/to/dir | ssh remote_server 'tar -xvf - -C /absolute/path/to/remotedir'

मैकिनटोश की टिप्पणी के अनुसार यह वह आदेश है जिसका उपयोग आप rsync के लिए करेंगे

rsync -avW -e ssh /path/to/dir/ remote_server:/path/to/remotedir

109
2018-06-02 20:04



+1 टैर विकल्प बड़ी संख्या में छोटी फ़ाइलों के लिए कहीं अधिक कुशल है क्योंकि दोनों scp और rsync में नेटवर्क पर प्रति फ़ाइल कई और गोल यात्राएं होंगी। - Sekenre
आरएसआईएनसी ने टैर की तुलना में मेरे लिए बेहतर काम किया - nicudotro
इसके अलावा, यदि आपके पास बहुत सी सीपीयू उपलब्ध है (दोनों सिरों पर), लेकिन (कम से कम) मेजबानों के बीच एक धीमी लिंक है, तो यह टैर कमांड में संपीड़न (gzip या bzip) को सक्षम करने योग्य हो सकता है। - Vatine
@ जैमी: यदि आप एसएसएच एजेंट का उपयोग कर रहे हैं, तो इसका इस्तेमाल किया जाना चाहिए। अन्यथा यह निर्दिष्ट करने के लिए केवल '-i' विकल्प का उपयोग करें कि निजी कुंजी कहां खोजें। विवरण के लिए मैन पेज देखें। - Scott Pack
@niXar द ~ बचने वाला चरित्र केवल तभी सक्षम होता है जब एसएसएच टर्मिनल का उपयोग कर रहा हो। यह तब नहीं है जब आप रिमोट कमांड निर्दिष्ट करते हैं (जब तक आप पास नहीं करते -t विकल्प)। तो आपकी चिंता अमान्य है। - Gilles


बाहरी हार्ड ड्राइव और उसी दिन कूरियर डिलीवरी।


32
2018-06-02 20:00



हे हे ... कोई नेटवर्किंग तकनीक 90 एमपीएच करने वाले टेपों से भरे स्टेशन स्टेशन वैगन की बैंडविड्थ धड़कता है, आह? (snicker) मुझे लगता है कि वह एक लैन पर था क्योंकि उसने कहा कि वह HTTP के साथ 9-10 एमबी / सेकंड हो रहा था। - Evan Anderson
मुझे इंटरनेट पर उस तरह की गति मिलती है, लेकिन मैं बस भाग्यशाली हूं जहां मैं रहता हूं! यदि यह एक लैन पर है, तो अभी भी सस्ता है! - Adam
आह - आपके स्थान पर नहीं देखा। हाँ - मैंने सुना है कि कोरिया में इंटरनेट कनेक्टिविटी बहुत शानदार है। अमेरिका में यहां फंस गया, मुझे नेट पर 900 केबी / सेकंड प्राप्त करने में खुशी हुई ... - Evan Anderson
हां, लेकिन आप डाउनलोड को पूरा करने की प्रतीक्षा कर रहे हैं, जबकि आप स्वादिष्ट burritos प्राप्त कर सकते हैं और सियोल में केवल तीन अर्द्ध सभ्य मेक्सिकन रेस्तरां हैं ... - Adam


मैं rsync का उपयोग करेंगे।

यदि आप उन्हें निर्देशिका सूची के साथ HTTP के माध्यम से निर्यात कर चुके हैं, तो आप भी wget और themirror तर्क का उपयोग कर सकते हैं।

आप पहले ही देख रहे हैं कि HTTP एससीपी की तुलना में तेज़ है क्योंकि एससीपी सब कुछ एन्क्रिप्ट कर रहा है (और इस प्रकार सीपीयू पर बाधा डाल रहा है)। HTTP और rsync तेज़ी से आगे बढ़ने जा रहे हैं क्योंकि वे एन्क्रिप्ट नहीं कर रहे हैं।

उबंटू पर rsync स्थापित करने पर कुछ दस्तावेज़ यहां दिए गए हैं: https://help.ubuntu.com/community/rsync

वे दस्तावेज़ एसएसएच पर सुरंग rsync के बारे में बात करते हैं, लेकिन यदि आप बस एक निजी लैन पर डेटा ले जा रहे हैं तो आपको एसएसएच की आवश्यकता नहीं है। (मुझे लगता है कि आप एक निजी लैन पर हैं। अगर आपको इंटरनेट पर 9-10 एमबी / सेकेंड मिल रहा है तो मैं जानना चाहता हूं कि आपके पास किस प्रकार के कनेक्शन हैं!)

यहां कुछ अन्य बहुत ही बुनियादी दस्तावेज़ हैं जो आपको एक सापेक्ष असुरक्षित rsync सर्वर (एसएसएच पर डब्ल्यू / कोई निर्भरता) स्थापित करने की अनुमति नहीं देंगे: http://transamrit.net/docs/rsync/


16
2018-06-02 19:57



जबकि एससीपी डेटा को एन्क्रिप्ट करने के लिए वास्तव में कुछ सीपीयू का उपयोग करता है, मुझे नहीं लगता कि उसके पास 100% सीपीयू उपयोग है, इसलिए सीपीयू एक बाधा नहीं है। मैंने बहुत बार देखा है कि तेजी से स्थानान्तरण की बात आने पर एससीपी अक्षम है। - Cristian Ciupitu
यह देखते हुए कि वह एससीपी के लिए 300 के और एचटीएमएल के लिए 9 एमबी देख रहा था, मैंने माना कि एक एससीपी से संबंधित बाधा (आमतौर पर सीपीयू) खेल में आ रही थी। यह निश्चित रूप से कुछ और हो सकता है, हालांकि। प्रश्नों में मशीनों के हार्डवेयर चश्मे को जानना डब्ल्यू / ओ कहना मुश्किल है। - Evan Anderson
rsync लगभग निश्चित रूप से परिवहन के लिए एसएसएच का उपयोग करेगा, क्योंकि यह डिफ़ॉल्ट व्यवहार है, इसलिए एसपीपी में एन्क्रिप्शन के कारण होने वाले किसी भी ओवरहेड भी rsync में मौजूद होगा - Daniel Lawson
"आप पहले ही देख रहे हैं कि HTTP एससीपी से तेज है क्योंकि एससीपी सब कुछ एन्क्रिप्ट कर रहा है" → गलत। जब तक कि उसके पास 10 साल का सर्वर न हो, वह इस कार्य पर सीपीयू नहीं लगाएगा। - niXar
@RamazanPOLAT - आपके पास एक कमांड लाइन है जो बहुत लंबी है। फ़ाइल चयन को अलग-अलग निर्दिष्ट करें और यह आपके लिए ठीक काम करेगा। आम तौर पर आप अंत में एक वाइल्डकार्ड स्रोत निर्देशिका w / o निर्दिष्ट कर सकते हैं। आप भी इसका उपयोग कर सकते हैं --include तथा --exclude अधिक nuanced पाने के लिए तर्क। - Evan Anderson


बहुत चर्चा के बिना, netcat, नेटवर्क swissarmy चाकू का उपयोग करें। कोई प्रोटोकॉल ओवरहेड नहीं, आप सीधे नेटवर्क सॉकेट पर प्रतिलिपि बना रहे हैं। उदाहरण

srv1$ tar cfv - *mp3 | nc -w1 remote.server.net 4321

srv2$ nc -l -p 4321 |tar xfv -

14
2018-06-02 20:17



दुर्भाग्यवश, मैंने जो देखा है उससे नेटकैट बहुत अक्षम है, भले ही यह नहीं होना चाहिए। - Cristian Ciupitu
मैं तुम्हें कम कर रहा हूं क्योंकि यह वास्तव में, वास्तव में भयानक सलाह है। एक सही जवाब है: rsync। मैं सभी कारणों को सूचीबद्ध कर सकता हूं कि यह बेहतर क्यों है लेकिन यह इस पृष्ठ पर फिट नहीं होगा, इस छोटे से टिप्पणी बॉक्स को अकेले छोड़ दें। - niXar
@niXar: यदि आप केवल एक फ़ाइल स्थानांतरण करना चाहते हैं (आगे सिंक करने की कोई आवश्यकता नहीं है), तो टैरपिप वास्तव में आपको चाहिए। - Witiko
@niXar netcat ठीक है अगर आप इसे सुरक्षित वातावरण में निजी vlan और / या VPN से अधिक कर रहे हैं। - Lester Cheung


यदि आप rsync के साथ जाते हैं तो बहुत सी फाइलों के साथ, मैं दोनों सिरों पर संस्करण 3 या ऊपर पाने की कोशिश करता हूं। इसका कारण यह है कि एक कम संस्करण ट्रांसफर शुरू करने से पहले प्रत्येक फ़ाइल को गिनती करेगा। नई सुविधा कहा जाता है वृद्धिशील-प्रत्यावर्तन

एक नया incremental-recursion एल्गोरिदम   अब rsync बात कर रहा है जब अब प्रयोग किया जाता है         एक और 3.x संस्करण के लिए। यह स्थानांतरण जल्दी से शुरू होता है         (सभी फाइलें मिलने से पहले), और बहुत कम स्मृति की आवश्यकता है।         कुछ प्रतिबंधों के लिए मैनपेज में - रिकर्सिव विकल्प देखें।


8
2018-06-02 20:41





rsync, दूसरों की तरह पहले से ही सिफारिश की है। अगर एन्क्रिप्शन से सीपीयू ओवरहेड एक बाधा है, तो कम सीपीयू गहन एल्गोरिदम का उपयोग करें, जैसे कि फ्लैशफिश। जैसे कुछ इस तरह

rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path


7
2018-06-02 20:56



सिफर बदलने के बारे में बिंदु के लिए +1 - Daniel Lawson
सीपीयू एक बाधा नहीं होने वाला है, जब तक आपके पास 10 जी ईथरनेट और 10 वर्षीय सीपीयू न हो। - niXar
बस टिप्पणी करें: सिफर "-सी आर्कफॉर" तेज है। - Arman
@niXar: लेकिन अगर आपके पास पहले से ही आपकी मशीन पर एक सीपीयू उपभोग करने वाला कार्य है, तो यह एक चिंता है। - Isaac


बड़ी संख्या में फाइलों की प्रतिलिपि बनाते समय, मैंने पाया कि टैर और आरएसआईएनसी जैसे टूल्स कई फाइलें खोलने और बंद करने के ऊपरी हिस्से की वजह से अधिक अक्षम हैं। मैंने फास्ट-आर्काइवर नामक एक ओपन सोर्स टूल लिखा जो इन परिदृश्यों के लिए टैर से तेज़ है: https://github.com/replicon/fast-archiver; यह एकाधिक समवर्ती फ़ाइल संचालन करके तेजी से काम करता है।

यहां दो मिलियन से अधिक फ़ाइलों के बैकअप पर फास्ट-आर्काइवर बनाम टैर का एक उदाहरण दिया गया है; फास्ट-आर्काइव को संग्रह में 27 मिनट लगते हैं, बनाम टैर 1 घंटे 23 मिनट लेते हैं।

$ time fast-archiver -c -o /dev/null /db/data
skipping symbolic link /db/data/pg_xlog
1008.92user 663.00system 27:38.27elapsed 100%CPU (0avgtext+0avgdata 24352maxresident)k
0inputs+0outputs (0major+1732minor)pagefaults 0swaps

$ time tar -cf - /db/data | cat > /dev/null
tar: Removing leading `/' from member names
tar: /db/data/base/16408/12445.2: file changed as we read it
tar: /db/data/base/16408/12464: file changed as we read it
32.68user 375.19system 1:23:23elapsed 8%CPU (0avgtext+0avgdata 81744maxresident)k
0inputs+0outputs (0major+5163minor)pagefaults 0swaps

सर्वर के बीच फ़ाइलों को स्थानांतरित करने के लिए, आप एसएसएच के साथ फास्ट-आर्काइवर का उपयोग कर सकते हैं, इस तरह:

ssh postgres@10.32.32.32 "cd /db; fast-archive -c data --exclude=data/\*.pid" | fast-archiver -x

4
2017-08-26 20:51





कल 80 टीबी डेटा (लाखों छोटी फाइलें) को स्थानांतरित करने में, से स्विचिंग rsync सेवा मेरे tar  बहुत तेज़ साबित हुआ, जैसा कि हमने कोशिश करना बंद कर दिया

# slow
rsync -av --progress /mnt/backups/section01/ /mnt/destination01/section01

और स्विच किया tar बजाय...

# fast
cd /mnt/backups/
tar -cf - section01 | tar -xf - -C /mnt/destination01/ 

चूंकि ये सर्वर एक ही लैन पर हैं, गंतव्य एनएफएस-स्रोत सिस्टम पर आरोहित है, जो पुश कर रहा है। इसे और भी तेज नहीं बनाते, हमने तय नहीं किया कि इसे संरक्षित न किया जाए atime फाइलों का:

mount -o remount,noatime /mnt/backups
mount -o remount,noatime /mnt/destination01

नीचे दिया गया ग्राफ़िक आरएसआईएनसी से टैर किए गए बदलाव में अंतर को दर्शाता है। यह मेरा था मालिक की विचार और मेरा साथ काम करने वाला दोनों ने इसे निष्पादित किया और महान बना दिया अपने ब्लॉग पर लेखन। मैं सिर्फ पसंद करता हूँ आकर्षक तस्वीरे। :)

rsync_vs_tar


3
2018-04-04 10:32



एक हैकर मैं विश्वास करता हूं कि "एनएफएस के बजाय टीसी पर टैर भी तेज हो सकता है"। अर्थात। tar cf - directory | ttcp -t dest_machine से ftp.arl.mil/mike/ttcp.html - Philip Durbin
असंबंधित प्रश्न, लेकिन वह ग्राफ कहां से है? - CyberJacob


मैं टैर के माध्यम से उपयोग करता हूँ netcat साथ ही दृष्टिकोण, मैं उपयोग करना पसंद करते हैं socat - आपकी स्थिति के लिए अनुकूलित करने के लिए बहुत अधिक शक्ति - उदाहरण के लिए, एमएसएस tweaking द्वारा। (इसके अलावा, अगर आप चाहते हैं तो हंसी, लेकिन मुझे लगता है socat तर्क याद रखना आसान है क्योंकि वे सुसंगत हैं)। तो मेरे लिए, यह हाल ही में बहुत आम है क्योंकि मैं चीजों को नए सर्वर पर ले जा रहा हूं:

host1$ tar cvf - filespec | socat stdin tcp4:host2:portnum

host2$ socat tcp4-listen:portnum stdout | tar xvpf -

उपनाम वैकल्पिक हैं।


3
2018-06-03 06:38





एक और विकल्प है सामंजस्य। इस मामले में रुपये के मुकाबले थोड़ी अधिक कुशल हो सकती है, और श्रोता को स्थापित करना कुछ आसान है।


2
2018-06-02 20:00





ऐसा लगता है कि शीर्ष उत्तर में कुछ टाइपो हो सकते हैं। यह बेहतर काम कर सकता है:

tar -cf - /path/to/dir | ssh remote_server 'tar -xvf - -C /path/to/remotedir'

2
2018-06-02 22:10



मैंने पाया कि जब मैं -f विकल्प का उपयोग करता था तो आदेश विफल हुआ। - user11749
@ user11749: उस कमांड में दो-एफ विकल्प हैं, जिनमें से दोनों आवश्यक हैं। क्या आप पृष्ठभूमि में जाने के लिए एसएस को पास करने के बारे में बात कर रहे हैं? - retracile