15TB छोटी फ़ाइलों का स्थानांतरण करें


79

मैं एक सर्वर से दूसरे में डेटा संग्रहित कर रहा हूं। शुरू में मैंने rsyncनौकरी शुरू की । फाइल लिस्ट को बनाने में केवल 5 टीबी डेटा के लिए और दूसरे सप्ताह में 1 टीबी डेटा ट्रांसफर करने में 2 सप्ताह का समय लगा।

फिर मुझे नौकरी को मारना पड़ा क्योंकि हमें नए सर्वर पर कुछ डाउन टाइम चाहिए।

यह सहमति हुई है कि हम इसे टारगेट करेंगे क्योंकि हमें शायद इसे फिर से एक्सेस करने की आवश्यकता नहीं होगी। मैं इसे 500 जीबी विखंडू में तोड़ने की सोच रहा था। इसके बाद मैं tarइसके माध्यम से इसे कॉपी करने जा रहा था ssh। मैं उपयोग कर रहा था tarऔर pigzयह अभी भी बहुत धीमा है।

इसे करने का कोई बेहतर तरीका है? मुझे लगता है कि दोनों सर्वर रेडहैट पर हैं। पुराना सर्वर Ext4 है और नया XFS है।

फ़ाइल का आकार कुछ kb से लेकर कुछ mb तक होता है और 5TB में 24 मिलियन jpegs होते हैं। इसलिए मैं 15TB के लिए लगभग 60-80 मिलियन का अनुमान लगा रहा हूं।

संपादित करें: कुछ दिनों के लिए rsync, nc, tar, mbuffer और pigz के साथ खेलने के बाद। अड़चन डिस्क IO होने वाली है। जैसा कि 500 ​​एसएएस डिस्क और लगभग 250 मिलियन जेपीजीएस पर डेटा स्ट्रिप किया गया है। हालाँकि, अब मुझे इन सभी अच्छे साधनों के बारे में पता चला जिनका उपयोग मैं भविष्य में कर सकता हूँ।



2
एक विकल्प बाहरी ड्राइव पर संकुचित टार फ़ाइलों को बना रहा है और इसे नई प्रणाली में स्थानांतरित कर रहा है। अतिरिक्त डिस्क टार फ़ाइलों को बनाने में तेजी लाएगी (सिस्टम में मौजूदा डिस्क के लिए नहीं लिख रही होगी, संभवतः उनसे 15TB पढ़ने की कोशिश करते समय) और नए सर्वर को टाई नहीं करेगा।
ब्रायन

4
इसे करने का कोई बेहतर तरीका है? - हाँ, विंडोज सर्वर 2012 R2 डीएफएस प्रतिकृति लगभग 10 घंटे में तैयार करेगी । और यह परिवर्तनों को सिंक करेगा, और रिबूट के बाद इसे छोड़ दिया जाएगा।
TessellatingHeckler

27
@TessellatingHeckler: तो आप सुझाव देते हैं कि ओपी रेडहैट से विंडोज के लिए आर्काइव करने से पहले माइग्रेट करता है?
थॉमस वेलर

12
@ThomasWeller उन्होंने पूछा कि "क्या कोई बेहतर तरीका है?", और वहाँ है। मैं कोई सिफारिश नहीं करता कि वे बेहतर तरीके का उपयोग करें। वे एक पाइप में आदेशों का उपयोग करने के लिए स्वतंत्र हैं जो रुकावट से उबर नहीं सकते हैं, फ़ाइल सामग्री को सत्यापित नहीं करेंगे, प्रतिलिपि स्थिति की रिपोर्ट नहीं कर सकते हैं, फ़ाइलों की नकल करने वाले भागों से बचने के लिए पहले से कॉपी किए गए ब्लॉकों का उपयोग नहीं कर सकते हैं, कोई निहित नहीं है कम-प्राथमिकता वाले कॉपी का समर्थन करें, रोका नहीं जा सकता है, एसीएल की प्रतिलिपि बनाने का कोई उल्लेख नहीं है, और इसे चलाने के लिए किसी को लॉग इन रहने की आवश्यकता है। हालाँकि, निम्नलिखित में से किसी और को भी दिलचस्पी हो सकती है - या यह कहने के लिए प्रेरित किया कि "x लिनक्स पर ऐसा करता है"।
TessellatingHeckler 23

जवाबों:


64

मैं का उपयोग कर बहुत अच्छे परिणाम मिले थे tar, pigz(समानांतर gzip) और nc

स्रोत मशीन:

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

गंतव्य मशीन:

निकालना:

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

संग्रह रखने के लिए:

nc source_machine_ip 9876 > smallstuff.tar.gz

आप के माध्यम से अंतरण दर सिर्फ पाइप देखना चाहते हैं pvके बाद pigz -d!


3
FYI करें, आप बदल सकते हैं pigzके साथ gzipया इसे पूरी तरह निकालने के लिए, लेकिन गति काफी धीमी हो जाएगा।
h0tw1r3

10
इस करता है, तो पहले से ही ओ पी की कोशिश की है कैसे स्वीकार किया जा सकता tarहै और pigz? मुझे समझ नहीं आया ...
थॉमस वेलर

5
@ThomasWeller आपको कहाँ मिला कि उसने कोशिश की है pigz? इस सवाल से ऐसा लगता है कि उसने rsyncअभी तक केवल कोशिश की है, और डेटा को विभाजित करने और बंडल करने के लिए उपयोग करने पर विचार कर रहा था tar। खासकर यदि उसने rsync पर -z/ --compressविकल्प का उपयोग नहीं किया है , pigzतो सैद्धांतिक रूप से काफी मदद कर सकता है।
डॉकटोर जे।

1
@ThomasWeller हाँ वास्तव में मैंने पहले ही टार और पिग की कोशिश की थी, लेकिन एन.सी. मैं ssh का उपयोग कर रहा था इसलिए इसने बहुत अधिक उपरि जोड़ी।
लैंबज

2
@lbanz कि बस का मतलब है कि संपीड़न के लिए ज्यादा सीपीयू का उपयोग tarकरने के लिए तेजी से डेटा का उत्पादन नहीं कर रहा है pigz। बहुत सारी छोटी फ़ाइलों को पढ़ने से कई अधिक syscalls, कई और डिस्क की तलाश होती है, और बड़ी फ़ाइलों के बाइट्स की एक ही संख्या को पढ़ने की तुलना में बहुत अधिक कर्नेल ओवरहेड होता है, और ऐसा लगता है कि आप मौलिक स्तर पर केवल टोंटी मार रहे हैं।
हॉब्स

21

मैं rsync समाधान के लिए रहना चाहता हूँ। आधुनिक (3.0.0+) rsync वृद्धिशील फ़ाइल सूची का उपयोग करता है, इसलिए इसे स्थानांतरण से पहले पूर्ण सूची का निर्माण नहीं करना पड़ता है। इसलिए इसे दोबारा शुरू करने से आपको परेशानी के मामले में पूरे ट्रांसफर करने की जरूरत नहीं होगी। प्रति शीर्ष या द्वितीय स्तर निर्देशिका में स्थानांतरण को विभाजित करने से यह और भी बेहतर होगा। ( यदि आपका नेटवर्क आपकी ड्राइव की तुलना में धीमा है तो मैं इसका उपयोग rsync -a -Pऔर --compressजोड़ूंगा।)


मैं पुराने सर्वर पर rsync 2.6.8 का उपयोग कर रहा हूं। जैसा कि यह उन बॉक्सों में से एक है जहां हमें विक्रेता द्वारा बताई गई किसी भी चीज को स्थापित / अपडेट करने की अनुमति नहीं है या यह वारंटी से बचती है। मैं इसे अपडेट कर सकता हूं और देख सकता हूं कि क्या यह जल्दी है।
लांबज

18
किसी सांख्यिकीय रूप से लिंक किए गए rsync बाइनरी को ढूंढें (या बनाएं) और इसे अपने घर से चलाएं। उम्मीद है कि कोई वारंटी को बर्बाद नहीं करेगा।
फॉक्स

कैसे के बारे में unison? इसकी तुलना कैसे की जाती है rsync?
ग्वेनेथ लेलेवेन

15

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

दो कारण:

  1. कोई फाइल सिस्टम ओवरहेड नहीं है, जो मुख्य प्रदर्शन अपराधी है
  2. कोई मांग नहीं, आप दोनों तरफ अनुक्रमिक पढ़ / लिख रहे हैं

3
फाइलसिस्टम को बायपास करना अच्छा है। रीड-राइट माउंटेड फाइल सिस्टम का ब्लॉक-स्तर नकल करना वास्तव में एक बुरा विचार है। केवल पहले ही पढ़े या माउंट न करें।
जेबी

एक 15TB कॉपी बेकार है, भी। इसका अर्थ है कि नए सर्वर को न्यूनतम 30 की जरूरत है।
आर्थर केए

3
यदि सर्वर LVM का उपयोग कर रहा है, तो कोई फ़ाइल सिस्टम का केवल-पढ़ने वाला स्नैपशॉट कर सकता है और इसके बजाय इसे कॉपी कर सकता है। केवल स्नैपशॉट पढ़ने के दौरान होने वाली फाइल सिस्टम में बदलाव के लिए स्पेस ओवरहेड।
लियोरी

9

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


2
यह 2TB ड्राइव के 1PB के बारे में है इसलिए यह बहुत अधिक है।
लैंबज

3

Mbuffer का उपयोग करें और यदि यह सुरक्षित नेटवर्क पर है तो आप एन्क्रिप्शन स्टेप से बच सकते हैं।


3

(कई अलग-अलग उत्तर काम कर सकते हैं। यहां एक और है।)

फ़ाइल सूची के साथ उत्पन्न करें find -type f(यह कुछ घंटों में समाप्त होना चाहिए), इसे छोटे विखंडू में विभाजित करें, और प्रत्येक चंक का उपयोग करके स्थानांतरित करें rsync --files-from=...


3

क्या आपने चुपके से विचार किया है? इसके साथ, मेरा मतलब है कि एक ही ड्राइव पर सब कुछ स्थानांतरित करना, फिर शारीरिक रूप से उस ड्राइव को खत्म करना।

लगभग एक महीने पहले, सैमसंग ने 16 टीबी ड्राइव (तकनीकी रूप से, यह 15.36 टीबी है) का अनावरण किया, जो एसएसडी भी है: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard ड्राइव-16TB

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


2

यदि कटौती के दौरान उच्च सफलता अनुपात प्राप्त करने का कोई मौका है, तो मैं बोर्गबैकअप या अटारी जैसे कुछ का उपयोग करूंगा

यदि नहीं, तो netcat + tar + pbzip2 समाधान की जांच करें, अपने हार्डवेयर के अनुसार संपीड़न विकल्पों को अनुकूलित करें - जांच करें कि अड़चन क्या है (CPU? नेटवर्क? IO?)। Pbzip2 बेहतर प्रदर्शन देते हुए सभी सीपीयू में अच्छी तरह फैलेगा।


lzma ( xz) bzip2 की तुलना में तेजी से कम हो जाता है, और अधिकांश इनपुट पर अच्छा करता है। दुर्भाग्य से, xzमल्टीथ्रेड विकल्प अभी तक लागू नहीं हुआ है।
पीटर कॉर्ड्स

आमतौर पर कंप्रेशन स्टेज को डीकंप्रेसन की तुलना में अधिक हॉर्स पावर की जरूरत होती है, इसलिए यदि सीपीयू सीमित कारक है, तो pbzip2 का परिणाम बेहतर प्रदर्शन होगा। यदि दोनों मशीनें समान हैं, तो अपघटन प्रक्रिया को प्रभावित नहीं करना चाहिए।
न्यूट्रिनस सिप

हां, मेरा कहना यह शर्म की बात है कि एक एकल-धारा मल्टी-थ्रेड लज़मा नहीं है। हालांकि इस उपयोग-मामले के लिए, डेटा के पूरे फाइल सिस्टम को स्थानांतरित करने की pigzसंभावना होगी। सबसे धीमी कंप्रेसर का उपयोग करना चाहते हैं। या भी lz4। (इसमें एक lz4mtबहु-थ्रेडेड-फॉर-ए-सिंगल-स्ट्रीम उपलब्ध है। यह बहुत कुशलता से थ्रेड नहीं करता है (बहुत बार नए थ्रेड्स पैदा करता है), लेकिन यह एक ठोस गति प्राप्त करता है)
पीटर कॉर्ड्स

2

आप RedHat Linux का उपयोग कर रहे हैं, इसलिए यह लागू नहीं होगा, लेकिन एक अन्य विकल्प के रूप में:

मुझे बड़ी सफलता मिली है ZFS का उपयोग करके लाखों फाइलों को रखने के लिए क्योंकि इनोड एक समस्या नहीं है।

यदि वह आपके लिए एक विकल्प था, तो आप स्नैपशॉट ले सकते हैं और वृद्धिशील अपडेट भेजने के लिए zfs का उपयोग कर सकते हैं। मुझे इस पद्धति का उपयोग करने के साथ-साथ संग्रह डेटा को स्थानांतरित करने में बहुत सफलता मिली है।

ZFS मुख्य रूप से सोलारिस फाइलसिस्टम है, लेकिन इल्मोस (सूर्य के ओपनसोलारिस का खुला स्रोत कांटा) में पाया जा सकता है। मुझे पता है कि बीएसडी और लिनक्स के तहत जेडएफएस (फ्यूज का उपयोग करके?) का उपयोग करने पर भी कुछ भाग्य रहा है - लेकिन मुझे ऐसा करने का कोई अनुभव नहीं है।


3
अभी काफी समय से ZFS का एक गैर-FUSE मूल लिनक्स पोर्ट है: zfsonlinux.org
EEAA

1

rsyncलक्ष्य मशीन पर एक डेमॉन शुरू करें । इससे ट्रांसफर प्रक्रिया में काफी तेजी आएगी।


-1

आप इसे केवल टार और ssh के साथ कर सकते हैं, जैसे:

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

या, यदि आप अलग-अलग फाइलें रखना चाहते हैं:

tar zcf - <your files> | ssh <destination host> "tar zxf -"


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