एक बड़ी फ़ाइल को rsync कैसे करें, जितना संभव हो उतना कम सीपीयू और बैंडविड्थ खर्च के साथ?


13

मेरे पास 500 जीबी की फाइल है जिसे मैं दूरस्थ रूप से बैकअप देने की योजना बना रहा हूं। फ़ाइल अक्सर बदलती है। मैं इसे डेस्कटॉप से ​​सर्वर पर rsyncing करूंगा। दोनों rsync क्लाइंट या सर्वर चला सकते हैं।

इसके लिए उचित आदेश क्या है? मैंने जो सॉफ करने की कोशिश की है वह हमेशा के लिए ले रहा है या बस अजीब अभिनय किया है।

उदाहरण और परिणाम:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

काम करने लगता है, लेकिन केवल अगर मैं इसे दो बार (!) करता हूं। इसके अलावा, धीमा।

क्या उपरोक्त कमांड दोनों कंप्यूटरों पर चेकसमिंग करता है, या केवल एक भेजने पर? क्या यह सही है अन्यथा?


एक फाइल जो बड़ी है जो अक्सर बदलती है? आप rsync के साथ बहुत ही निराशाजनक परिणाम प्राप्त करने जा रहे हैं ...
इग्नासियो वाज़केज़-अब्राम्स

कोई अन्य सुझाव? मुझे कुछ ऐप के साथ उल्लेखनीय होना चाहिए, ड्रॉपबॉक्स के मालिकाना ग्राहक इसे बहुत अच्छी तरह से करते हैं। फ़ोरम
जोहान एलगॉथ

--inplace का तात्पर्य है - समान रूप से देखें: linux.die.net/man/1/rsync
रे हुलहा

जवाबों:


12

यह कभी भी तेज नहीं होने वाला है, क्योंकि rsync को पूरी फाइल को पढ़ना / जांचना है, और 500GB पढ़ने में एक लंबा समय लगने वाला है, जब तक कि आप इसे SSDs या कुछ और पर संग्रहीत नहीं कर लेते।

कोशिश करो rsync -vhz --partial --inplace <file/server stuff>

-cइसका मतलब यह है कि यह पूरी फ़ाइल को किसी भी स्थानान्तरण से पहले जाँचता है, यह देखने के लिए टाइमस्टैम्प का उपयोग करने के बजाय कि यह बदल गया है, जिसका अर्थ है कि पूरी फ़ाइल को दो बार पढ़ना। यदि टाइमस्टैम्प परिवर्तित नहीं हो रही है (यह होनी चाहिए), तो आप touchrsync चलाने से पहले सिर्फ फाइल कर सकते हैं ।

यदि यह स्क्रिप्टेड नहीं है, --progressतो आप जोड़ सकते हैं ताकि आप देख सकें कि यह कैसे चल रहा है।


हाँ, मुझे पता है 'बड़ी फ़ाइल == लंबी हैंडलिंग'। लेकिन मुझे लगता है कि मुझे यहां कुछ याद आ रहा है, ऊपर टिप्पणी देखें। अगर ड्रॉपबॉक्स ऐसा कर सकता है तो हम कर सकते हैं! =) मैंने कहा नहीं था, लेकिन मैंने भी -c की कोशिश की, अभी भी धीमी।
जोहान एलगॉथ

2
--inplaceइसका तात्पर्य भी है--partial

2

हालाँकि यह rsync नहीं है, पर निर्भर करता है कि आप जो करने की कोशिश कर रहे हैं वह बेहतर काम कर सकता है। मैं एक समान बैकअप कार्य कर रहा था और यह निश्चित रूप से तेज था।

एक मशीन से दूसरी मशीन में टार पाइप बनाने के लिए नेटकैट का उपयोग करें।

अपने स्रोत मशीन पर:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

आप एक टारबॉल बना रहे हैं जो अनुमतियों और समय को संरक्षित करता है, फिर इसे पोर्ट 45454 पर नेटकट में पाइप करना है

आपकी बैकअप मशीन पर

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = अपने स्रोत मशीन का स्थानीय आईपी पता।

मेरे लिए, यह अच्छी तरह से काम किया। यह 25-30 एमबी / एस से अधिक वायर्ड लैन पर 2-3 एमबी / एस के साथ rsync के विपरीत था। नुकसान यह है: यह सिंक नहीं करता है, यह सिर्फ आपके स्रोत पर क्या है की एक प्रति बनाता है। एक बैकअप के लिए जैसे कि आप वर्णन कर रहे हैं - एक 500GB फ़ाइल - यह बहुत अच्छी तरह से काम कर सकता है।

अनुमतियों की समस्याओं से बचने के लिए आपको इसे रूट के रूप में करना पड़ सकता है, या आप भाग्यशाली हो सकते हैं।

FWIW, मैंने शुरू में इसके बारे में यहाँ सीखा: http://www.screenage.de/blog/2007/12/30/use/netcat-and-tar-for-network-file-transfer/


1
tarसे बेहतर है rsyncजब आपके पास बहुत सारी छोटी फाइलें स्थानांतरित करने के लिए हों। का उपयोग करते हुए ncअंतरण दर भी सुधार जब एक तेजी से कनेक्शन पर है, क्योंकि आप SSH-एन्क्रिप्शन की भूमि के ऊपर (जो मैं एक सहकर्मी से सहकर्मी कनेक्शन पर की जरूरत नहीं है) की जरूरत नहीं है
jornane

0

नेटवर्क ओवरहेड से बचने के लिए बस rsync प्रोटोकॉल का उपयोग करें और SSH का नहीं। डिफ़ॉल्ट रूप से, rsync होस्टनाम जैसे URL निर्दिष्ट करते समय SSH का उपयोग करता है: / पाथ। तेज rsync प्रोटोकॉल का उपयोग करने के बजाय rsync: // hostname / path का उपयोग करें। इस तरह से टार / नेटकैट के साथ कोई चाल आवश्यक नहीं है। Rsync डेल्टा एल्गोरिथ्म बहुत तेज होना चाहिए।

अधिक जानकारी के लिए https://gergap.wordpress.com/tag/rsync/ भी देखें ।

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