Rsync स्थानीय फ़ाइलों के लिए डेल्टा-स्थानांतरण का उपयोग क्यों नहीं करता है?


25

मेरे पास एक बड़ी आईएसओ छवि है जो वर्तमान में एक टोरेंट क्लाइंट द्वारा डाउनलोड की जा रही है जिसमें अंतरिक्ष-आरक्षण चालू है: इसका मतलब है, फ़ाइल आकार में बदलाव नहीं हो रहा है जबकि कुछ डाउनलोड में (4 Mib) लगातार डाउनलोड के कारण बदल रहे हैं।

90% डाउनलोड पर मैं समय बचाने के लिए प्रारंभिक rsync करता हूं:

$ rsync -Ph DVD.iso / मीडिया / अन्य- hdd /
वृद्धिशील फ़ाइल सूची भेजना

DVD.iso
       2.60G 100% 40.23MB / s 0:01:01 (xfer # 1, टू-चेक = 0/1)

भेजे गए 2.60G बाइट्स में 73 बाइट्स 34.59M बाइट्स / सेक प्राप्त हुए
कुल आकार 2.60G स्पीडअप 1.00 है

फिर, जब फ़ाइल पूरी तरह से डाउनलोड हो जाए, मैं फिर से rsync करता हूं:

total size is 2.60G   speedup is 1.00

स्पीडअप = 1 का कहना है कि डेल्टा-हस्तांतरण का उपयोग नहीं किया गया था, हालांकि 90% फ़ाइल नहीं बदली गई है, लक्ष्य एफआईआर दूसरे एफएस पर है और कॉपी करने में कई मिनट लगते हैं। यह हस्तांतरण को गति देने की कोशिश क्यों नहीं करते हैं ?! मैं rsyncडेल्टा-स्थानांतरण का उपयोग करने के लिए कैसे मजबूर कर सकता हूं ?


6
आप जो कर रहे हैं, उसका कोई मतलब नहीं है। Rsync का उद्देश्य नेटवर्क पर फ़ाइलों को स्थानांतरित करने में तेजी लाना है, स्थानीय रूप से नहीं। मतभेदों को खोजने के लिए, इसे स्रोत और गंतव्य दोनों को पढ़ना होगा। मतभेदों को खोजने के लिए स्थानीय रूप से गंतव्य को पढ़ने में लगने वाले समय में, आप बस एक सामान्य प्रतिलिपि बना सकते हैं। फ़ाइल को कॉपी करने के बजाय पहले गंतव्य पर डाउनलोड करें।
Psusi

1
तो यह सिर्फ डेल्टा-एक्सफर का उपयोग नहीं करता है, क्योंकि स्थानीय स्तर पर काम करते हुए, यह हैश की गणना करने की तुलना में कॉपी करने के लिए तेज़ है? यदि हाँ - उत्तर plz :)
kolypto

9
कुछ परिस्थितियों में स्थानीय डिस्क पर लिखने से पढ़ना तेज हो सकता है। यह एसएसडी पर पहनने को कम कर सकता है। यह निश्चित रूप से एक वैध प्रश्न है और उत्तर मेरे लिए काफी मूल्यवान है।
HRJ

2
ऊपर दिए गए HRJ की टिप्पणी के अलावा @psusi, उस मामले पर भी विचार करें जब लक्ष्य फ़ाइल को फिर से शुरू किया गया है (जैसे btrfs या ocfs2 पर)। सिंक के दौरान कम से कम लिखना समग्र अंतरिक्ष उपयोग के लिए एक बड़ा अंतर बना सकता है।

जवाबों:


20

मैनपेज के अनुसार , psusi सही है:

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


10
ओह धन्यवाद! मैंने इस लाइन को मेज़ कर दिया :) डेल्टा-ट्रासफर को चालू करने के लिए, उपयोग करें-no-W
kolypto

1
मेरे सिस्टम पर -no-Wकेवल लंबे विकल्प से काम नहीं चलता है -no-whole-file। इस स्विच की आवश्यकता के लिए मेरा कारण यह है कि जब मैं एक बैकअप स्थापित कर रहा हूं और बड़ी फाइलें (जैसे चित्र) हैं, जिसमें एक ही संशोधन समय नहीं है। यह तेज है, स्पीडअप 163.26 है, इन फाइलों को मेरे स्थानीय फाइल सिस्टम पर डेल्टा-ट्रांसफर का उपयोग करके सिंक करना है।
जेसी द विंड

6
@JessetheWindWanderer, लंबा विकल्प है --no-whole-file(कृपया --शुरुआत में डबल नोट करें )।
एडी सी।

धन्यवाद एडी सी मैं संपादित मेरी टिप्पणी चाहते हैं, तो मैं समझ सकता है हमारे कैसे :-(
जेसी पवन घुमक्कड़

17

इस प्रश्न का सीधा-सीधा उत्तर है:

--no-Wडेल्टा संपीड़न का उपयोग करने के लिए ध्वज का उपयोग करें , कोई फर्क नहीं पड़ता स्थानीय या दूरस्थ।

अपडेट: ऐसा लगता है कि कहानी में कुछ और है। delta compressionकेवल के बीच प्राप्त करते हैं और rsync की संचारित प्रक्रिया सक्रिय किया जा रहा है। फ़ाइल-सिस्टम पर फ़ाइल को आउटपुट करते समय, rsyncअभी भी पूरी फ़ाइल (ओं) को लिख सकते हैं, यहां तक ​​कि डेल्टा संपीड़न पर भी।

देखें "वाकान टंका की 'जांच यहाँ


2
--no-Wहमेशा मेरे मामले में पूरी फ़ाइल स्थानांतरित करें। कृपया unix.stackexchange.com/questions/291156/…
Wakan Tanka

@WakanTanka दिलचस्प है! मैंने अपना उत्तर अपडेट कर दिया है।
एचआरजे

3

डिफ़ॉल्ट रूप से, rsync पहले विभिन्न सुरक्षा कारणों से लक्ष्य फ़ाइल की एक नई प्रतिलिपि बनाता है और फिर उसे बदल देता है। --inplaceइसके साथ निर्दिष्ट करके आप इसे ओवरराइड कर सकते हैं --no-whole-file। यह rsync को लक्ष्य फ़ाइल का इन-प्लेस-एडिट करने के लिए कहता है, मैन पेज में दस्तावेज के रूप में विभिन्न जोखिमों (आमतौर पर इस स्थिति के लिए मामूली) को स्वीकार करता है।


0

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

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

अपने डाउनलोड निर्देशिका को गंतव्य की मात्रा तक सीमित करने के लिए, मैं इस क्रम में इन झंडों और परिचालनों की सिफारिश करता हूं:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

पहला पास नई फ़ाइलों को गंतव्य तक दुर्लभ रूप से कॉपी करेगा। दूसरा पास मौजूदा फ़ाइलों को इन-प्लेस अपडेट करेगा, केवल परिवर्तनों को कॉपी करेगा

चूंकि यह विरल और इन-प्लेस डेल्टा प्रतियाँ कर रहा है, आप इसे बिना अतिरिक्त आईओ के बार-बार चला सकते हैं। यहां तक ​​कि अगर आपके पास 20 टोरेंट एक साथ चल रहे हैं, तो यह गंतव्य पर लिखने को नहीं बढ़ाएगा, या स्रोत / भाग्य संस्करणों को थ्रैश करेगा।


यहाँ "विरल" से आपका क्या तात्पर्य है? यह वास्तव में शब्द के वास्तविक अर्थ को नहीं दर्शाता है, जहां तक ​​मैं बता सकता हूं।
जूलियस

@ जूलियस: इसका मतलब यह है कि इसका क्या अर्थ है - विरल आवंटन के लिए पूर्ण समर्थन के साथ फ़ाइलों की प्रतिलिपि बनाएँ, इसलिए उदाहरण के लिए आपकी 40GB HDR फिल्में गंतव्य पर किसी भी स्थान से अधिक जगह नहीं लेंगी, जैसा कि वे स्रोत पर करते हैं। वर्चुअलबॉक्स डिस्क छवियों के साथ भी। जैसा कि कहा गया है कि ओपी को काम करने के लिए पूर्व-आवंटन को अक्षम करना होगा।
विल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.