Làm thế nào để bạn thiết lập kích thước khối bzip2 khi sử dụng tar?


9

Tôi đang sử dụng tarđể sao lưu một máy chủ linux vào băng. Tôi đang sử dụng -jtùy chọn để nén tệp bzip2, tuy nhiên tôi không thể thấy cách điều chỉnh các tùy chọn kích thước khối cho bzip2 từ tar. Kích thước khối mặc định là 900.000 byte cho phép nén tốt nhất nhưng chậm nhất. Tôi không bận tâm về tỷ lệ nén, vì vậy tôi đang tìm cách làm cho bzip2 chạy nhanh hơn với kích thước khối nhỏ hơn.


1
Sidenote: Gần đây tôi đã từ bỏ bzip2. Tôi sử dụng lzma (từ gói lzma, lzma-utils hoặc lzma-sdk, tên phụ thuộc vào phân phối của bạn.) Nó thường nén giống hoặc tốt hơn bzip2 trong cùng thời gian CPU - và khi giải nén nó chỉ đơn giản là giải nén bzip2 xa.
Mihai Limbăşan

Câu trả lời:


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

Hoặc ống đầu ra của tarđể bzip2.

Mặc dù bạn cần lưu ý từ trang man bzip2:

    -1 (hoặc - nhanh) đến -9 (hoặc --best)
              Đặt kích thước khối thành 100 k, 200 k .. 900 k khi nén.
              Không có tác dụng khi giải nén. Xem QUẢN LÝ BỘ NHỚ bên dưới.
              Các bí danh --fast và --best chủ yếu dành cho compat GNU gzip-
              tính linh hoạt. Cụ thể, --fast không làm cho mọi thứ trở nên đáng kể
              nhanh hơn Và --best chỉ chọn hành vi mặc định.

cách thay thế bạn có thể sử dụng xuất BZIP = -9
Pol Hallen

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

Trên hệ thống của tôi (OSX El Capitan bsdtar 2.8.3), điều này bị thiếu trong trang man (mặc dù gzip: mức nén và xz: mức nén được liệt kê), nhưng thử nghiệm tùy chọn này không hoạt động.
steveayre

tar: unrecognized option '--options'
ZN13

2

bzip2 kích thước khối

bzip2có một số tùy chọn kích thước khối. Từ trang hướng dẫn 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.

Khi bạn muốn nén nhanh hơn mà ít liên quan đến tỷ lệ nén, sử dụng bzip2, bạn dường như muốn tùy chọn -1(hoặc --fast).

Đặt bzip2kích thước khối khi sử dụngtar

Bạn có thể đặt bzip2kích thước khối khi sử dụng tartheo một số cách.

Cách UNlX

Cách yêu thích của tôi, cách UNlX, là cách bạn sử dụng mọi công cụ một cách độc lập và kết hợp chúng thông qua các đường ống.

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

Bạn có thể đọc là "tạo .tar với tar-> bzip nó bằng bzip2-> ghi nó vào [ARCHIVE].tar.bz2".

Biến môi trường

Cũng có thể thiết lập bzip2các tùy chọn thông qua biến môi trường BZIP2. Từ trang hướng dẫn 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.

Vì vậy, để sử dụng với tar, bạn có thể làm:

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

Các lựa chọn thay thế nhanh hơn

bzip2sử dụng thuật toán nén chậm. Nếu bạn lo ngại về tốc độ, bạn có thể điều tra các thuật toán thay thế, chẳng hạn như các thuật toán được sử dụng bởi gziphoặc lzop. Dưới đây là một bài viết hay so sánh các công cụ nén: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-dat Đoạns /


Có vẻ như bạn có thể có kiến ​​thức để cung cấp Câu trả lời tốt ở đây, nhưng vui lòng xem xét cách đọc Làm thế nào để tôi viết Câu trả lời tốt? trong trung tâm trợ giúp của chúng tôi và sau đó sửa lại Câu trả lời. Lệnh / Mã / Cài đặt của bạn về mặt kỹ thuật có thể là giải pháp nhưng một số giải thích được hoan nghênh. Cảm ơn trước.
HBruijn

1

Gửi tarđầu ra đến stdoutvà sau đó dẫn nó qua bzip2riêng:

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

0

Nó thậm chí còn dễ dàng hơn:

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

3
Sử dụng một tệp tạm thời có nghĩa là bạn cần đủ dung lượng đĩa cứng, cộng với băng thông cho tar để ghi và bzip2 để đọc nó. Điều này có vẻ tầm thường đối với một lượng nhỏ dữ liệu, nhưng khi thư mục được đề cập có vài trăm gigabyte, nó có thể trở thành một vấn đề thực sự.
Ansgar Esztermann

Vâng cảm ơn. Tôi biết đã học lý do sâu hơn tại sao tar-z-j. Những lựa chọn này có vẻ khá thuận tiện với tôi. Nhưng họ có thể tiết kiệm trong ngày.
Andreas Spindler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.