पुरालेख पुरालेख के लिए वैकल्पिक?


15

फिलहाल मैं ArchiveMount123,000 केबी संग्रह को माउंट करने का उपयोग कर रहा हूं जिसमें 3 मिलियन से अधिक फाइलें हैं। अब तक यह 5+ घंटे के लिए बढ़ रहा है और अभी भी समाप्त नहीं हुआ है।

क्या .tar.gzफ़ाइल को माउंट करने का एक बेहतर तरीका है ? मैं एक फ़ोल्डर में माउंट करने की कोशिश कर रहा हूँ, और असम्पीडित यह कुछ गिग्स लेता है। मुझे भी लिखने की जरूरत नहीं है, केवल पढ़ने के लिए पर्याप्त है।


एवीएफएस भी है ; मुझे नहीं पता कि यह बेहतर प्रदर्शन करेगा।
गिलेस एसओ-

8
यदि आपकी फ़ाइलों को एक टारबॉल के बजाय एक स्क्वैशफॉफ मॉड्यूल के रूप में संकुचित किया गया था, तो केवल-पढ़ने के लिए पहुंच बहुत तेज होगी - आप बस (लूप) स्क्वैशफॉफ मॉड्यूल को माउंट करते हैं। स्क्वैश-टूल्स पैकेज की आवश्यकता है।
dru8274

मैं वर्तमान में इस तरह के एक फ़ाइल सिस्टम प्रोग्रामिंग कर रहा हूँ। कुछ महीने इंतजार करें और यह होने जा रहा है।
फ़ूजएक्सएक्सएल

@FUZxxl खैर, इसके 2 साल हो गए, क्या आपने कभी इस उपयोगिता को लिखा है?
साइबरनार्ड

@cybernard FUSE ने मुझे इतना निराश किया कि मैंने इस परियोजना को छोड़ दिया। मैं बकवास के इस अनछुए टुकड़े से नफरत करता हूं। मैं इसे बैक बर्नर पर रखता हूं और बाद में इसे वापस ले सकता हूं।
फ़ूजएक्सएक्स

जवाबों:


7

आप एक संपीड़ित स्क्वाशफ़ छवि भी बना सकते हैं

mksquashfs /etc squashfs.img -comp xz
mkdir img
mount -o squashfs,ro squashfs.img img

ऐसा करने के लिए आपको अपना tar.gz archvie निकालना होगा।

लाभ यह भी है कि छवि में gz की तुलना में बेहतर दोष सहिष्णुता है।


6

यहां समस्या प्रारूप के साथ है, टीएआर (टेप एआरचीव) प्रारूप अनुक्रमिक पहुंच के लिए डिज़ाइन किया गया है, यादृच्छिक अभिगम नहीं। और gzip टार के लिए एक अच्छा पूरक है, क्योंकि यह एक स्ट्रीम आधारित संपीड़न प्रारूप है, यादृच्छिक अभिगम के लिए भी नहीं।

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

यदि आप चाहते हैं कि यह तेज़ी से आगे बढ़े, तो ऐसा करें tar tzf file.tar.gz > filelist, उस फ़ाइल सूची को vim , gedit या जो भी खोलें , उन फ़ाइलों की पंक्तियों को हटा दें जिनकी आपको आवश्यकता नहीं है, सहेजना और फिर उन्हें निकालना tar xzf file.tar.gz -T filelist -C extracted/

संपीड़ित फ़ाइल के लिए यादृच्छिक अभिगम प्राप्त करने के लिए, आपको पॉज़िक्स एक्सटेंशन, आरएआर के साथ शायद ज़िप का उपयोग करना चाहिए, या जैसा कि dru8274 ने सुझाव दिया है, स्क्वैशफ़ॉफ़, या यहां तक ​​कि ज़ेडएफएस संपीड़न के साथ चालू किया है, या अगर btrfs ने पढ़ने के समय काम करने के लिए संपीड़न प्राप्त किया है।


3
संपीड़ित फ़ाइल तक यादृच्छिक पहुँच प्राप्त करने के लिए, आप पिक्सज़ का भी उपयोग कर सकते हैं।
कुबंज़िक

6

मैंने एक तेज़ वैकल्पिक रिटर्माउंट लिखा , जो "मेरे लिए काम करता है", क्योंकि यह समस्या मुझे परेशान करती रही।

आप इसे इस तरह से उपयोग कर सकते हैं:

pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level

जब आप कर रहे हैं आप इसे किसी भी FUSE माउंट की तरह unmount कर सकते हैं:

fusermount -u mount-folder

यह आर्कमाउंट से तेज क्यों है?

यह इस बात पर निर्भर करता है कि आप क्या मापते हैं।

यहां मेमोरी फ़ुटप्रिंट का एक बेंचमार्क है और पहले माउंटिंग के लिए आवश्यक समय है, साथ ही एक साधारण cat <file-in-tar>कमांड और एक साधारण findकमांड के लिए एक्सेस टाइम भी है ।

रिटर्माउंट और आर्कमाउंट के बीच बेंचमार्क तुलना

प्रत्येक 1k फ़ाइलों वाले फ़ोल्डर बनाए गए थे और फ़ोल्डरों की संख्या विविध है।

निचले बाएं प्लॉट में cat <file>10 बेतरतीब ढंग से चुनी गई फ़ाइलों के लिए न्यूनतम और अधिकतम मापा बार को इंगित करने में त्रुटि बार दिखाई देते हैं ।

फ़ाइल का समय

हत्यारा तुलना वह समय है जिसे cat <file>समाप्त करने में समय लगता है । किसी कारण से, यह तीतर फ़ाइल आकार (लगभग बाइट्स प्रति फ़ाइल x संख्या की बाइट्स) के साथ रेखीय रूप से रिटर्माउंट में निरंतर समय के दौरान संग्रह के लिए होता है। इससे ऐसा लगता है कि आर्काइवमाउंट बिल्कुल भी चाहने का समर्थन नहीं करता है।

संकुचित TAR फ़ाइलों के लिए, यह विशेष रूप से ध्यान देने योग्य है। cat <file>पूरे .tar.bz2 फ़ाइल को बढ़ते हुए दोगुना से अधिक समय लेता है! उदाहरण के लिए, 10k खाली (!) फ़ाइलों के साथ TAR को आर्कमाउंट के साथ माउंट करने के लिए 2.9 s लगते हैं लेकिन जो फ़ाइल एक्सेस की जाती है, उसके आधार पर cat3ms और 5s के बीच का उपयोग होता है। समय लगता है TAR के अंदर फ़ाइल की स्थिति पर निर्भर करता है। TAR के अंत में मौजूद फ़ाइलों की तलाश में अधिक समय लगता है; यह दर्शाता है कि "तलाश" का अनुकरण किया गया है और फ़ाइल से पहले टीएआर में सभी सामग्री को पढ़ा जा रहा है।

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

Ratarmount प्रतीत होता है कि फ़ाइल प्राप्त करने में हमेशा एक ही समय लगता है क्योंकि यह सही मांग का समर्थन करता है। Bzip2 संकुचित TARs के लिए, यह bzip2 ब्लॉक को भी ढूंढता है, जिसके पते भी इंडेक्स फ़ाइल में संग्रहीत हैं। सैद्धांतिक रूप से, फ़ाइलों की संख्या के साथ स्केल करने वाला एकमात्र हिस्सा इंडेक्स में लुकअप है और इसे ओ (लॉग (एन)) के साथ स्केल करना चाहिए क्योंकि यह फ़ाइल पथ और नाम से सॉर्ट किया गया है।

स्मृति पदचिह्न

सामान्य तौर पर, अगर आपके पास TAR के अंदर 20k से अधिक फाइलें हैं, तो ratarmount की मेमोरी फुटप्रिंट छोटी होगी क्योंकि इंडेक्स को डिस्क के रूप में लिखा जाता है क्योंकि यह बनाया गया है और इसलिए मेरे सिस्टम पर लगभग 30MB की निरंतर मेमोरी फुटप्रिंट है।

एक छोटा अपवाद gzip डिकोडर बैकेंड है, जो किसी कारण से अधिक यादों की आवश्यकता होती है क्योंकि gzip बड़ा हो जाता है। यह मेमोरी ओवरहेड टीएआर के अंदर मांगने के लिए आवश्यक सूचकांक हो सकता है लेकिन आगे की जांच की आवश्यकता है क्योंकि मैंने उस बैकएंड को नहीं लिखा था।

इसके विपरीत, आर्कमाउंट पूरे इंडेक्स को रखता है, जो कि 2M फाइलों के लिए 4GB है, पूरी तरह से मेमोरी में जब तक TAR माउंट है।

बढ़ते समय

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

बढ़ते समय के लिए आवश्यक समय आर्कमाउंट में थोड़े अजीब व्यवहार करता है। लगभग 20k फाइलों से शुरू होकर यह फाइलों की संख्या के संबंध में रैखिक रूप से बजाय चतुष्कोणीय पैमाने पर शुरू होती है। इसका मतलब है कि मोटे तौर पर 4M फाइलों से शुरू होकर, रिटर्माउंट, आर्कमाउंट की तुलना में बहुत तेज होना शुरू होता है, जबकि TAR की छोटी फाइलों के लिए यह 10 गुना तक धीमी होती है! फिर फिर से, छोटी फ़ाइलों के लिए, यह ज्यादा फर्क नहीं पड़ता कि टार को माउंट करने के लिए 1s या 0.1s लगते हैं (पहली बार)।

Bz2 संपीड़ित फ़ाइलों के लिए बढ़ते समय हर समय सबसे तुलनीय हैं। यह बहुत संभावना है क्योंकि यह bz2 डिकोडर की गति से बंधा है। रैटमाउंट लगभग 2 गुना धीमा है। मैं निकट भविष्य में bz2 डिकोडर को समानांतर करके स्पष्ट विजेता बनाने की उम्मीद करता हूं, जो कि मेरे 8 वर्षीय सिस्टम के लिए भी 4x स्पीडअप प्राप्त कर सकता है।

मेटाडेटा प्राप्त करने का समय

जब findटीएआर के साथ सभी फाइलों को सूचीबद्ध करते हैं (प्रत्येक फ़ाइल के लिए स्टेट कॉल करने के लिए भी लगता है!?), सभी परीक्षण किए गए मामलों के लिए रिटर्माउंट 10x धीमी है। मैं भविष्य में इस पर सुधार की उम्मीद करता हूं। लेकिन वर्तमान में, यह शुद्ध सी प्रोग्राम के बजाय पायथन और SQLite का उपयोग करने के कारण एक डिज़ाइन समस्या की तरह दिखता है।


ओपी अपनी समस्या को हल करने के लिए इसे कैसे स्थापित और उपयोग करेगा ?
जेफ स्कालर

@JeffSchaller मैंने github readme.md
mxmlnkn

0

यह सभी उपयोग-मामलों को कवर नहीं करेगा क्योंकि यह पाठ-संपादक के उपयोग को प्रतिबंधित करता है। लेकिन, यदि आप केवल पढ़ने-पहुंच की परवाह करते हैं, तो आपको कुछ स्थितियों के लिए यह मददगार लग सकता है। vim, जब एक टारबॉल पर चलाया जाता है, तो आपको संग्रह की सामग्री पदानुक्रम दिखाई देगी (इसी तरह यह एक निर्देशिका पर चलने पर फ़ाइल पदानुक्रम कैसे प्रदर्शित करेगा)। सूची में से किसी एक फ़ाइल का चयन करके, यह चयनित फ़ाइल को केवल-पढ़ने के लिए बफ़र में खोल देगा।

फिर, यह आवश्यक रूप से छवियों या अन्य मीडिया तक पहुंच प्रदान नहीं करता है, लेकिन अगर आपको केवल सामग्री को देखने या पाठ-आधारित फ़ाइलों तक पहुंचने की आवश्यकता है, तो यह सहायक होना चाहिए।

नोट : यह सभी संग्रह प्रारूपों पर काम नहीं करेगा।


vim के बिल्ट-इन आर्काइव व्यूअर को अभी भी एक लिस्टिंग प्राप्त करने के लिए पूरी फ़ाइल के माध्यम से स्कैन करने की आवश्यकता है, शायद ही एविएफ़ और आर्कमाउंट से तेज़। और लाखों लाइनों की इतनी बड़ी सूची का प्रदर्शन भी भयानक है।
把 留 在 把 把

0

मेरा दृष्टिकोण। यदि आपके पास बाहरी USB ड्राइव या पर्याप्त स्थान के साथ बाहरी / द्वितीयक HDD ड्राइव पर पर्याप्त डिस्क स्थान है, तो अपनी .tar.gz फ़ाइल को निकालने पर विचार करें। यह सोचकर कि आप शायद अपने मुख्य सिस्टम डिस्क पर 3 मिलियन फाइलें नहीं चाहते हैं, क्योंकि इससे चीजें धीमी हो सकती हैं। मेरा सुझाव है कि इस मामले में बाहरी डिस्क में एक फाइलसिस्टम है जो बड़ी संख्या में फाइलों को आसानी से हैंडल करता है: सोच ReiserFS, ext4 (dir_index विकल्प के साथ), XFS, शायद BtrFS। अर्क को करने में 1-2 घंटे लग सकते हैं, लेकिन आप इस बीच दोपहर का भोजन प्राप्त कर सकते हैं या इसे रात भर चलने दे सकते हैं; जब आप वापस आते हैं, तो निकाली गई फ़ाइलों तक पहुंच प्रदर्शन योग्य होनी चाहिए।


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