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


15

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

क्या rsync के लिए फ़ाइल में अंतर की पहचान करने और नेटवर्क पर केवल छोटे अंतर को भेजने का कोई तरीका है?


3
नेटवर्क पर कॉपी करते समय, rsyncडिफ़ॉल्ट रूप से इस तरह व्यवहार करता है। जब तक कि मामूली परिवर्तन फ़ाइल में एक छोटा बदलाव है, और फ़ाइल पहले से ही समरूप संस्करणों में लिंक के दोनों किनारों पर मौजूद है, हस्तांतरित डेटा कुल फ़ाइल आकार से बहुत कम होना चाहिए। मैन पेज में पहले पैराग्राफ से: "यह अपने डेल्टा-ट्रांसफर एल्गोरिथ्म के लिए प्रसिद्ध है, जो नेटवर्क पर भेजे गए डेटा की मात्रा को केवल स्रोत फ़ाइलों और गंतव्य में मौजूदा फ़ाइलों के बीच अंतर भेजकर कम करता है।"
user4556274

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

जवाबों:


11

rsyncडेल्टा-ट्रांसफर एल्गोरिथ्म डिफ़ॉल्ट रूप से ऐसा करता है। कोटिंग rsync मैनपेज :

विवरण

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

यदि आप इसे अक्षम करना चाहते हैं, तो आपको -Wया --whole-fileविकल्प का उपयोग करना होगा ।

-W, --whole- फ़ाइल

यह विकल्प rsync के डेल्टा-ट्रांसफर एल्गोरिथ्म को अक्षम कर देता है, जिसके कारण सभी हस्तांतरित फ़ाइलें पूरी भेजी जा सकती हैं। यदि यह स्रोत और गंतव्य मशीनों के बीच बैंडविड्थ डिस्क से बैंडविड्थ से अधिक है (खासकर जब "डिस्क" वास्तव में एक नेटवर्क फाइल सिस्टम है) तो ट्रांसफर तेजी से हो सकता है। यह तब डिफ़ॉल्ट होता है जब स्रोत और गंतव्य दोनों को स्थानीय पथ के रूप में निर्दिष्ट किया जाता है, लेकिन केवल अगर कोई बैच-लेखन विकल्प प्रभाव में नहीं है।

यदि आप वास्तव में जानते हैं कि आपकी फ़ाइल ने कितना परिवर्तन किया है, तो आप अपने डेल्टा ब्लॉक आकार को ट्यून करके इस डेल्टा स्थानांतरण व्यवहार को भी अनुकूलित कर सकते हैं:

-B, --block-size = BLOCKSIZE

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

और यदि आप स्वयं एल्गोरिथ्म के बारे में अधिक जानकारी चाहते हैं, तो आप इसे यहां पा सकते हैं: रुपीस एल्गोरिथ्म


निष्पक्ष होने के लिए, मैनपेज में "फाइलों" का बहुवचन रूप अस्पष्ट है: "केवल स्रोत फ़ाइलों और मौजूदा फाइलों के बीच अंतर भेजकर ..." मैंने "फाइलें" लीं, जिसका अर्थ है व्यक्तिगत फ़ाइलों का संग्रह, और वह rsync ऐसी (संपूर्ण) फाइलें भेजेगा जो अलग थीं। यह स्पष्ट किया जाना चाहिए।
Russ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.