बड़ी संख्या में छोटी फ़ाइलों को संकुचित करने और स्थानांतरित करने पर मेमोरी समस्याएं (1TB कुल)


15

मेरे पास 5 मिलियन फाइलें हैं जो लगभग 1TB स्टोरेज स्पेस लेती हैं। मुझे इन फाइलों को किसी तीसरे पक्ष को स्थानांतरित करने की आवश्यकता है।

ऐसा करने का सबसे अच्छा तरीका क्या है? मैंने .tar.gz का उपयोग करके आकार को कम करने की कोशिश की है, लेकिन भले ही मेरे कंप्यूटर में 8GB रैम है, लेकिन मुझे "सिस्टम मेमोरी" त्रुटि में से एक मिलता है।

क्या फाइलों को खत्म करने का सबसे अच्छा उपाय है?


9
क्या आपको कोई समस्या हो रही है .tar.gzया परिणामस्वरूप संपीड़ित फ़ाइल की प्रतिलिपि बनाई जा रही है ? किसी भी तरह से, कुछ अजीब है, क्योंकि न तो ऑपरेशन को अधिक मेमोरी का उपभोग करना चाहिए, क्योंकि फाइलें बड़ी हैं। यही है, दोनों संचालन स्ट्रीमिंग होना चाहिए। कृपया इस बारे में अधिक जानकारी शामिल करें कि क्या आदेश विफल हो रहे हैं।
सेलडा

1
आपके और तीसरे पक्ष के पास कितना बैंडविड्थ है? एक भोली rsync आपको डाक पर बचा सकती है। लेकिन मुझे नहीं पता कि "पाँच मिलियन" फाइलें आपके लिए कैसे काम करेंगी क्योंकि rsync फाइल-इन-मेमोरी को बनाने की कोशिश करेगा और यदि सूची (5e6 फाइलें)> 8 जीबी हो सकती है। और निश्चित ही यह धीमा होगा।
काल्विन ली

2
@oshirowanen मुझे नहीं लगता कि इसे फ़ाइल सूची की गणना करने वाली मेमोरी का एक समूह का उपभोग करना चाहिए क्योंकि मुझे पूरा यकीन है कि tarफाइलों को केवल संग्रह करना चाहिए क्योंकि यह उन्हें सूचीबद्ध करता है, कभी भी स्मृति में सूची का निर्माण नहीं करता है। लेकिन फिर, कृपया उस सटीक कमांड को दिखाएं जो आप उपयोग कर रहे हैं। इसके अलावा, क्या सभी फाइलें एक ही निर्देशिका में हैं या क्या निर्देशिका संरचना बहुत गहरी है?
सेलडा

3
आह, अच्छी तरह से GUI कार्यक्रम अक्सर ऐसे लक्ष्यों को अधिक महत्व दिए बिना बनाए जाते हैं जैसे कि स्केलेबिलिटी और मजबूती। यह मुझे आश्चर्य नहीं होगा अगर यह जीयूआई आवरण / दृश्यपटल की गलती है। कमांड लाइन का उपयोग करके फ़ाइल बनाएं और मुझे लगता है कि आप पाएंगे कि यह ठीक काम करता है।
सेलडा

3
100 Mbit / s ब्रॉडबैंड कनेक्शन पर ट्रांसफर करने में 1 टीबी डेटा को कम से कम 22 घंटे का समय लगेगा। तो आप कितना संपीड़न हासिल करने की उम्मीद करते हैं, इस पर निर्भर करता है कि घोंघा मेल वास्तव में सबसे तेज विकल्प हो सकता है।
दान

जवाबों:


27

टिप्पणियों में दी गई अतिरिक्त जानकारी से पता चलता है कि ओपी .tar.gzफ़ाइल बनाने के लिए जीयूआई पद्धति का उपयोग कर रहा है।

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

यदि आप GUI कार्यक्रम से बचते हैं, तो आप इस तरह पूरी तरह से सामान्य रोजमर्रा के tarआह्वान का उपयोग करके इस संग्रह को उत्पन्न कर सकते हैं :

tar czf foo.tar.gz foo

fooवह निर्देशिका कहां है जिसमें आपकी सभी 5 मिलियन फाइलें हैं।

इस सवाल के अन्य उत्तर आपको अतिरिक्त वैकल्पिक tarआदेशों के एक जोड़े को देने की कोशिश करते हैं ताकि आप परिणाम को कई टुकड़ों में विभाजित कर सकें , आदि ...


15

"पाँच मिलियन" फाइलें, और कुल मिलाकर 1TB? आपकी फ़ाइलें बहुत छोटी होनी चाहिए, फिर। मैं बस कोशिश करूँगा rsync:

rsync -alPEmivvz /source/dir remote.host.tld:/base/dir

यदि आपके पास ऐसा नहीं है - या आपका उपयोग-मामला उपयोग करने की अनुमति नहीं देता है rsync, तो मैं कम से कम यह जांच करूंगा कि क्या 7zआपके डेटा के साथ काम करता है। यह नहीं हो सकता है, लेकिन मुझे लगता है कि यह अभी भी एक कोशिश के लायक है:

7z a archive.7z /source/dir

या अगर आप 7zकम से कम एक .tar.xzसंग्रह बनाने की कोशिश के साथ सहज महसूस नहीं करते हैं :

tar cJv archive.tar.xz /source/dir

(यह ध्यान दिया जाना चाहिए, कि स्विच का उपयोग करते समय पुराने संस्करण अभिलेखागार tarनहीं बनाते हैं .tar.xz, लेकिन .tar.lzmaअभिलेखागार हैं J। यहां तक ​​कि पुराने संस्करणों के भी tar, Jध्वज का पूरी तरह से समर्थन नहीं करते हैं।)


चूंकि आप उन फ़ाइलों को बनाने के लिए GUI प्रोग्राम का उपयोग कर रहे हैं, इसलिए मैं मान रहा हूं कि आप कमांड लाइन इंटरफ़ेस का उपयोग करके थोड़ा असहज महसूस कर रहे हैं।

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

जांचें कि क्या आपका डिस्ट्रो atoolउनके रिपोज में है, या अपने एडमिन को इसे इंस्टॉल करने के लिए कहें, जब यह कार्यस्थल के माहौल में हो।

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

apack archive.tar.xz <files and/or directories>

एक संग्रह बनाता है।

aunpack archive.7z

संग्रह का विस्तार करता है।

als archive.rar

फ़ाइल सामग्री सूचीबद्ध करता है।

किस तरह का आर्काइव बनाया गया है, इस बात को atoolसमझें कि कमांड लाइन में आपके आर्काइव का फाइलनेम एक्सटेंशन है।


4
यहां उपयोग करने rsyncका लाभ यह है कि यदि (जब) ​​कनेक्शन टूट जाता है, तो rsyncवह उठा सकता है जहां उसने छोड़ा था।
रोजा जू

2
फाइलें औसतन 200 केबी की होंगी। यह सब इतना छोटा नहीं है।
नैट एल्ड्रेडज

4
@NateEldredge मैं आमतौर पर अर्थ के रूप में बड़ा लगता है> 1GB। छोटा आमतौर पर <1MB है। बहुत छोटा है।
22

8

जब तक आप 25: 1 संपीड़न से बेहतर नहीं कर सकते, तब तक आपको घोंघे-मेलिंग से पहले इसे संपीड़ित करने से कुछ भी प्राप्त होने की संभावना नहीं है, जब तक कि आपके पास कुछ हार्डवेयर टेप प्रारूप नहीं है जो आप तीसरे पक्ष का आदान-प्रदान कर सकते हैं।

सबसे बड़ा आम भंडारण नीली किरण है और यह मोटे तौर पर आपको 40 जीबी मिलेगा। आपको उस पर फिट होने के लिए अपने डेटा पर 25 से 1 संपीड़न की आवश्यकता होगी। यदि आपकी तीसरी पार्टी में केवल डीवीडी है, तो आपको 125: 1 (लगभग) की आवश्यकता है।

यदि आप उन कम्प्रेशन नंबरों से मेल नहीं खा सकते हैं तो बस एक सामान्य डिस्क, कॉपी और स्नेल मेल का उपयोग करें जो कि थर्ड पार्टी के लिए है। उस मामले में 1Tb ड्राइव की तुलना में कुछ छोटा शिपिंग है जिसे संपीड़न की आवश्यकता होगी पागलपन है।

आपको बस तुलना करना है ssh -C(मानक संपीड़न) का उपयोग करना या अधिमानतः rsyncसंपीड़न के साथ नेटवर्क पर फ़ाइलों की प्रतिलिपि बनाने के लिए, सामने की ओर संपीड़ित और टार करने की आवश्यकता नहीं है। 1Tb नेट से आगे बढ़ना असंभव नहीं है, लेकिन इसमें कुछ समय लगने वाला है।


5
+1: "कभी भी हाइवे को नुकसान पहुंचाने वाले टेपों से भरे स्टेशन वैगन की बैंडविड्थ को कम न समझें" (एंड्रयू एस। टेनबाम)। en.wikipedia.org/wiki/Sneakernet
ओलिवियर दुलक

@OlivierDulac मैंने बोइंग 747 के साथ इसी तरह के निर्माणों को देखा है और CDROMs से भरे बक्से यह आश्चर्यजनक है कि आप किस तरह के थ्रूपुट के साथ मिल सकते हैं।
एंथन

मैं प्यार करता हूँ कि एक पिजिन एक आईएसपी को एक लंबे शॉट से हरा देता है, विकिपीडिया पृष्ठ की छूट देखें ^ ^
ओलिवियर

6

क्या आप धार मानते थे? एक से अधिक इंटरनेट ट्रांसफर के लिए पीयर-टू-पीयर आपका सबसे अच्छा विकल्प हो सकता है:

  • कम से कम उतनी ही तेजी से अन्य इंटरनेट ट्रांसफर: आपकी अपलोड गति हस्तांतरण की गति निर्धारित करेगी
  • कोई डेटा भ्रष्टाचार नहीं
  • पहले ट्रांसफर करने के लिए कौन सी फाइल चुनें
  • कोई अतिरिक्त स्थानीय / क्लाउड संग्रहण स्थान की आवश्यकता नहीं है
  • नि: शुल्क

आपने यह नहीं बताया कि आप किस OS का उपयोग कर रहे हैं, लेकिन जैसा कि आप tar.gz कम्प्रेशन के बारे में बोल रहे हैं, मैं मान लूंगा कि आप कुछ GNU / Linux जैसे OS का उपयोग कर रहे हैं। उसके लिए मैं Transmission का सुझाव दूंगा । यह एक ओपन-सोर्स टोरेंट सॉफ्टवेयर है जो मैक और लिनक्स पर चलता है। मुझे यह पसंद है क्योंकि डेवलपर्स इसे उन हर जीयूआई ग्राहकों को मूल बनाने में प्रयास करते हैं जो वे समर्थन करते हैं: कोई क्रॉस-प्लेटफ़ॉर्म भाषा नहीं।

आप इस विधि को संपीड़न के साथ जोड़ सकते हैं, हालांकि आप हस्तांतरण के कुछ हिस्सों को प्राथमिकता देने की क्षमता खो देंगे।


टोरेंट सॉफ्टवेयर में शायद वही समस्याएं हैं जो GUI सॉफ्टवेयर को कंप्रेस कर रही हैं। मेमोरी में फ़ाइल नाम स्टोर करना, आदि।, टोरेंट फाइल्स को फाइलों के मेटा डेटा को स्टोर करना होता है। 5 मिलियन फ़ाइल नामों को टोरेंट फ़ाइल में पैक किया जाना चाहिए।
आयेश के

@AyeshK सच, यह प्रदर्शन को प्रभावित करेगा जब टोरेंट को जोड़ / बनाकर या चेकसम को चेक किया जाएगा। फिर भी, मेरा मानना ​​है कि बड़ी मात्रा में डेटा के हस्तांतरण के लिए यह सबसे स्थिर समाधान है।
लाक्स

टोरेंट फ्रीक के अनुसार, अब तक का सबसे बड़ा टोरेंट ~ 800gb साझा किया गया है। अधिकांश फ़ाइलों वाली सिंगल टोरेंट फाइल में लगभग 33K फाइलें होती हैं। लेकिन 5 मिलियन फाइलें ... मुझे यकीन नहीं है।
आयुष के

3

7z मेरी पसंद होगी। यह अभिलेखागार के ऑटो-विभाजन को अनुमति देता है और बहु-थ्रेडेड संपीड़न का समर्थन करता है। नहीं है, xzक्या सहायता संदेश कहते हैं के बावजूद, नहीं करता है। इसके साथ प्रयास करें:

7za a -v100m -m0=lzma2 -mx=9 -ms=on -mmt=$THREADS archive.7z directory/

आउटपुट 100MB ब्लॉकों में विभाजित है (इसे के साथ बदलें) -v स्विच के )।

केवल वास्तविक नकारात्मक पक्ष यह है कि 7z यूनिक्स मेटाडेटा (जैसे अनुमतियां और मालिक) को बरकरार नहीं रखता है। यदि आपको इसकी आवश्यकता है, तो इसके बजाय पाइप tarआउटपुट 7za( man 7zaकुछ उदाहरणों के लिए देखें )।


1
The only real downsideलेकिन क्या एक नकारात्मक पहलू है!
njzk2

@ njzk2 वास्तव में यह परिदृश्य पर निर्भर करता है। उदाहरण के लिए, यदि आप बैकअप चित्र या डेटाबेस डंप भेज रहे हैं, तो आप संभवतः अनुमतियों के बारे में ज्यादा परवाह नहीं करते हैं।
स्टेफानो सैनफिलिपो

जब आप splitएक .tar.gz फ़ाइल पर उपयोग कर सकते हैं , और मेटाडाटा रखने के लिए प्राप्त कर सकते हैं, तो मैं विभाजन के लिए 7z का उपयोग करने का बिंदु नहीं देखता ।
njzk2

@ njzk2 यह भी विभाजित करता है। मुख्य रूप से, इसमें LZMA2 के साथ बहु-थ्रेडेड संपीड़न है। कोई अन्य यूनिक्स उपयोगिता नहीं जो मैं इसका समर्थन करता हूं। 7z में एक गैर-ठोस संपीड़न मोड भी है, जो एक महान कदम है जब केवल एक विशिष्ट फ़ाइल को एक्सेस करने के लिए wrt एक्सेस करना पड़ता है tar
स्टेफानो सैनफिलिपो


3

मैंने फ़ोल्डर को राइट क्लिक किया और "संग्रह बनाएं" पर क्लिक किया और .tar.gz विकल्प का चयन किया। 500,000 से अधिक निर्देशिकाओं में निर्देशिका संरचना गहरी है

हाँ, सौभाग्य है कि पैकेज करने के लिए। और जीयूआई उपकरण उसी वॉल्यूम पर करने की कोशिश करेगा, जिसका अर्थ है कि ए) आपको एक और 1 टीबी मुफ्त स्थान की आवश्यकता है और बी) एक फ़ाइल को पढ़ने और उसे संग्रह में जोड़ने के लिए हेड हेडिंग ड्राइव के लिए बहुत स्वस्थ नहीं होगी।

मुझे दो संभावनाएँ दिखती हैं:

1) आपके कंप्यूटर से 3rd पार्टी में rsync। एक या दूसरे को वैश्विक आईपी पते की आवश्यकता होगी जो अक्सर बदलता नहीं है। विशाल rsync का लाभ यदि आप किसी भी कारण से बाधित हो, यह शुरू कर सकें जहां उसे रोका गया था है। 1Tb टैरबॉल की प्रतिलिपि बनाना या तो सफल होना या विफल होना है

2) 1Tb बाहरी ड्राइव खरीदें, चीजों को कॉपी करें और ड्राइव को डिलीवर करें। उच्च विलंबता, लेकिन वास्तव में अच्छा बैंडविड्थ जब यह आता है। प्रारंभिक बैकअप के लिए विभिन्न ऑनलाइन बैकअप सेवाएं।



1

मेरा सुझाव है कि आप कुछ का उपयोग करें:

tar -c -L 104857600 -f file1.tar -f file2.tar -f file3.tar -f file4.tar -f file5.tar -f file6.tar -f file7.tar -f file8.tar -f file9.tar -f file10.tar 
gzip file*.tar

जो 10 फाइलें बनाएगा जो कि अधिकतम 100GB बड़ी होगी। लेकिन यह आपके "ओओएम" मुद्दे का जवाब नहीं देगा क्योंकि टार को माना जाता है कि इसे पढ़ा / लिखा जाना है, इसलिए अड़चन को मोटे तौर पर ज़िप किया जाता है।


0

उस के बारे में कैसा है:

find /path | tar -T - -czf - | ssh remotehost "cd /target/dir/; tar xzf -"
  • find निर्देशिका ट्री को सूचीबद्ध करता है
  • tar -T - स्टड से सूची पढ़ता है
  • -czf -एक संग्रह बनाता है और stdout को लिखता है, zस्ट्रीम को gzips करता है
  • ssh remotehost का उपयोग कर Remotehost में प्रवेश करें ssh
  • cd /target/dir/ लक्ष्य निर्देशिका में परिवर्तन
  • tar xzf - स्टड से आने वाली धारा निकालें

अच्छा थोड़ा स्निपेट। हालांकि मुझे लगता है कि उनकी जरूरत यहां संपीड़न सुविधा है, क्योंकि उद्देश्य "दोस्त को हस्तांतरित करना" है
मॉवरोन

पूरी तरह से संग्रह नहीं बनाने पर चोट लगेगी जब कनेक्शन बाधित होता है, जो कि 1 टीबी को स्थानांतरित करते समय पूरी तरह से संभावना नहीं है, या तो नेटवर्क आउटेज के कारण (अभी भी आईएसपी हैं जो आपको हर 24 घंटे में डिस्कनेक्ट करते हैं) या अन्य कारण।
जोनास श्फर

0

Fexsend के साथ आप किसी भी प्राप्तकर्ता की किसी भी संख्या और आकार की फाइल को किसी भी प्राप्तकर्ता को भेज सकते हैं, देखें:

http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html

बेशक, आपको F * EX सर्वर की आवश्यकता है, लेकिन यह मुफ़्त है:

http://fex.rus.uni-stuttgart.de:8080/

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