सबसे पहले, आपके प्रश्न के "फिर से शुरू" भाग के बारे में, --partial
बस आंशिक रूप से स्थानांतरित फ़ाइलों को रखने के लिए प्राप्त करने के अंत को बताता है कि अगर भेजने का अंत गायब हो जाता है जैसे कि वे पूरी तरह से स्थानांतरित हो गए थे।
फ़ाइलों को स्थानांतरित करते समय, वे अस्थायी रूप से अपने लक्ष्य फ़ोल्डर (उदाहरण .TheFileYouAreSending.lRWzDC
), या विशेष रूप से चुने हुए फ़ोल्डर में छिपी हुई फ़ाइलों के रूप में सहेजे जाते हैं यदि आप --partial-dir
स्विच सेट करते हैं । जब कोई हस्तांतरण विफल हो जाता है और --partial
सेट नहीं किया जाता है, तो यह छिपी हुई फ़ाइल इस गुप्त नाम के तहत लक्ष्य फ़ोल्डर में रहेगी, लेकिन यदि --partial
सेट की गई है, तो फ़ाइल को वास्तविक लक्ष्य फ़ाइल नाम (इस मामले में TheFileYouAreSending
) का नाम दिया जाएगा , भले ही फ़ाइल पूरा नहीं हुआ है। मुद्दा यह है कि आप बाद में --append
या तो फिर से rsync चलाकर हस्तांतरण को पूरा कर सकते हैं --append-verify
।
इसलिए, स्वयं विफल या रद्द किए गए स्थानांतरण को फिर से शुरू --partial
नहीं करता है । इसे फिर से शुरू करने के लिए, आपको अगले रन पर पूर्वोक्त ध्वज में से एक का उपयोग करना होगा। इसलिए, यदि आपको यह सुनिश्चित करने की आवश्यकता है कि लक्ष्य में कभी ऐसी फ़ाइलें नहीं होंगी जो ठीक प्रतीत होती हैं, लेकिन वास्तव में अपूर्ण हैं, तो आपको उपयोग नहीं करना चाहिए । इसके विपरीत, यदि आप यह सुनिश्चित करना चाहते हैं कि आप लक्ष्य निर्देशिका में छिपी आवारा विफल फ़ाइलों को कभी पीछे न छोड़ें, और आप जानते हैं कि आप बाद में स्थानांतरण को पूरा करने में सक्षम होंगे, तो आपकी मदद करने के लिए है।--partial
--partial
--append
ऊपर उल्लिखित स्विच के संबंध में , यह वास्तविक "फिर से शुरू" स्विच है, और आप इसका उपयोग कर सकते हैं या नहीं, आप भी उपयोग कर रहे हैं --partial
। दरअसल, जब आप उपयोग कर रहे होते हैं --append
, तो कोई भी अस्थायी फ़ाइलें कभी नहीं बनाई जाती हैं। फाइलें सीधे उनके निशाने पर लिखी जाती हैं। इस संबंध में, एक असफल हस्तांतरण पर एक --append
ही परिणाम देता है --partial
, लेकिन उन छिपी अस्थायी फ़ाइलों को बनाए बिना।
इसलिए, यदि आप बड़ी फ़ाइलों को स्थानांतरित कर रहे हैं, तो योग करने के लिए, और आप विकल्प को रद्द किए गए या असफल rsync ऑपरेशन को फिर से शुरू करने वाले सटीक बिंदु से फिर से शुरू करना चाहते हैं rsync
, आपको अगले प्रयास में उपयोग --append
या --append-verify
स्विच करने की आवश्यकता है।
जैसा कि @Alex नीचे इंगित करता है, क्योंकि संस्करण 3.0.0 में rsync
अब एक नया विकल्प है --append-verify
, जो --append
उस स्विच के अस्तित्व में आने से पहले जैसा व्यवहार करता है । आप शायद हमेशा का व्यवहार चाहते हैं --append-verify
, इसलिए अपने संस्करण की जांच करें rsync --version
। यदि आप मैक पर हैं और rsync
से प्रयोग नहीं कर रहे हैं homebrew
, तो आप (कम से कम और एल कैपिटन को शामिल करके) एक पुराना संस्करण है और --append
इसके बजाय उपयोग करने की आवश्यकता है --append-verify
। उन्होंने व्यवहार को क्यों नहीं --append
रखा और इसके बजाय नवागंतुक --append-no-verify
का नाम थोड़ा हैरान करने वाला है। किसी भी तरह से, --append
पर rsync
3 संस्करण पहले की तरह ही है --append-verify
नए संस्करणों पर।
--append-verify
खतरनाक नहीं है: यह हमेशा पढ़ेगा और दोनों सिरों पर डेटा की तुलना करेगा और यह नहीं मान लेगा कि वे समान हैं। यह चेकसम का उपयोग करता है, इसलिए यह नेटवर्क पर आसान है, लेकिन इससे पहले कि यह वास्तव में लक्ष्य को जोड़कर हस्तांतरण को फिर से शुरू कर सकता है, तार के दोनों सिरों पर डेटा की साझा मात्रा को पढ़ने की आवश्यकता होती है।
दूसरी बात, आपने कहा कि आपने सुना है कि rsync स्रोत और गंतव्य के बीच अंतर खोजने में सक्षम है, और इसलिए मतभेदों को कॉपी करने के लिए।
यह सही है, और इसे डेल्टा स्थानांतरण कहा जाता है, लेकिन यह एक अलग बात है। इसे सक्षम करने के लिए, आप जोड़ें -c
, या --checksum
स्विच करें। एक बार इस स्विच का उपयोग करने के बाद, rsync तार के दोनों सिरों पर मौजूद फ़ाइलों की जाँच करेगा। यह यह विखंडू में करता है, दोनों सिरों पर चेकसम की तुलना करता है, और यदि वे भिन्न होते हैं, तो यह फ़ाइल के अलग-अलग हिस्सों को स्थानांतरित करता है। लेकिन, जैसा कि @ जोनाथन नीचे बताते हैं, तुलना केवल तब की जाती है जब दोनों सिरों पर फाइलें एक ही आकार की होती हैं - विभिन्न आकार rsync के कारण संपूर्ण फ़ाइल को अपलोड करने का लक्ष्य होता है, एक ही नाम से लक्ष्य को अधिलेखित करना।
इसके लिए शुरू में दोनों छोरों पर थोड़ी गणना की आवश्यकता होती है, लेकिन नेटवर्क लोड को कम करने में बेहद कुशल हो सकता है यदि उदाहरण के लिए आप अक्सर बहुत बड़ी फ़ाइलों को निश्चित आकार की फ़ाइलों का समर्थन कर रहे हैं जिनमें अक्सर मामूली बदलाव होते हैं। दिमाग में आने वाले उदाहरण वर्चुअल हार्ड ड्राइव इमेज फाइल्स हैं जिनका इस्तेमाल वर्चुअल मशीन या iSCSI टार्गेट में किया जाता है।
यह उल्लेखनीय है कि यदि आप --checksum
उन फ़ाइलों के बैच को स्थानांतरित करने के लिए उपयोग करते हैं जो लक्ष्य प्रणाली में पूरी तरह से नए हैं, तो rsync उन्हें स्थानांतरित करने से पहले स्रोत प्रणाली पर उनके चेकसम की गणना करेगा। क्यूँ मुझे पता नहीं :)
तो, संक्षेप में:
आप अक्सर rsync का उपयोग कर रहे हैं तो सिर्फ और चाहते हैं कि कार्रवाई को रद्द करने के लिए और बाद में इसे फिर से शुरू, विकल्प "बी को एक से सामान ले जाने के लिए" नहीं है का उपयोग करें --checksum
, लेकिन है का उपयोग --append-verify
।
यदि आप अक्सर सामान का बैकअप लेने के लिए rsync का उपयोग कर रहे हैं, तो --append-verify
संभवतः इसका उपयोग आपके लिए बहुत कुछ नहीं करेगा, जब तक कि आप बड़ी फ़ाइलों को भेजने की आदत नहीं रखते हैं जो लगातार आकार में बढ़ते हैं लेकिन एक बार लिखे जाने के बाद शायद ही कभी संशोधित होते हैं। बोनस टिप के रूप में, यदि आप स्टोरेज का समर्थन कर रहे हैं जो कि स्नैपशॉट का समर्थन करता है जैसे कि , btrfs
या zfs
, --inplace
स्विच को जोड़ने से आपको स्नैपशॉट के आकार को कम करने में मदद मिलेगी क्योंकि परिवर्तित फाइलें फिर से नहीं बनाई जाती हैं, बल्कि बदले हुए ब्लॉक सीधे पुराने पर लिखे जाते हैं। यह स्विच उपयोगी भी है यदि आप लक्ष्य पर फ़ाइलों की प्रतियाँ बनाने से बचना चाहते हैं जब केवल मामूली परिवर्तन हुए हों।
उपयोग करते समय --append-verify
, rsync ऐसा व्यवहार करेगा जैसे यह हमेशा सभी फ़ाइलों पर करता है जो समान आकार के होते हैं। यदि वे संशोधन या अन्य टाइमस्टैम्प में भिन्न होते हैं, तो यह उन फ़ाइलों की जांच किए बिना स्रोत के साथ लक्ष्य को ओवरराइट कर देगा। --checksum
समान नाम और आकार की हर फ़ाइल जोड़ी की सामग्री (चेकसम) की तुलना करेगा।
अद्यतन 2015-09-01 @ एलेक्स द्वारा किए गए बिंदुओं को प्रतिबिंबित करने के लिए बदल गया (धन्यवाद!)
अद्यतन 2017-07-14 @ जोनाथन द्वारा किए गए बिंदुओं को प्रतिबिंबित करने के लिए परिवर्तित (धन्यवाद!)