मैं टार, गज़िप, rsync के साथ स्पार्स फ़ाइलों पर संचालन को कैसे तेज कर सकता हूं?


9

मेरे पास एक विरल फ़ाइल है। ( du -h3 जी की रिपोर्ट और du -h --apparent-size100 जी की रिपोर्ट।) अब तक, बहुत अच्छा।

अब, जब मैं फ़ाइल का उपयोग करके संपीड़ित करना चाहता हूं tarया इसका उपयोग करके नेटवर्क पर भेजना चाहता हूं, तो rsyncउसे 3 जी के रूप में अधिक समय की आवश्यकता होगी। ऐसा लगता है कि ये उपकरण सभी शून्य पढ़ते हैं।

मुझे लगा कि छेद किसी तरह चिह्नित हैं और ये उपकरण किसी तरह बस उन्हें छोड़ सकते हैं?

मेरी फ़ाइल के साथ कोई समस्या नहीं है?

क्या यह एक लापता सुविधा है tarऔर rsyncविरल फ़ाइलों की तलाश नहीं करना है? मैंने tarपैरामीटर का उपयोग किया --sparse, लेकिन इससे चीजों में तेजी नहीं आई। न ही rsyncपैरामीटर --sparse

क्या इन उपकरणों को विरल फाइलों पर गति देने का कोई तरीका है?

जवाबों:


7

bsdtar(कम से कम libarchive3.1.2 से) FS_IOC_FIEMAPफ़ाइल सिस्टम पर ioctl का उपयोग करके विरल वर्गों का पता लगाने में सक्षम है जो इसका समर्थन करते हैं (हालांकि यह कई अन्य एपीआई का भी समर्थन करता है), हालांकि, कम से कम मेरे परीक्षण में, विचित्र रूप से पर्याप्त है। tarफ़ाइलों को संभालने में सक्षम नहीं है यह स्वयं उत्पन्न करता है (हालांकि बग जैसा दिखता है)।

हालांकि tarउन्हें काम निकालने के लिए GNU का उपयोग किया जाता है, लेकिन तब GNU टार कुछ विस्तारित विशेषताओं को नहीं संभाल सकता है जो bsdtar का समर्थन करता है।

इसलिए

bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)

जब तक फ़ाइलों में एक्सटेंशन या झंडे नहीं होते, तब तक काम करता है।

यह अभी भी उन फ़ाइलों के लिए काम नहीं करता है जो पूरी तरह से विरल (केवल शून्य) हैं क्योंकि FS_IOC_FIEMAPioctl तब 0 सीमा तक लौटता है और ऐसा लगता bsdtarहै कि यह ठीक से (अन्य बग?) नहीं संभालता है।

star( शिल्ली टार ) एक और ओपनसोर्स टार कार्यान्वयन है जो विरल फ़ाइलों का पता लगा सकता है ( -sparseविकल्प का उपयोग करें ) और उनमें से कोई बग नहीं है bsdtar(लेकिन कई प्रणालियों द्वारा पैक नहीं किया गया है)।


2

इस लेखrsync में कम से कम कुछ उपयोगी सुझाव दिए गए हैं :

समस्या

का उपयोग करते हुए rsync --sparse works, लेकिन अनावश्यक डिस्क के एक विशाल माउंट का कारण बनता है लिखता है। 50GB लंबे (1GB इस्तेमाल) पर 10 बाइट्स बदलने से केवल एक या दो ब्लॉक लिखे जाने चाहिए, इससे 1GB लिखा जा सकता है। यह धीमा है, और डिस्कों की लंबी उम्र के लिए अच्छा नहीं है।

rsync --inplaceकार्यों का उपयोग करना , लेकिन गैर-विरल फाइलें बनाता है।

आप एक ही समय में --sparse और --inplace का उपयोग नहीं कर सकते :-( यह rsync द्वारा अस्वीकृत है। rsync: - sparse का उपयोग --inplace के साथ नहीं किया जा सकता है

समाधान

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

तो समाधान यह है कि स्रोत मशीन पर प्रत्येक फ़ाइल के लिए लक्ष्य मशीन पर एक संगत, सही-सही, खाली, विरल फ़ाइल बनाई जाए - यदि फ़ाइल अभी तक लक्ष्य मशीन पर मौजूद नहीं है।

तब rsync --inplace विरल के रूप में काम करेगा, स्पार्स फ़ाइलों को विरल छोड़कर, और केवल डिस्क को बदले हुए ब्लॉक लिख रहा है।

इसलिए, अगर मैं इसे सही ढंग से पढ़ता हूं, तो आप पहले लक्ष्य पर एक खाली विरल फ़ाइल बनाना चाहते हैं। आप इसके साथ कर सकते हैं

truncate -s 3G filename

फिर आप rsync --inplaceफ़ाइलों को कॉपी करने के लिए उपयोग कर सकते हैं। यह केवल एक बार आवश्यक होना चाहिए।


वही लेख Virtsync का उपयोग करने का सुझाव देता है जो है

विशाल फ़ाइलों (जैसे वर्चुअल मशीन डिस्क चित्र और डेटाबेस) की सामग्री को सिंक्रनाइज़ करने के लिए $ 49 वाणिज्यिक लिनक्स कमांड-लाइन टूल।

यह सबसे अच्छा समाधान हो सकता है यदि आप इसके लिए भुगतान करने को तैयार हैं क्योंकि यह विशेष रूप से इस प्रकार की स्थिति के लिए लिखा जा रहा है।

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