Bzip2 को बदलने के लिए xz कम्प्रेशन पर टार्क आर्काइव प्रारूप क्यों बदल रहे हैं और gzip के बारे में क्या है?


202

अधिक से अधिक tarअभिलेखागार xzपारंपरिक bzip2(bz2)संपीड़न के बजाय संपीड़न के लिए LZMA2 पर आधारित प्रारूप का उपयोग करते हैं । वास्तव में kernel.org ने देर से " गुड-बाय bzip2 " की घोषणा की, 27 दिसंबर , 2013 को , कर्नेल स्रोतों का संकेत इस बिंदु से दोनों tar.gz और tar.xz प्रारूप में जारी किया जाएगा - और वेबसाइट के मुख्य पृष्ठ पर जो सीधे पेश किया जाता है वह है tar.xz

क्या कोई विशेष कारण बताए गए हैं कि ऐसा क्यों हो रहा है और gzipइस संदर्भ में इसकी प्रासंगिकता क्या है ?

history  gzip  bzip2  xz 

जवाबों:


198

इंटरनेट पर अभिलेखागार वितरित करने के लिए, निम्नलिखित बातें आमतौर पर प्राथमिकता होती हैं:

  1. संपीड़न अनुपात (यानी, कंप्रेसर कितना छोटा डेटा बनाता है);
  2. विघटन समय (सीपीयू आवश्यकताओं);
  3. विघटन स्मृति आवश्यकताओं; तथा
  4. संगतता (विघटन-प्रसार कार्यक्रम कितना व्यापक है)

संपीड़न मेमोरी और CPU आवश्यकताएं बहुत महत्वपूर्ण नहीं हैं, क्योंकि आप उसके लिए एक बड़ी फास्ट मशीन का उपयोग कर सकते हैं, और आपको केवल एक बार करना होगा।

Bzip2 की तुलना में, xz का बेहतर संपीड़न अनुपात और कम (बेहतर) विघटन समय है। हालांकि, आमतौर पर उपयोग की जाने वाली संपीड़न सेटिंग्स में — डेकोप्रेस करने के लिए अधिक मेमोरी की आवश्यकता होती है [1] और कुछ हद तक कम व्यापक होती है। गज़िप या तो कम मेमोरी का उपयोग करता है।

तो, दोनों gzip और xz प्रारूप अभिलेखागार पोस्ट किए गए हैं, जिससे आप चुन सकते हैं:

  • बहुत सीमित मेमोरी (<32 एमबी): गज़िप के साथ मशीन पर डिकम्प्रेस करने की आवश्यकता है । दिए गए, कर्नेल स्रोतों के बारे में बात करते समय बहुत संभावना नहीं है।
  • उपलब्ध न्यूनतम उपकरणों को डिकम्पोज करने की आवश्यकता है: gzip
  • डाउनलोड समय और / या बैंडविड्थ को बचाना चाहते हैं: xz

वास्तव में कारकों का एक यथार्थवादी संयोजन नहीं है जो आपको bzip2 लेने के लिए मिलेगा। इसलिए इसके चरणबद्ध किए जा रहे हैं।

मैंने एक ब्लॉग पोस्ट में संपीड़न तुलनाओं को देखा । मैंने परिणामों को दोहराने की कोशिश नहीं की, और मुझे संदेह है कि इसमें से कुछ बदल गया है (ज्यादातर, मुझे उम्मीद xzहै कि इसमें सुधार हुआ है, क्योंकि यह सबसे नया है।)

(कुछ विशिष्ट परिदृश्य हैं जहां एक अच्छा bzip2 कार्यान्वयन xz के लिए बेहतर हो सकता है: bzip2 xz की तुलना में बहुत सारे शून्य और जीनोम डीएनए अनुक्रमों के साथ एक फ़ाइल को संपीड़ित कर सकता है। xz के नए संस्करणों में अब एक (वैकल्पिक) ब्लॉक मोड है जो डेटा पुनर्प्राप्ति की अनुमति देता है। भ्रष्टाचार और समानांतर संपीड़न के बिंदु के बाद और [सिद्धांत रूप में] विघटन। पहले, केवल bzip2 ने इनकी पेशकश की थी। [२] हालाँकि इनमें से कोई भी कर्नेल वितरण के लिए प्रासंगिक नहीं है)


1: संग्रह आकार में, xz -3चारों ओर है bzip -9। तब xz डिकम्प्रेस करने के लिए कम मेमोरी का उपयोग करता है। लेकिन xz -9(जैसे, लिनक्स कर्नेल टारबॉल के लिए उपयोग किया जाता है) की तुलना में बहुत अधिक उपयोग होता है bzip -9। (और इससे भी xz -0अधिक की आवश्यकता है gzip -9)।

2: F21 सिस्टम वाइड चेंज: डिफ़ॉल्ट bzip2 कार्यान्वयन के रूप में lbzip2


गलती सहिष्णुता के विषय पर कोई टिप्पणी या क्या ऐसा कुछ है जो हमेशा संपीड़न एल्गोरिदम के बाहर पूरी तरह से लागू होता है?

1
@ illuminr रेज़लूसी को संपीड़न अनुपात का त्याग किए बिना प्रदान नहीं किया जा सकता है। यह एक ऑर्थोगोनल समस्या है, और कर्नेल टीसीपी की एरर हैंडलिंग को वितरित करने के लिए पर्चिव जैसे उपकरण मौजूद होते हैं।
तोबू

2
@ illumin mean दोष सहिष्णुता (मान लें कि आप par2 के समान कुछ है) आमतौर पर इंटरनेट पर अभिलेखागार वितरित करने के साथ एक चिंता का विषय नहीं है। डाउनलोड को पर्याप्त विश्वसनीय माना जाता है (और यदि आप इसे दूषित किया गया था तो आप इसे फिर से डाउनलोड कर सकते हैं)। क्रिप्टोग्राफिक हैश और हस्ताक्षर अक्सर उपयोग किए जाते हैं, और वे भ्रष्टाचार का पता लगाने के साथ-साथ छेड़छाड़ भी करते हैं। कंप्रेशर्स हैं जो अधिक से अधिक दोष सहिष्णुता देते हैं, हालांकि संपीड़न अनुपात की कीमत पर। HTTP या FTP डाउनलोड के लिए किसी को इसके लायक ट्रेडऑफ़ नहीं मिल रहा है।
व्युत्पन्न

xz डिकम्प्रेस करने के लिए LESS मेमोरी का उपयोग करता है।
मिशाल

@ यह तब से बदल गया है जब से मैंने यह लिखा है? विशेष रूप से, फुटनोट स्मृति उपयोग की व्याख्या करता है।
व्युत्पन्न

45

सबसे पहले, यह सवाल सीधे संबंधित नहीं है tar। टार बस एक असम्पीडित संग्रह बनाता है, संपीड़न तो बाद में लागू किया जाता है।

LZMA2 और bzip2 की तुलना में Gzip अपेक्षाकृत तेज़ होने के लिए जाना जाता है। यदि गति मायने रखती है, gzip(विशेषकर बहुपरत कार्यान्वयन pigz) अक्सर संपीड़न गति और संपीड़न अनुपात के बीच एक अच्छा समझौता है। हालांकि गति एक मुद्दा है (उदाहरण LZ4) अगर विकल्प हैं।

हालांकि, अगर एक उच्च संपीड़न अनुपात वांछित है LZMA2 bzip2लगभग हर पहलू में धड़कता है। कम्प्रेशन गति अक्सर धीमी होती है, लेकिन यह बहुत तेज़ी से कम हो जाती है और उच्च मेमोरी उपयोग की लागत पर बेहतर संपीड़न अनुपात प्रदान करती है।

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

बहुस्तरीय bzip2कार्यान्वयन (जैसे pbzip) हैं, लेकिन वे अक्सर डिफ़ॉल्ट रूप से स्थापित नहीं होते हैं। यह भी ध्यान दें कि मल्टीथ्रेडेड bzip2वास्तव में केवल संपीड़ित करते समय भुगतान करते हैं जबकि bzip2डिकम्प्रेसन एकल थ्रेड का उपयोग करता है यदि फ़ाइल LZMA2 के विपरीत एकल थ्रेडेड का उपयोग करके संपीड़ित होती थी। समानांतर bzip2वेरिएंट केवल मल्टीकोर सीपीयू का लाभ उठा सकते हैं यदि फ़ाइल को एक समानांतर bzip2संस्करण का उपयोग करके संकुचित किया गया था , जो अक्सर ऐसा नहीं होता है।


4
अच्छी तरह से कुछ tars एक zविकल्प के रूप में।
1

"गति" एक गंदे उत्तर के लिए बनाता है, आपको संपीड़न गति या विघटन की गति का उल्लेख करना चाहिए। न तो Pixz, pbzip2 या pigz डिफ़ॉल्ट रूप से स्थापित होते हैं (या -I ध्वज के बिना टार द्वारा उपयोग किया जाता है), लेकिन pixz और pbzip2 संपीड़न और अपघटन को गति देते हैं और pigz सिर्फ संपीड़न के लिए होता है।
तोबू

@ टोबू xzको डिफ़ॉल्ट रूप से मल्टीथ्रेड किया जाएगा ताकि pixzभविष्य में कोई इंस्टॉलेशन की आवश्यकता न हो। कुछ प्लेटफार्मों पर xzथ्रेडिंग पहले से ही समर्थित है। जबकि bzip2प्रारूप में मन में मल्टीथ्रेडिंग के साथ डिज़ाइन नहीं किए जाने के बाद से इसे कभी बहुस्तरीय होने की संभावना नहीं होगी। इसके अलावा, pbzip2केवल अपघटन में तेजी आती है यदि फ़ाइल का उपयोग करके संपीड़ित किया गया है pbzip2जो अक्सर ऐसा नहीं होता है।
मार्को

1
@ मर्को का मानना ​​है कि lbzip2 फाइलों के समानांतर विघटन की अनुमति देता है, भले ही वे एक गैर-समानांतर कार्यान्वयन (जैसे स्टॉक bzip2) के साथ संकुचित हो। इसलिए मैं pbzip2 पर lbzip2 का उपयोग करता हूं। (यह संभव है कि यह आपकी टिप्पणी के बाद से विकसित हुआ है।)
रवेइटेडपोल

19

संक्षिप्त उत्तर : संपीड़न अनुपात के संदर्भ में xz अधिक कुशल है। तो यह डिस्क स्थान बचाता है और नेटवर्क के माध्यम से हस्तांतरण का अनुकूलन करता है।
आप इस त्वरित बेंचमार्क को देख सकते हैं ताकि व्यावहारिक परीक्षणों द्वारा अंतर की खोज की जा सके।


लिंक टूट गया है।
flarn2006

18

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


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