Phiên Hỏi & Đáp hôm nay đến với chúng tôi theo lịch sự của SuperUser - một phân khu của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều hành.
Câu hỏi
Người đọc SuperUser MarcusJ tò mò về định dạng tar và lý do chúng tôi vẫn sử dụng nó sau tất cả các năm sau:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
Đó là một câu hỏi hoàn toàn hợp lý; đã thay đổi rất nhiều trong thế giới máy tính trong ba mươi năm qua nhưng chúng tôi vẫn đang sử dụng định dạng tar. Câu chuyện là gì?
Câu trả lời
Người đóng góp SuperUser Allquixotic cung cấp một số thông tin chi tiết về tuổi thọ và chức năng của định dạng tar:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
đó là, nói, 1 GB dữ liệu nén gzip, khi không nén, chiếm 2 GB (do đó tỷ lệ nén là 50%).
Cách mà bạn sẽ tạo ra điều này, nếu bạn đã thực hiện lưu trữ và nén riêng, sẽ là:
tar cf blah.tar files …
Điều này sẽ dẫn đến
blah.tar
đó chỉ là một tập hợp của
files …
ở dạng không nén.
Sau đó, bạn sẽ làm
gzip blah.tar
Điều này sẽ đọc nội dung của
blah.tar
từ đĩa, nén chúng thông qua thuật toán nén gzip, ghi nội dung vào
blah.tar.gz
sau đó hủy liên kết (xóa) tệp
blah.tar
Bây giờ, hãy giải nén!
Cách 1
Bạn có
blah.tar.gz
cách này hay cách khác.
Bạn quyết định chạy:
gunzip blah.tar.gz
Điều này sẽ
-
ĐỌC nội dung dữ liệu nén 1GB
blah.tar.gz
- Xử lý dữ liệu nén thông qua
gzip
giải nén trong bộ nhớ.
-
Khi bộ nhớ đệm đầy với dữ liệu “khối”, hãy nén dữ liệu chưa nén vào tệp
blah.tar
trên đĩa và lặp lại cho đến khi tất cả dữ liệu nén được đọc.
-
Hủy liên kết (xóa) tệp
blah.tar.gz
Bây giờ bạn có
blah.tar
trên đĩa, được giải nén nhưng chứa một hoặc nhiều tệp trong đó, với chi phí cấu trúc dữ liệu rất thấp. Kích thước tệp có thểmột vài byte lớn hơn tổng của tất cả các dữ liệu tập tin sẽ được.
Bạn chạy:
tar xvf blah.tar
Điều này sẽ
- ĐỌC 2GB nội dung dữ liệu chưa nén của
blah.tar
và
tar
cấu trúc dữ liệu của định dạng tệp, bao gồm thông tin về quyền đối với tệp, tên tệp, thư mục, v.v.
- VIẾT để đĩa 2GB dữ liệu cộng với siêu dữ liệu. Điều này bao gồm: dịch thông tin cấu trúc dữ liệu / siêu dữ liệu vào việc tạo tệp và thư mục mới trên đĩa theo cách thích hợp hoặc viết lại các tệp và thư mục hiện có với nội dung dữ liệu mới.
Tổng số dữ liệu chúng tôi ĐỌC từ đĩa trong quá trình này là 1GB (cho gunzip) + 2GB (cho tar) = 3GB.
Tổng số dữ liệu chúng tôi XÓA vào đĩa trong quá trình này là 2GB (cho gunzip) + 2GB (cho tar) + một vài byte cho siêu dữ liệu = khoảng 4GB.
Cách 2
Bạn có
blah.tar.gz
cách này hay cách khác.
Bạn quyết định chạy:
tar xvzf blah.tar.gz
Điều này sẽ
-
ĐỌC nội dung dữ liệu nén 1GB
blah.tar.gz
một khối tại một thời điểm, vào bộ nhớ.
- Xử lý dữ liệu nén thông qua
gzip
giải nén trong bộ nhớ.
- Khi bộ nhớ đệm đầy, nó sẽ ống dữ liệu đó, trong bộ nhớ, thông qua
tar
trình phân tích cú pháp định dạng tệp, sẽ đọc thông tin về siêu dữ liệu, v.v. và dữ liệu tệp không nén.
-
Khi bộ nhớ đệm đầy trong
tar
tệp phân tích cú pháp, nó sẽ VIẾT dữ liệu chưa nén vào đĩa, bằng cách tạo tệp và thư mục và điền chúng với nội dung chưa nén.
Tổng số dữ liệu chúng tôi ĐỌC từ đĩa trong quá trình này là 1GB dữ liệu nén, thời gian.
Tổng số dữ liệu chúng tôi XÓA vào đĩa trong quá trình này là 2GB dữ liệu không nén + một vài byte cho siêu dữ liệu = khoảng 2GB.
Nếu bạn nhận thấy, số lượng đĩa I / O trong Cách 2 Làgiống nhau vào đĩa I / O được thực hiện bởi, nói,
Zip
hoặc là
7-Zip
chương trình, điều chỉnh cho bất kỳ sự khác biệt trong tỷ lệ nén.
Và nếu tỷ lệ nén là mối quan tâm của bạn, hãy sử dụng
Xz
máy nén để đóng gói
tar
và bạn có kho lưu trữ TAR của LZMA2, có hiệu quả như thuật toán nâng cao nhất hiện có cho
7-Zip
:-)
Phần 2: Tính năng
tar
lưu trữ các quyền của UNIX trong siêu dữ liệu tệp của nó, và rất nổi tiếng và được thử nghiệm để đóng gói thành công một thư mục với tất cả các loại quyền khác nhau, liên kết tượng trưng, v.v. Có nhiều hơn một vài trường hợp một tệp hoặc luồng, nhưng không nhất thiết phải nén nó (mặc dù nén rất hữu ích và thường được sử dụng).
Phần 3: Khả năng tương thích
Nhiều công cụ được phân phối ở dạng nguồn hoặc dạng nhị phân dưới dạng.tar.gz hoặc.tar.bz2 vì nó là định dạng tệp "mẫu số chung thấp nhất": giống như hầu hết người dùng Windows có quyền truy cập vào.zip hoặc.rar, hầu hết các cài đặt Linux, thậm chí là cơ bản nhất, sẽ có quyền truy cập vào ít nhất tar và gunzip, bất kể độ tuổi hay bị bỏ xuống. Ngay cả các phần mềm Android có quyền truy cập vào các công cụ này.
Các dự án mới nhắm mục tiêu đối tượng chạy phân phối hiện đại có thể phân phối rất tốt theo định dạng hiện đại hơn, chẳng hạn như.tar.xz (sử dụng định dạng nén Xz (LZMA), nén tốt hơn gzip hoặc bzip2) hoặc.7z, tương tự như định dạng tệp Zip hoặc Rar ở chỗ cả hai đều nén và chỉ định bố cục để đóng gói nhiều tệp vào một tệp.
Bạn không thấy.7z được sử dụng thường xuyên hơn vì cùng một lý do nhạc không được bán từ các cửa hàng tải xuống trực tuyến bằng các định dạng hoàn toàn mới như Opus hoặc video trong WebM. Khả năng tương thích với những người đang chạy các hệ thống cổ xưa hoặc rất cơ bản.
Có cái gì để thêm vào lời giải thích? Âm thanh trong các ý kiến.Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.