คุณตั้งค่าขนาดบล็อก bzip2 อย่างไรเมื่อใช้ tar


9

ฉันใช้tarเพื่อสำรองข้อมูลเซิร์ฟเวอร์ linux ไปยังเทป ฉันใช้-jตัวเลือกในการบีบอัดไฟล์ด้วยbzip2แต่ฉันไม่เห็นวิธีการปรับตัวเลือกขนาดบล็อกสำหรับ bzip2 จาก tar ขนาดบล็อกเริ่มต้นคือ 900,000 ไบต์ซึ่งให้การบีบอัดที่ดีที่สุด แต่ช้าที่สุด ฉันไม่ได้ใส่ใจเรื่องอัตราส่วนการบีบอัดดังนั้นฉันจึงต้องการให้ bzip2 ทำงานได้เร็วขึ้นด้วยขนาดบล็อกที่เล็กลง


1
Sidenote: เมื่อเร็ว ๆ นี้ฉันมีทุกอย่างยกเว้น bzip2 ฉันใช้ lzma (จากแพคเกจ lzma, lzma-utils หรือ lzma-sdk ชื่อขึ้นอยู่กับการกระจายของคุณ) มันมักจะบีบอัดที่เหมือนกันหรือดีกว่า bzip2 ตามเวลา CPU เดียวกัน - และเมื่อมันมาถึงการบีบอัดมันเพียงแค่เป่า bzip2 ไป
Mihai Limbăşan

คำตอบ:


9
export BZIP=--fast
tar cjf foo.tar.bz2 foo

หรือท่อส่งออกของไปtarbzip2

แม้ว่าคุณควรทราบจากหน้าคน bzip2:

    -1 (หรือ - เร็ว) ถึง -9 (หรือ - ดีที่สุด)
              ตั้งขนาดบล็อกเป็น 100 k, 200 k .. 900 k เมื่อทำการบีบอัด
              ไม่มีผลเมื่อทำการคลายการบีบอัด ดูการจัดการหน่วยความจำด้านล่าง
              นามแฝง - ที่รวดเร็วและ - ที่ดีที่สุดนั้นมีไว้สำหรับ GNU gzip compat- เป็นหลัก
              ibility โดยเฉพาะอย่างยิ่ง - รวดเร็วไม่ได้ทำสิ่งที่มีความหมาย -
              เร็วกว่า และ - ที่ดีที่สุดเพียงเลือกพฤติกรรมเริ่มต้น

วิธีอื่นที่คุณสามารถใช้ส่งออก BZIP = -9
Pol Hallen

4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/

ในระบบของฉัน (OSX El Capitan bsdtar 2.8.3) สิ่งนี้หายไปจาก man page (แม้ว่า gzip: ระดับการบีบอัดและ xz: ระดับการบีบอัดจะแสดงรายการ) แต่การทดสอบตัวเลือกจะใช้งานได้
steveayre

tar: unrecognized option '--options'
ZN13

2

bzip2 ขนาดบล็อก

bzip2มีตัวเลือกขนาดบล็อก จากหน้าคู่มือbzip2(1):

-1 (or --fast) to -9 (or --best)
       Set the block size to 100 k, 200 k ..  900 k when compressing.
       Has no effect when decompressing. See MEMORY MANAGEMENT below.
       The --fast and --best aliases are primarily for GNU gzip
       compatibility. In particular, --fast doesn't make things
       significantly faster. And --best merely selects the default
       behaviour.

ตามที่คุณต้องการการบีบอัดที่เร็วขึ้นโดยคำนึงถึงอัตราส่วนการบีบอัดที่น้อยลงbzip2คุณจึงต้องการตัวเลือก-1(หรือ--fast)

การตั้งค่าbzip2ขนาดบล็อกเมื่อใช้งานtar

คุณสามารถกำหนดbzip2ขนาดบล็อกเมื่อใช้tarงานได้สองวิธี

วิธี UNlX

วิธีที่ฉันชอบคือวิธี UNlX เป็นวิธีที่คุณใช้ทุกเครื่องมืออย่างอิสระและรวมเข้ากับท่อ

$ tar --create [FILE...] | bzip2 -1 > [ARCHIVE].tar.bz2

คุณสามารถอ่านได้ว่า "สร้าง. tar ด้วยtar-> bzip ด้วยbzip2-> เขียนถึง[ARCHIVE].tar.bz2"

ตัวแปรสภาพแวดล้อม

นอกจากนี้ยังเป็นไปได้ที่จะตั้งค่าตัวเลือกผ่านตัวแปรสภาพแวดล้อมbzip2 BZIP2จากหน้าคู่มือbzip2(1):

bzip2 will read arguments from the environment variables BZIP2 and BZIP,
in that order, and will process them before any arguments read from the
command line. This gives a convenient way to supply default arguments.

ดังนั้นในการใช้งานด้วยtarคุณสามารถทำได้เช่น:

$ BZIP2=-1 tar --create --bzip2 --file [ARCHIVE].tar.bz2 [FILE...]

ทางเลือกที่เร็วกว่า

bzip2ใช้อัลกอริทึมการบีบอัดช้า หากคุณมีความกังวลเกี่ยวกับความเร็วคุณสามารถตรวจสอบขั้นตอนวิธีทางเลือกเช่นผู้ใช้โดยหรือgzip lzopนี่เป็นบทความที่ดีในการเปรียบเทียบเครื่องมือบีบอัด: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


ดูเหมือนว่าคุณอาจมีความรู้ในการให้คำตอบที่ดีที่นี่ แต่โปรดลองอ่านฉันจะเขียนคำตอบที่ดีได้อย่างไร? ในศูนย์ช่วยเหลือของเราแล้วแก้ไขคำตอบ คำสั่ง / รหัส / การตั้งค่าของคุณอาจเป็นวิธีการแก้ปัญหา แต่คำอธิบายบางอย่างก็ยินดีต้อนรับ ขอบคุณล่วงหน้า.
HBruijn

1

ส่งtarออกไปยังstdoutแล้วไปป์มันผ่านbzip2แยก:

% tar cvf - _file_ | bzip2 _opts_ > output.tar.bz2

0

ง่ายยิ่งขึ้น:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar

3
การใช้ไฟล์ชั่วคราวหมายความว่าคุณต้องการพื้นที่ว่างในฮาร์ดดิสก์เพียงพอรวมถึงแบนด์วิดท์สำหรับ tar เพื่อเขียนและ bzip2 เพื่ออ่าน สิ่งนี้อาจดูเล็กน้อยสำหรับข้อมูลจำนวนเล็กน้อย แต่เมื่อไดเรกทอรีที่สงสัยมีหลายร้อยกิกะไบต์มันอาจกลายเป็นปัญหาที่แท้จริง
Ansgar Esztermann

ใช่ขอบคุณ. ฉันรู้ว่าได้เรียนรู้เหตุผลว่าทำไมลึกtarมีและ-z -jตัวเลือกเหล่านี้ดูเหมือนจะสะดวกสำหรับฉัน แต่พวกเขาสามารถบันทึกวัน
Andreas Spindler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.