टैर+gzip/bzip संपीड़न/डिकंप्रेशन के लिए बहु कोर का उपयोग करना
tar 7zip (4)
मैं आमतौर पर tar zcvf
का उपयोग करके संपीड़ित करता tar zcvf
और tar zxvf
का उपयोग करके tar zcvf
(आदत के कारण gzip का उपयोग करके)।
मैंने हाल ही में हाइपरथ्रेडिंग के साथ एक क्वाड कोर सीपीयू प्राप्त किया है, इसलिए मेरे पास 8 लॉजिकल कोर हैं, और मुझे पता है कि कई कोर संपीड़न / डिकंप्रेशन के दौरान अप्रयुक्त हैं।
क्या कोई तरीका है कि मैं अप्रयुक्त कोर का उपयोग तेज़ी से करने के लिए कर सकता हूं?
सामान्य कोशिश
tar
प्रोग्राम के लिए विकल्प है:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
आप संग्रहक या कंप्रेसर उपयोगिता के बहुप्रचार संस्करण का उपयोग कर सकते हैं।
सबसे लोकप्रिय मल्टीथ्रेड pigz (gzip के बजाए) और pbzip2 (bzip2 के बजाय) हैं। उदाहरण के लिए:
$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive
अभिलेखागार को स्वीकार करना चाहिए-डी। यदि आपकी प्रतिस्थापन उपयोगिता में यह पैरामीटर नहीं है और / या आपको अतिरिक्त पैरामीटर निर्दिष्ट करने की आवश्यकता है, तो पाइप का उपयोग करें (यदि आवश्यक हो तो पैरामीटर जोड़ें):
$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz
सिंगलथ्रेड और मल्टीथ्रेड का इनपुट और आउटपुट संगत है। आप मल्टीथ्रेड संस्करण का उपयोग करके संपीड़ित कर सकते हैं और सिंगलथ्रेड संस्करण का उपयोग करके डिकंप्रेस कर सकते हैं और इसके विपरीत।
p7zip
संपीड़न के लिए p7zip के लिए आपको निम्न की तरह एक छोटी खोल स्क्रिप्ट चाहिए:
#!/bin/sh
case $1 in
-d) 7za -txz -si -so e;;
*) 7za -txz -si -so a .;;
esac 2>/dev/null
इसे 7zhelper.sh के रूप में सहेजें। यहां उपयोग का उदाहरण:
$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z
XZ
बहुप्रचारित एक्सजेड समर्थन के संबंध में। यदि आप --threads
संस्करण 5.2.0 या उससे ऊपर के संस्करण चला रहे हैं, तो आप पर्यावरण चर XZ_DEFAULTS (जैसे XZ_DEFAULTS="-T 0"
) के माध्यम से उपयुक्त मान पर -T
या --threads
को सेट करके संपीड़न के लिए एकाधिक कोर का उपयोग कर सकते हैं।
यह 5.1.0alpha संस्करण के लिए मनुष्य का एक टुकड़ा है:
मल्टीथ्रेडेड संपीड़न और डिकंप्रेशन अभी तक लागू नहीं किए गए हैं, इसलिए इस विकल्प का अब कोई प्रभाव नहीं पड़ा है।
हालांकि यह उन फ़ाइलों के डिकंप्रेशन के लिए काम नहीं करेगा जिन्हें थ्रेडिंग सक्षम के साथ भी संपीड़ित नहीं किया गया है। संस्करण 5.2.2 के लिए आदमी से:
थ्रेड डिकंप्रेशन अभी तक लागू नहीं किया गया है। यह केवल उन फ़ाइलों पर काम करेगा जिनमें ब्लॉक हेडर में आकार की जानकारी वाले कई ब्लॉक शामिल हैं। बहु-थ्रेडेड मोड में संपीड़ित सभी फाइलें इस स्थिति को पूरा करती हैं, लेकिन एकल-थ्रेडेड मोड में संपीड़ित फ़ाइलें तब भी नहीं होती हैं जब - ब्लॉक-आकार = आकार का उपयोग किया जाता है।
प्रतिस्थापन के साथ recompiling
यदि आप स्रोतों से टैर बनाते हैं, तो आप पैरामीटर के साथ पुन: संकलित कर सकते हैं
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
इन विकल्पों के साथ टैर को पुन: सम्मिलित करने के बाद आप टैर की सहायता के आउटपुट की जांच कर सकते हैं:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz
आप gzip के बजाय pigz उपयोग कर सकते हैं, जो एकाधिक कोर पर gzip संपीड़न करता है। -z विकल्प का उपयोग करने के बजाय, आप इसे पिगज़ के माध्यम से पाइप करेंगे:
tar cf - paths-to-archive | pigz > archive.tar.gz
डिफ़ॉल्ट रूप से, पिगज़ उपलब्ध कोर की संख्या का उपयोग करता है, या आठ अगर यह क्वेरी नहीं कर सका। आप -पीएन के साथ और अधिक पूछ सकते हैं, उदाहरण के लिए 32. पिगज़ में gzip के समान विकल्प हैं, इसलिए आप -9 के साथ बेहतर संपीड़न का अनुरोध कर सकते हैं। उदाहरण के लिए
tar cf - paths-to-archive | pigz -9 -p 32 > archive.tar.gz
आप शॉर्टकट --use-compress-program
का उपयोग टैर के --use-compress-program
switch के लिए कर सकते हैं, और एकाधिक कोर पर bzip2 संपीड़न के लिए pbzip2
आह्वान कर pbzip2
:
tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 DIRECTORY_TO_COMPRESS/
यदि आप फ़ाइल नाम और संपीड़न विकल्पों के साथ अधिक लचीलापन चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec \
tar -P --transform='[email protected]/my/path/@@g' -cf - {} + | \
pigz -9 -p 4 > myarchive.tar.gz
चरण 1: find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
यह आदेश उन फ़ाइलों को देखेगा जिन्हें आप संग्रहित करना चाहते हैं, इस मामले में /my/path/*.sql
और /my/path/*.log
। जितना चाहें उतने -o -name "pattern"
को जोड़ें।
-exec
के परिणामों का उपयोग कर अगले आदेश निष्पादित करेगा: tar
चरण 2: tar
tar -P --transform='[email protected]/my/path/@@g' -cf - {} +
--transform
एक साधारण स्ट्रिंग प्रतिस्थापन पैरामीटर है। यह संग्रह से फ़ाइलों का पथ पट्टी कर देगा ताकि निकालने पर टैरबॉल की जड़ वर्तमान निर्देशिका बन जाए। ध्यान दें कि आप निर्देशिका बदलने के लिए -C
विकल्प का उपयोग नहीं कर सकते हैं क्योंकि आप find
लाभ खो देंगे: निर्देशिका की सभी फाइलें शामिल की जाएंगी।
-P
पूर्ण पथ का उपयोग करने के लिए tar
को बताता है, इसलिए यह सदस्य नामों से "अग्रणी हटाने / 'चेतावनी को ट्रिगर नहीं करता है। --transform
भी तरह से --transform
द्वारा हटाए जाने वाले अग्रणी '/'।
-cf -
नाम का उपयोग करने के लिए -cf -
बताता है जिसे हम बाद में निर्दिष्ट करेंगे
{} +
पहले पाए गए हरफाइल का उपयोग करता है
चरण 3: pigz
pigz -9 -p 4
जितना चाहें उतने पैरामीटर का प्रयोग करें। इस मामले में -9
संपीड़न स्तर है और -p 4
संपीड़न के लिए समर्पित कोर की संख्या है। यदि आप इसे भारी लोड किए गए वेबसर्वर पर चलाते हैं, तो आप शायद सभी उपलब्ध कोरों का उपयोग नहीं करना चाहते हैं।
चरण 4: संग्रह का नाम
> myarchive.tar.gz
आखिरकार।