Làm cách nào để đánh giá sự lựa chọn tốt nhất về định dạng lưu trữ để nén tệp?


24

Nói chung, tôi đã quan sát những điều sau đây:

  • Các tệp hoặc công cụ Linux-y sử dụng bzip2 hoặc gzip để phân phối tài liệu lưu trữ
  • Các tệp hoặc công cụ Windows-y sử dụng ZIP để phân phối tài liệu lưu trữ
  • Nhiều người sử dụng 7-Zip để tạo và phân phối tài liệu lưu trữ của riêng họ

Câu hỏi:

  • Những lợi thế và bất lợi của các định dạng này, tất cả đều có vẻ là các định dạng mở? Khi nào / tại sao tôi nên chọn một (giả sử, 7-Zip) so với cái khác (giả sử, ZIP)?
  • Tại sao xu hướng trên dường như giữ vững, mặc dù tất cả những thứ này là định dạng di động? Có bất kỳ lợi thế cụ thể nào để sử dụng một định dạng lưu trữ cụ thể trên một nền tảng cụ thể không?



@Sathya, @Andreas: Cảm ơn các liên kết, những điều này hữu ích và trả lời các phần của câu hỏi của tôi. :)
Mehrdad

1
Nén là một lĩnh vực khá phức tạp và không một thuật toán nào có thể tạo ra kết quả tối ưu cho mọi thứ - hơn nữa, đó là vấn đề bạn có thể ném tài nguyên vào và có kết quả tốt hơn, nhưng cũng là một thuật toán có thể được thực hiện gần như trong thời gian ngắn hơn. Một số thuật toán tập trung vào việc nhanh và ánh sáng bộ nhớ, một số thuật toán tập trung vào việc tạo ra tệp nhỏ nhất có thể bất kể mất bao lâu hoặc bạn có cần 12GB RAM (không phóng đại) để thực hiện hay không, v.v.
Phoshi

1
@Phoshi, đây nên là một câu trả lời.
Yitzchak

Câu trả lời:


16

Có rất nhiều định dạng và phương thức nén có sẵn, một số không nén được và được thiết kế để lưu trữ một số tệp trong một kho lưu trữ và các máy nén thử nghiệm mới hơn ( dựa trên PAQ ) được thiết kế để nén mạnh nhất có thể, bất kể thời gian cần thiết để thực hiện hoạt động nói.

Bạn cần đánh giá các tính năng bạn yêu cầu từ lựa chọn phương pháp nén của mình và cũng xem xét bối cảnh sử dụng nó.

Các tính năng và cân nhắc khác nhau bao gồm:

  • Khả năng nén - Nó có thu nhỏ tệp đủ đáng kể không?
  • Dễ sử dụng - Nếu tệp sẽ được chuyển đến một người dùng khác, việc lưu trữ sẽ dễ dàng giải nén hay nó sẽ yêu cầu nhiều phần mềm hơn để cài đặt?
  • Bảo vệ mật khẩu và / hoặc mã hóa - Những biện pháp bảo mật này có bắt buộc không?
  • Hỗ trợ nhiều khối lượng - Nếu phương tiện đích yêu cầu chia tệp thành các phần thích hợp, định dạng có hỗ trợ thanh lịch này không. Ví dụ: 650 MB cho một đĩa CD.
  • Sửa chữa và phục hồi - Nếu tệp bị hỏng một phần, nó có cung cấp bản ghi khôi phục để hỗ trợ khôi phục dữ liệu không?
  • Hỗ trợ Unicode - Bộ lưu trữ có hỗ trợ tên tệp quốc tế hay chỉ là ASCII tiêu chuẩn?
  • Yêu cầu hệ thống - Các máy nén hiện đại như 7-Zip cung cấp khả năng tăng hiệu quả nén bằng cách sử dụng từ điển lớn hơn (từ điển là tham chiếu dữ liệu thường được lặp lại trong tệp nén), nhưng điều này lại làm tăng mức tiêu thụ bộ nhớ ở cả nén và thời gian giải nén.
  • Hỗ trợ tự giải nén - Lưu trữ có thể được cuộn thành một tệp thực thi cung cấp dễ sử dụng cho bất kỳ ai cần sử dụng không? (Cũng lưu ý rằng bạn chỉ có thể tạo trình tự giải nén cho một nền tảng duy nhất. Nói chung, trình tự giải nén Windows sẽ không hoạt động trên Linux theo mặc định, trừ khi chạy qua lớp tương thích như Wine).
  • Thuộc tính hệ thống tệp - Máy nén có lưu trữ siêu dữ liệu và quyền của hệ thống tệp có liên quan có thể có giá trị bảo tồn tại điểm trích xuất không?

Nói chung, ZIP là định dạng phổ biến nhất, nhưng kích thước trên 4 GB thường không được hỗ trợ (nếu có), hỗ trợ bảo mật thường được coi là kém (mật khẩu tiêu chuẩn có thể bị xâm phạm bằng một cuộc tấn công bằng văn bản đơn giản và mã hóa thêm thường được triển khai như một dẫn xuất không chính thức của định dạng bởi các nhà cung cấp phần mềm ZIP thương mại).

Ngoài ra, hầu hết các định dạng phổ biến khác sẽ có một số hình thức hỗ trợ trên tất cả các hệ điều hành bằng cách cài đặt thêm phần mềm.

Lựa chọn cá nhân của tôi là 7-Zip , vì nó có khả năng nén tuyệt vời và linh hoạt; mặc dù nó có giao diện người dùng đặc biệt trên Windows. Có các trình giải nén cho Linux và Mac OS X (mặc dù không phải GUI dựa trên tiêu chuẩn).


3
Nếu kho lưu trữ là để phân phối, điều quan trọng là phải xem xét đối tượng mục tiêu của bạn và sử dụng định dạng được hỗ trợ theo mặc định trên nền tảng của họ. Khả năng tiếp cận có thể quan trọng hơn các cân nhắc khác trong trường hợp này.
hammar

1 cảm ơn cho thông tin, mặc dù nó sẽ đã thậm chí tốt hơn để đề cập đến các định dạng hỗ trợ những điểm viên đạn. :)
Mehrdad

Tôi đã bị cám dỗ nhưng có vô số định dạng có sẵn, sẽ mất nhiều thời gian để liệt kê. Wikipedia có một ma trận tính năng tốt của các định dạng nén có thể giúp: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam

1
Lịch sử dạy một bài học quan trọng khi nói đến việc tự giải nén các tệp lưu trữ. Có những tài liệu lưu trữ tự giải nén từ hai thập kỷ trước rằng mọi người không còn có thể tự giải nén vì máy của họ không thể chạy các chương trình MS / PC-DOS hoặc do các chương trình tự giải nén bị hỏng do thay đổi bộ xử lý hoặc do tự xử lý các nhà khai thác phàn nàn rằng các đĩa đầy khi họ không mong đợi các đĩa quá lớn hoặc hoặc
JdeBP

Điểm đó chắc chắn là gây tranh cãi, tôi đã không gặp phải vấn đề cụ thể đó nhưng tôi có thể thấy nó xảy ra; Tôi cho rằng tất cả chỉ là câu hỏi về mục tiêu cuối cùng là tạo kho lưu trữ và tuổi thọ dự kiến ​​của các tệp sử dụng. Chắc chắn nếu bạn có một kho lưu trữ cũ khó trích xuất từ ​​thời DOS, bạn có thể sử dụng DOSBox hoặc thậm chí tạo VM nếu cần.
Ruairi Fullam

8

Một điều khiến tôi suy nghĩ là một bài đăng trên blog (hai năm tuổi) của Jeff Atwood: Nén tệp trong kỷ nguyên đa lõi . Trong bài viết đó, ông thấy rằng bzip2 vượt trội hơn 7-zip khi chạy nhiều hơn hai lõi.


1 omg! Tôi không biết điều đó. Tỷ lệ nén dường như không đáng giá, mặc dù. :)
Mehrdad

2
Bài đó hơn 2 tuổi. Hiện tại 7-zip có hoạt động tốt hơn với hơn hai lõi không?
cregox

BZIP2 nén hiệu quả hơn trên nhiều lõi vì nó nén thành các khối 100-900KB, do đó có thể trải các khối trên các lõi riêng biệt, nhưng hiệu quả nén bị mất vì các khối này được coi là khác biệt với nhau.
Ruairi Fullam

4

Đối với bạn câu hỏi đầu tiên, 7-Zip là một trình lưu trữ hơn có thể sử dụng nhiều thuật toán để nén và giải nén dữ liệu.

Đối với câu hỏi thứ hai của bạn, chỉ cần đảm bảo rằng nền tảng hỗ trợ các công cụ hỗ trợ định dạng đã cho. Ví dụ, tôi sẽ tránh sử dụng RAR trên máy Mac. Mặc dù có thể sử dụng và có các tiện ích miễn phí hỗ trợ, nhưng chúng thiếu giao diện phong phú hơn nhiều mà các tiện ích Windows hỗ trợ RAR có (theo kinh nghiệm của tôi).


Trong khi cá nhân tôi ghét các chương trình đồ họa rar và luôn sử dụng dòng lệnh, ngay cả trên Windows.
CarlF

4

Như những người khác đã đề cập, việc lựa chọn một định dạng nén cụ thể phụ thuộc rất nhiều vào việc sử dụng và đối tượng dự định.

  • Lưu trữ .tar.gz và tar.bz2 lý tưởng để sử dụng trên các hệ thống Linux (và bởi phần mở rộng để chia sẻ tệp với người dùng Linux) vì các công cụ tar, gzip và bzip2 có mặt khắp nơi trên nền tảng và vì định dạng .tar có đầy đủ hỗ trợ cho các quyền Unix và các thuộc tính dành riêng cho nền tảng khác. Sự lựa chọn giữa gzip và bzip2 để nén lưu trữ tar chủ yếu là quyết định về tốc độ so với tỷ lệ nén, với bzip2 cung cấp các tệp nhỏ hơn nhưng với tốc độ nén chậm hơn nhiều. Nhược điểm của các định dạng này bao gồm ít khả năng tương thích với Windows và (tiềm năng) cần giải nén toàn bộ kho lưu trữ để trích xuất một tệp.

  • Lưu trữ ZIP có thể được trích xuất trên hầu hết các nền tảng bằng các công cụ gốc, vì vậy đây là một lựa chọn lý tưởng để gửi một kho lưu trữ cho người dùng không có kỹ thuật, những người sẽ không thoải mái khi cài đặt phần mềm lưu trữ của bên thứ ba như 7-Zip. Mức nén không tốt bằng thuật toán tiên tiến hơn và nó không hỗ trợ quyền Unix, nhưng nó là một định dạng tuyệt vời nếu bạn muốn gửi một kho lưu trữ ảnh kỳ nghỉ cho bà của bạn, ví dụ. ZIP cũng cung cấp một số bảo vệ mật khẩu cơ bản và có thể nhanh chóng trích xuất một tệp từ bất kỳ đâu trong kho lưu trữ.

  • 7-Zip là tốt nếu bạn muốn tỷ lệ nén tốt nhất có thể. Giống như ZIP, nó không hỗ trợ quyền hoặc quyền sở hữu tệp Unix và cũng không được cài đặt theo mặc định trên hầu hết các nền tảng khiến nó hoạt động nhiều hơn một chút, nhưng có thể đáng giá trên Windows nếu mức tăng tỷ lệ nén là quan trọng. Trong môi trường toàn Linux, tốt hơn là sử dụng các công cụ nén 'xz' hoặc 'lzma' cùng với tar, hoạt động chính xác theo cách tương tự như 'gzip' và 'bzip2' nhưng sử dụng thuật toán LZMA tiên tiến hơn như 7 -Zip.


2

Chỉ là một ví dụ, tôi sử dụng các định dạng được đề cập trong các trường hợp sau:

  • Tệp văn bản (đặc biệt là nhật ký): bz2
  • Bộ sưu tập các tệp sẽ được phân phối (ví dụ mã nguồn): gz (tar.gz thực sự).
  • Các loại tập tin: 7zip. Tôi có thể nén hầu hết mọi thứ một cách rất hiệu quả. Đa nền tảng, mã nguồn mở, ổn định, nhẹ, mã hóa tệp (tiêu đề và dữ liệu), ... Bạn có thể yêu cầu bất cứ điều gì khác không? :)

Tôi tránh RAR hoàn toàn và bất cứ khi nào tôi nhận được tệp RAR từ người mà tôi biết, tôi nói với anh ấy / cô ấy ngừng sử dụng định dạng đó vì nó là bản quyền và có lẽ anh ấy / cô ấy đang sử dụng phần mềm không được cấp phép (hầu hết mọi người tải xuống phiên bản dùng thử của WinRAR và tiếp tục sử dụng nó mãi mãi).

PS: Tôi chạy Ubuntu (chủ yếu) và Windows (cả khởi động kép và VirtualBox).


1

Có ít nhất bốn công việc riêng biệt thường bị nhầm lẫn với nhau vì các công cụ phổ biến tích hợp chúng:

  1. Lưu trữ: khả năng kết hợp nhiều tệp (bao gồm siêu dữ liệu) thành một tệp duy nhất, bảo tồn càng nhiều thứ càng tốt. Trong thế giới Linux / Unix, việc lưu trữ được thực hiện theo định dạng tệp TAR.
  2. Nén: khả năng giảm thiểu kích thước của luồng dữ liệu nhị phân một cách dễ dàng. Trong thế giới Linux / Unix, điều này theo truyền thống được thực hiện bởi GZip và BZip2.
  3. Mã hóa: khả năng xáo trộn dữ liệu bằng các phím
  4. Checksum: khả năng phát hiện (và có thể sửa) lỗi.

Tính phổ biến của .tar.gz và .tar.bz tương ứng với triết lý Unix của các công cụ nhỏ làm tốt một công việc, trên một công cụ duy nhất làm mọi thứ. Định dạng tệp TAR không hỗ trợ nén hoặc mã hóa, nhưng nó có thể được nén thêm bởi bất kỳ máy nén nào (bao gồm .tar.zip hoặc .tar.7z). Công việc của GZip và BZip2 chỉ đơn giản là nén một luồng tệp sang một tệp phim khác, lớp nén không cần quan tâm làm thế nào để bảo toàn siêu dữ liệu hoặc mã hóa hoặc tổng kiểm tra. Tuy nhiên, theo thời gian, một số phím tắt đã được tạo ra trong tarchương trình để hoạt động với máy nén thuận tiện hơn.

Trong định dạng tệp zip và 7z, các công việc riêng biệt này được thực hiện bởi một chương trình trong một định dạng siêu tệp duy nhất.

Tại sao xu hướng trên dường như giữ vững, mặc dù tất cả những thứ này là định dạng di động? Có bất kỳ lợi thế cụ thể nào để sử dụng một định dạng lưu trữ cụ thể trên một nền tảng cụ thể không?

Bởi vì nó đã được thực hiện theo cách của nó, mã nguồn chương trình được phân phối theo truyền thống là .tar.gz hoặc .tar.bz2, vì việc bảo vệ quyền của tệp, thời gian sửa đổi, v.v ... rất quan trọng đối với các công cụ khác nhau được sử dụng để lập trình (ví dụ: make).

Bước lưu trữ và nén riêng biệt đã hoạt động rất tốt trong nhiều năm, nó có một lợi thế rõ ràng là có thể tự do trộn và kết hợp lưu trữ và nén, và nhược điểm của nó (quy trình nén 2 bước) có thể dễ dàng tránh được bằng cách phát triển các công cụ thông minh hơn ( chương trình nén linux hiện đại nhất sẽ trực tiếp nén thành .tar.gz hoặc .tar.bz2, ẩn bước trung gian).

Không có lý do mạnh mẽ để chuyển sang các định dạng tệp khác, máy nén mới hơn không có tốc độ nén tốt hơn đáng kể để biện minh cho việc phá vỡ truyền thống và tar có thể bảo vệ mọi thứ đủ tốt.

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.