सवाल 55 जीबी छवियों को नए सर्वर में स्थानांतरित करने का सबसे तेज़ तरीका


मेरे पास वर्तमान में दो CentOS सर्वर हैं। मुझे यह जानने की ज़रूरत है कि छवि निर्देशिका और एससीपी को "टैर" करने का सबसे तेज़ तरीका कैसा होगा?

क्या यह सबसे तेज़ तरीका है जिसे मैंने अभी सुझाव दिया है, क्योंकि टैरिंग हमेशा के लिए ले रहा है ... मैंने आदेश चलाया:

tar cvf imagesbackup.tar images

और मैं इसे खत्म करने जा रहा था।

अगर कोई तेज रास्ता है तो मुझे बताएं। मेरे पास दोनों मशीनों के लिए दूरस्थ / एसएसएच पहुंच है।


61
2017-12-02 12:39


मूल


Sneakernet? - Nick T
देख unix.stackexchange.com/questions/227951/... - rogerdpack


जवाब:


अपनी स्थानीय डिस्क पर लिखने के लिए टैर का उपयोग करने के बजाय, आप सीधे ssh का उपयोग कर नेटवर्क पर रिमोट सर्वर पर लिख सकते हैं।

server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"

आपके "ssh" कमांड का पालन करने वाली कोई भी स्ट्रिंग इंटरैक्टिव लॉगऑन के बजाय दूरस्थ सर्वर पर चल जाएगी। आप उन दूरस्थ आदेशों से एसएसएच के माध्यम से इनपुट आउटपुट / आउटपुट कर सकते हैं जैसे कि वे स्थानीय थे। कोट्स में कमांड को किसी भी भ्रम से बचाता है, खासकर जब रीडायरेक्शन का उपयोग करते हैं।

या, आप अन्य सर्वर पर सीधे टैर फ़ाइल निकाल सकते हैं:

server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"

शायद ही कभी इस्तेमाल किया ध्यान दें -C विकल्प। इसका मतलब है "कुछ भी करने से पहले इस निर्देशिका में पहले बदलें।"

या, शायद आप गंतव्य सर्वर से "खींचें" चाहते हैं:

server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")

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

मैं उपर्युक्त उपरोक्त आसानी से लिखा होगा:

server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")

या निम्नानुसार है:

server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination

या, आप स्वयं को कुछ दुख बचा सकते हैं और बस rsync का उपयोग कर सकते हैं:

server1$ rsync -az ./path server2:/destination/

अंत में, याद रखें कि स्थानांतरण से पहले डेटा को संपीड़ित करने से आपकी बैंडविड्थ कम हो जाएगी, लेकिन बहुत तेज कनेक्शन पर, यह वास्तव में ऑपरेशन ले सकता है ज्यादा समय। ऐसा इसलिए है क्योंकि आपका कंप्यूटर जारी रखने के लिए पर्याप्त तेज़ी से संपीड़ित नहीं हो सकता है: यदि संपीड़ित इसमें 100 एमबी अधिक समय लगता है भेजना 100 एमबी, तो यह असम्पीडित भेजने के लिए तेज़ है।

वैकल्पिक रूप से, आप अपने आप को gzip करने के लिए पाइपिंग पर विचार करना चाह सकते हैं (-z विकल्प का उपयोग करने के बजाय) ताकि आप एक संपीड़न स्तर निर्दिष्ट कर सकें। यह मेरा अनुभव रहा है कि संकुचित डेटा के साथ तेज़ नेटवर्क कनेक्शन पर, स्तर 2 या 3 पर gzip का उपयोग करके (डिफ़ॉल्ट 6 है) अधिकांश मामलों में सर्वश्रेष्ठ समग्र थ्रूपुट देता है। इस तरह:

server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"

90
2017-12-03 10:44



Rsync खूबसूरती से काम किया - फ्लाई पर संपीड़ित, पूरे फ़ोल्डर्स की प्रतिलिपि, टूटी हुई लिंक पर फिर से शुरू होता है। सब एक साधारण कमांड में। इसे प्यार करना। ये विकल्प हैं जिन्हें मैंने उपयोगी पाया: z: compress r: recurse = copy subfolder v: verbose। मेरा Rsync कमांड उदाहरण: rsync -azvr / src-path / username @ dest_server: / dest / path / - Bastion


मैं इसे अपने आप पर rsync करने के लिए लुभाना होगा - यह संपीड़न करता है और लिंक नुकसान अच्छी तरह से संभालता है।


67
2017-12-02 12:47



rsync बिल्कुल सही उपकरण है। - Rich
+1 - हाँ rsync! - Evan Anderson
+1, बस ढेर करने के लिए। इसके अलावा, मुझे वास्तव में rsync पसंद है। - Steven Monday
लेकिन rsync का उपयोग करते समय आपको मैन्युअल रूप से डेटा को संपीड़ित करना होगा (यदि आप अपना डेटा संपीड़ित करना चाहते हैं) - wlk
आप संपीड़ित फ़ाइल को rsync के साथ कैसे स्टोर कर सकते हैं? - Dolan Antenucci


यदि आप उन्हें बस मारते हैं और कुछ भी नहीं तो यह केवल न्यूनतम गति लाभ के साथ बहुत समय बर्बाद कर देगा।

तो बस सीवीएफ स्विच के साथ फाइलों को फाड़ना प्रभावी रूप से उस समय की लागत को खर्च करेगा जो सभी 55 जीबी छवियों को पढ़ने के लिए लेता है और उन्हें डिस्क पर वापस लिखता है। (प्रभावी रूप से यह और भी बर्बाद हो जाएगा क्योंकि काफी ऊंचा हो जाएगा)।

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

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

मैं इस तरह का उपयोग करूंगा:

md5sum /images/* > md5sum.txt
scp -r images/* user@host:/images/

नए सर्वर पर

md5sum /images/* > md5sum_new.txt

और फिर बस diff। और चूंकि एसपीपी फ्लाई पर संपीड़न का समर्थन करता है, इसलिए अलग-अलग अभिलेखागार की आवश्यकता नहीं होती है।

संपादित करें

मैं एमडी 5 की जानकारी रखूंगा क्योंकि यह ओपी के लिए उपयोगी था। लेकिन एक टिप्पणी ने मुझे नई अंतर्दृष्टि के साथ मारा। तो थोड़ी सी खोज ने जानकारी के इस उपयोगी टुकड़े को प्रदान किया। कृपया ध्यान दें कि यहां विषय एसएफटीपी सीधे एससीपी नहीं है

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


12
2017-12-02 12:47



बहुत बहुत धन्यवाद, md5sum क्या कर रहा है? और diff क्या है? धन्यवाद, अब प्रदर्शन! - Andrew Fashion
md5sum (या md5) फ़ाइलों का एक चेकसम लेता है। डिफ फाइलों में अंतर के लिए दिखता है (आदमी diff)। चेकसम एक स्ट्रिंग, हैश बनाता है, कि यदि फ़ाइल ट्रांज़िट में बदल दी गई है ... थोड़ा सा फ़्लिप किया गया है, एक त्रुटि ... जब आप इसे दूसरी तरफ लेते हैं तो मेल नहीं खाएगा। बड़ी फ़ाइलों के लिए आपके पास त्रुटियों का बढ़ता मौका है। यही कारण है कि जब आप ऐसी साइटें देखते हैं जो आपको .iso फ़ाइलों को डाउनलोड करने देते हैं, तो आपके पास आपकी डाउनलोड की गई फ़ाइल की तुलना करने के लिए अक्सर एमडी 5 चेकसम होता है ताकि यह सुनिश्चित हो सके कि यह मेल खाता है और भ्रष्ट नहीं है। - Bart Silverstrim
ओह वाह, मैं उसे कभी नहीं जानता था। धन्यवाद! - Andrew Fashion
एसपीपी एन्क्रिप्टेड है और लाइन पर अखंडता की गारंटी देता है। अभी भी मामूली मौका है कि डेटा स्मृति में या निश्चित रूप से डिस्क पर भ्रष्ट था, लेकिन यह बहुत दुर्लभ है। - EvilRyry
क्या एसएफटीपी चेकसम का ओवरहेड वास्तव में किसी भी व्यावहारिक अर्थ में मायने रखता है? मैं कल्पना नहीं कर सकता। प्रत्येक 32768 के लिए 4 बाइट महत्वपूर्ण नहीं है। प्रति जीबी 128 केबी है। यह कहते हुए कि "धीमा" एक उबाऊ सैद्धांतिक भावना को छोड़कर किसी भी चीज में अतिस्तरीय जैसा लगता है। - underscore_d


पेसी के एमडी 5 एसएम सुझाव के शीर्ष पर, मैं निम्नलिखित का उपयोग करता हूं:

गंतव्य पर: nc -w5 -l -p 4567 | tar -xvf -

फिर स्रोत पर: tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567

यह अभी भी एक tar / untar है, और कोई एन्क्रिप्शन नहीं है, लेकिन यह अन्य सर्वर के लिए सीधे है। उन्हें दोनों में शुरू करें (-w5 आपको 5 सेकंड की कृपा देता है।) और इसे देखें। यदि बैंडविड्थ तंग है, तो दोनों सिरों पर टैर में ऐड -z जोड़ें।


8
2017-12-02 13:42



मुझे लगता है कि यह दूसरी तरफ है, उसे गंतव्य पर निष्पादित करना है (सॉकेट खोलने के लिए) और फिर स्रोत पर (प्रेषण के लिए) - Dimitrios Mistriotis
गंतव्य सर्वर के स्थान पर, क्या मैं सिर्फ root@1.1.1.1 डालता हूं? - Andrew Fashion
नहीं, बस आईपी। नेटकैट टीसीपी के अलावा प्रोटोकॉल का उपयोग नहीं कर रहा है :) यह आदेश ऊपर दिए गए सभी आदेशों में से सबसे तेज़ होगा। स्रोत पर प्रति फ़ाइल बिल्कुल एक पढ़ा गया है, फ़ाइलों को स्थानांतरित करने के लिए सटीक न्यूनतम नेटवर्क यातायात, और गंतव्य पर प्रति फ़ाइल बिल्कुल एक लिखना है। यदि आपके पास अतिरिक्त CPU चक्र हैं, तो -z ध्वज (संपीड़न के लिए) जोड़ना इसे आगे बढ़ाएगा, क्योंकि कम नेटवर्क डेटा को स्थानांतरित करना होगा। - Jeff McJunkin
@ user36845 - सच है। मैं उपर्युक्त आदेश के साथ कालक्रम का अर्थ नहीं लगा रहा था, लेकिन आप सही हैं, सॉकेट को पहले खोला जाना होगा। मैं इसे स्पष्ट करने के लिए संपादित कर दूंगा। :) - SmallClanger
मुझे यकीन है कि एसएसएच / एसपीपी 125 एमबी / एस से 133 एमबी / एस तक कैप क्यों कर रहा था, लेकिन नेटकैट उस डेटा को आसानी से ~ 380 एमबी / एस पर पाइप कर सकता है (उसी लिंक) - ThorSummoner


एक बिंदु - सभी होस्टों में rsync नहीं है और मेजबानों के पास टैर के विभिन्न संस्करण हो सकते हैं। इस कारण से, कोई उप-उपेक्षित सीपीओ का उपयोग कर कॉल के पहले बंदरगाह के रूप में सिफारिश कर सकता है।

मेजबान के बीच फ़ाइल / निर्देशिका संरचनाओं के विज्ञापन-प्रतिकृति को करने के लिए आप ssh पर cpio कर सकते हैं। इस तरह आपके पास देखे जाने पर भेजा गया है कि आपको सीपीओ, नाम-नाम "फ़ीड" करने की आवश्यकता है। यह भी अधिक तर्क-पोर्टेबल है, सीपीओ ज्यादा नहीं बदलता है - यदि आप एक विषम वातावरण में एकाधिक मेजबानों की देखभाल कर रहे हैं तो यह एक महत्वपूर्ण बात है।

दूरस्थ प्रतिलिपि में उदाहरण कॉपी / निर्यात / घर और उपश्रेणी:

cd /export/ find . home -print | cpio -oaV | ssh 10.10.10.10 'cd /export/home; cpio -imVd'

उपर्युक्त रिमोट होस्ट पर / निर्यात / घर और किसी उपधारा / निर्यात / घर की सामग्री की प्रतिलिपि बनायेगा।

उम्मीद है की यह मदद करेगा।


1
2017-12-02 14:54



उन्होंने उल्लेख किया कि यह दो सेंटोस बॉक्स था, इसलिए उनके पास rsync होगा और टैर के संगत संस्करणों को फाइल करेगा। Rpync जैसे टूल्स को cpio :) जैसे टूल को प्रतिस्थापित करने के लिए बनाए गए थे। आप सीपीयू के साथ "फिर से शुरू नहीं" कर सकते हैं, कम से कम यह जानकर कि आप कहां से शुरू करना चाहते हैं और उचित रूप से अपने खोज को फ़िल्टर करें। जो एक अनावश्यक समय ओवरहेड है। ऐसा कहकर, 'पुराने' यूनिक्स बक्से के लिए उपयोगी जानकारी :) - Rafiq Maniar
हाँ, उस सीएमएमएंड ने मुझे हाहा खो दिया - Andrew Fashion


मेरे पास एसएसएच एक्सेस है, आपके पास rsync पहुंच है।

rsync -av -e ssh /storage/images/ user@[ip or domain name]:/storage/images/

या

rsync -av -e "ssh -l user" /storage/images/ [ip or domain name]:/storage/images/

अगर आपको "rsync त्रुटि" जैसी कोई त्रुटि प्राप्त होती है: कुछ फ़ाइलों को main.c (977) [प्रेषक = 2.6.9] पर स्थानांतरित नहीं किया जा सकता है (कोड 23)], सर्वर के बीच अपने उपयोगकर्ता और समूहों की जांच करें; आप एक मेल नहीं खा सकते हैं।

यदि आप स्थानांतरण को संपीड़ित करने के लिए rsync चाहते हैं तो rsync "-z" विकल्प का उपयोग करें। यह विकल्प अधिक सीपीयू लेकिन कम बैंडविड्थ का उपयोग करेगा, इसलिए इसके बारे में जागरूक रहें।

एक "प्रगति" विकल्प है जो आपको एक प्रतिशत स्थानांतरित कर देगा, जो कि आपको इस तरह की चीज़ पसंद है।


1
2017-12-03 22:01





क्या वे फ़ाइलों को स्थानांतरित करने के लिए इंटरनेट की आवश्यकता के बजाय साझा नेटवर्क पर हैं? एनएफएस या एफ़टीपी एससीपी के ऊपरी हिस्से की तुलना में बहुत तेज हो सकता है, हालांकि आप स्थानांतरण के दौरान एन्क्रिप्शन खो देंगे।


0
2017-12-02 13:20



दूरस्थ स्थानों में विभिन्न सर्वर - Andrew Fashion


या आप हमेशा टैर पाइप का उपयोग कर सकते हैं:

(cd /path && tar -cjf - * ) | ssh user@host 'tar -xjf - -C /path'

'j' = bzip2, यदि आप अपने टैर का समर्थन करते हैं तो आप gzip या --lzma के लिए 'z' का उपयोग कर सकते हैं।


0
2017-12-03 07:08