เหตุใดรูปแบบไฟล์เก็บถาวร tar จึงเปลี่ยนเป็นการบีบอัด xz เพื่อแทนที่ bzip2 และ gzip ล่ะ


202

tarคลังเก็บมากขึ้นใช้xzรูปแบบตาม LZMA2 สำหรับการบีบอัดแทนการbzip2(bz2)บีบอัดแบบดั้งเดิม ในความเป็นจริงkernel.orgทำให้การประกาศ " Good-bye bzip2 " ล่าช้าเมื่อวันที่ 27 ธันวาคม 2013แสดงว่าแหล่งที่มาของเคอร์เนลจากจุดนี้จะได้รับการปล่อยตัวทั้งในรูปแบบ tar.gz และ tar.xz - และในหน้าหลักของเว็บไซต์tar.xzสิ่งที่นำเสนอโดยตรงอยู่ใน

มีเหตุผลเฉพาะที่อธิบายว่าทำไมสิ่งนี้จึงเกิดขึ้นและสิ่งที่เกี่ยวข้องgzipในบริบทนี้คืออะไร?

history  gzip  bzip2  xz 

คำตอบ:


198

สำหรับการกระจายข้อมูลที่เก็บถาวรผ่านทางอินเทอร์เน็ตสิ่งต่อไปนี้มักเป็นเรื่องสำคัญ:

  1. อัตราส่วนการบีบอัด (เช่นขนาดของคอมเพรสเซอร์ที่ทำให้ข้อมูล)
  2. เวลาในการบีบอัด (ข้อกำหนดของ CPU);
  3. ข้อกำหนดหน่วยความจำการบีบอัด และ
  4. ความเข้ากันได้ (ความกว้างของโปรแกรมการแตกไฟล์)

ความต้องการหน่วยความจำและการบีบอัดของ CPU ไม่สำคัญมากนักเพราะคุณสามารถใช้เครื่องจักรขนาดใหญ่ได้อย่างรวดเร็วและคุณต้องทำเพียงครั้งเดียวเท่านั้น

เมื่อเทียบกับ bzip2 แล้ว xz มีอัตราส่วนการบีบอัดที่ดีขึ้นและเวลาในการบีบอัดที่ลดลง (ดีกว่า) อย่างไรก็ตามโดยทั่วไปแล้วที่การตั้งค่าการบีบอัดใช้ต้องการหน่วยความจำเพิ่มเติมในการขยายขนาด[1]และค่อนข้างแพร่หลายน้อยกว่า Gzip ใช้หน่วยความจำน้อยกว่า

ดังนั้นจะมีการโพสต์ไฟล์เก็บถาวรทั้งรูปแบบ gzip และ xz ซึ่งช่วยให้คุณสามารถเลือก:

  • จำเป็นต้องคลายการบีบอัดในเครื่องที่มีหน่วยความจำ จำกัดมาก (<32 MB): gzip ได้รับไม่มากเมื่อพูดถึงแหล่งเคอร์เนล
  • ต้องการคลายเครื่องมือขั้นต่ำที่มี: gzip
  • ต้องการประหยัดเวลาในการดาวน์โหลดและ / หรือแบนด์วิดธ์: xz

ไม่มีการรวมกันอย่างเป็นจริงของปัจจัยที่ทำให้คุณเลือก bzip2 ดังนั้นมันจะค่อย ๆ ออกมา

ผมมองไปที่การเปรียบเทียบการบีบอัดในบล็อกโพสต์ ฉันไม่ได้พยายามทำซ้ำผลลัพธ์และฉันสงสัยว่าบางอย่างเปลี่ยนไป (ส่วนใหญ่ฉันคาดว่าจะxzได้รับการปรับปรุงให้ดีขึ้นเนื่องจากเป็นรุ่นล่าสุด)

(มีบางสถานการณ์ที่การใช้งาน bzip2 ที่ดีอาจดีกว่า xz: bzip2 สามารถบีบอัดไฟล์ที่มีเลขศูนย์และลำดับจีโนม DNA ได้ดีกว่า xz ตอนนี้ xz รุ่นใหม่มีโหมดบล็อก (ไม่จำเป็น) ซึ่งช่วยให้สามารถกู้คืนข้อมูลได้ หลังจากจุดของความเสียหายและการบีบอัดแบบขนานและ [ในทางทฤษฎี] การบีบอัดก่อนหน้านี้เพียง bzip2 เสนอสิ่งเหล่านี้[2]อย่างไรก็ตามสิ่งเหล่านี้ไม่เกี่ยวข้องกับการกระจายเคอร์เนล)


1: ในขนาดเก็บเป็นรอบxz -3 bzip -9จากนั้น xz ใช้หน่วยความจำน้อยกว่าในการขยายขนาด แต่xz -9(เป็นเช่นใช้สำหรับลินุกซ์เคอร์เนล tarballs) bzip -9ใช้มากขึ้นกว่า (และยังxz -0ต้องการมากกว่าgzip -9)

2: F21 System Wide Change: lbzip2 เป็นการใช้งาน bzip2 ที่เป็นค่าเริ่มต้น


ความคิดเห็นเกี่ยวกับหัวข้อการยอมรับข้อบกพร่องหรือเป็นสิ่งที่นำมาใช้อย่างสมบูรณ์นอกเหนือจากอัลกอริทึมการบีบอัดหรือไม่

1
@ ไม่สามารถให้ความยืดหยุ่นของไฟส่องสว่างได้หากไม่ลดอัตราการบีบอัด มันเป็นปัญหามุมฉากและในขณะที่เครื่องมืออย่าง Parchive มีอยู่สำหรับการกระจายข้อผิดพลาดของเคอร์เนล TCP ก็ทำงานได้ดีเช่นกัน
Tobu

2
@ illuminÉความทนทานต่อความผิดพลาด (สมมติว่าคุณหมายถึงบางสิ่งที่คล้ายคลึงกับ par2) ไม่ใช่เรื่องที่เกี่ยวข้องกับการเผยแพร่จดหมายเหตุทางอินเทอร์เน็ต การดาวน์โหลดถือว่าน่าเชื่อถือเพียงพอ (และคุณสามารถดาวน์โหลดใหม่ได้หากเกิดความเสียหาย) มักใช้แฮชและลายเซ็นเข้ารหัสและตรวจพบความเสียหายรวมถึงการแก้ไขดัดแปลง มีคอมเพรสเซอร์ที่ให้ความทนทานต่อความผิดปกติมากขึ้นแม้ว่าจะมีค่าใช้จ่ายในอัตราส่วนการบีบอัด ดูเหมือนจะไม่มีใครพบว่าสิ่งที่คุ้มค่าสำหรับการดาวน์โหลด HTTP หรือ FTP
derobert

xz ใช้หน่วยความจำ LESS เพื่อคลายการบีบอัด
MichalH

@ ไมค์มันเปลี่ยนไปไหมตั้งแต่ฉันเขียนสิ่งนี้? โดยเฉพาะอย่างยิ่งเชิงอรรถหนึ่งอธิบายการใช้งานหน่วยความจำ
Derobert

45

tarแรกของทุกคำถามนี้จะไม่เกี่ยวข้องโดยตรงกับ Tar เพียงแค่สร้างไฟล์บีบอัดที่ไม่มีการบีบอัดจากนั้นจะใช้การบีบอัดในภายหลัง

Gzip นั้นค่อนข้างเร็วเมื่อเทียบกับ LZMA2 และ bzip2 หากความเร็วมีความสำคัญgzip(โดยเฉพาะอย่างยิ่งการใช้งานแบบมัลติเธรดpigz) มักเป็นการประนีประนอมระหว่างความเร็วในการบีบอัดและอัตราส่วนการอัด แม้ว่าจะมีทางเลือกถ้าความเร็วเป็นปัญหา (เช่น LZ4)

อย่างไรก็ตามหากต้องการอัตราการบีบอัดสูง LZMA2 ต้องการbzip2ในเกือบทุกด้าน ความเร็วในการบีบอัดมักจะช้ากว่า แต่มันจะแตกเร็วกว่าและให้อัตราการบีบอัดที่ดีกว่ามากในราคาที่ใช้หน่วยความจำมากขึ้น

ไม่มีเหตุผลอะไรที่จะต้องใช้bzip2อีกต่อไปยกเว้นความเข้ากันได้ย้อนหลัง นอกจากนี้ LZMA2 ยังได้รับการออกแบบด้วยการทำงานแบบมัลติเธรดในใจและการใช้งานจำนวนมากโดยค่าเริ่มต้นใช้ประโยชน์จาก CPU แบบมัลติคอร์ (น่าเสียดายที่xzบน Linux ยังไม่ได้ทำสิ่งนี้) เรื่องนี้สมเหตุสมผลเนื่องจากความเร็วสัญญาณนาฬิกาจะไม่เพิ่มขึ้นอีก แต่จำนวนแกนจะเพิ่มขึ้น

มีbzip2การใช้งานแบบมัลติเธรด(เช่นpbzip) แต่มักจะไม่ติดตั้งตามค่าเริ่มต้น นอกจากนี้โปรดทราบว่ามัลติเธรดbzip2จ่ายจริงๆเท่านั้นในขณะที่การบีบอัดในขณะที่การบีบอัดใช้เธรดเดียวถ้าไฟล์ถูกบีบอัดโดยใช้เธรดเดียวbzip2ตรงกันข้ามกับ LZMA2 bzip2ตัวแปรแบบขนานสามารถใช้ประโยชน์จาก CPU แบบมัลติคอร์หากไฟล์ถูกบีบอัดโดยใช้bzip2รุ่นแบบขนานซึ่งมักจะไม่ใช่กรณี


4
มีบางzตัวเลือกที่จะทำงาน
tchrist

"ความเร็ว" สำหรับคำตอบที่ยุ่งเหยิงคุณควรอ้างถึงความเร็วในการบีบอัดหรือความเร็วในการบีบอัด ไม่มีการติดตั้ง pixz, pbzip2 หรือ pigz ตามค่าเริ่มต้น (หรือใช้โดย tar โดยไม่มีแฟล็ก -I) แต่ pixz และ pbzip2 เพิ่มความเร็วในการบีบอัดและคลายการบีบอัดและ pigz เป็นเพียงการบีบอัด
Tobu

@Tobu xzจะเป็นแบบมัลติเธรดโดยค่าเริ่มต้นดังนั้นจึงไม่pixzจำเป็นต้องทำการติดตั้งในอนาคต ในบางแพลตฟอร์มxzเธรดได้รับการสนับสนุนแล้ว โดยที่bzip2ไม่น่าจะถูกใช้งานแบบมัลติเธรดเนื่องจากรูปแบบไม่ได้ออกแบบมาโดยคำนึงถึงหลายเธรด นอกจากนี้pbzip2จะเพิ่มความเร็วในการแตกไฟล์หากไฟล์นั้นถูกบีบอัดโดยใช้pbzip2ซึ่งมักจะไม่เป็นเช่นนั้น
Marco

1
@Marco ฉันเชื่อว่า lbzip2 อนุญาตให้มีการคลายไฟล์แบบขนานแม้ว่าไฟล์เหล่านั้นจะถูกบีบอัดด้วยการใช้งานที่ไม่ขนานกัน (เช่น stock bzip2) นั่นเป็นเหตุผลที่ฉันใช้ lbzip2 ผ่าน pbzip2 (เป็นไปได้ว่าสิ่งนี้มีวิวัฒนาการมาตั้งแต่ความคิดเห็นของคุณ)
RaveTheTadpole

19

คำตอบสั้น ๆ : xz มีประสิทธิภาพมากกว่าในด้านอัตราส่วนการบีบอัด ดังนั้นจึงช่วยประหยัดพื้นที่ดิสก์และเพิ่มประสิทธิภาพการถ่ายโอนผ่านเครือข่าย
คุณสามารถดูเกณฑ์มาตรฐานด่วนนี้เพื่อค้นหาความแตกต่างโดยการทดสอบภาคปฏิบัติ


ลิงก์เสีย
flarn2006

18

LZMA2 เป็นระบบบีบอัดบล็อกในขณะที่ gzip ไม่ใช่ ซึ่งหมายความว่า LZMA2 ให้ยืมตัวเองไปหลายเธรด นอกจากนี้หากความเสียหายเกิดขึ้นในไฟล์เก็บถาวรโดยทั่วไปคุณสามารถกู้คืนข้อมูลจากบล็อกที่ตามมาด้วย LZMA2 แต่คุณไม่สามารถทำได้ด้วย gzip ในทางปฏิบัติคุณจะสูญเสียไฟล์เก็บถาวรทั้งหมดด้วย gzip หลังจากบล็อกที่เสียหาย ด้วยไฟล์เก็บถาวร LZMA2 คุณจะสูญเสียไฟล์ที่ได้รับผลกระทบจากบล็อกที่เสียหายเท่านั้น สิ่งนี้มีความสำคัญในคลังเก็บขนาดใหญ่ที่มีหลายไฟล์


2
นี่คือความแตกต่างที่มีประโยชน์และสำคัญมากแน่นอน!
leden
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.