Lợi thế của việc sử dụng định dạng tệp Tar ngày nay là gì?
Định dạng lưu trữ tar là, trong những năm tính toán, một Methuselah thực sự nhưng nó vẫn còn được sử dụng nhiều cho đến ngày nay. Điều gì làm cho định dạng tar rất hữu ích sau khi ra đời?
Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.
Câu hỏi
Người đọc SuperUser MarcusJ rất tò mò về định dạng tar và tại sao chúng ta vẫn sử dụng nó sau ngần ấy năm:
Tôi biết rằng tar đã được tạo để lưu trữ băng từ ngày trước, nhưng hôm nay chúng tôi có các định dạng tệp lưu trữ vừa tổng hợp các tệp và thực hiện nén trong cùng một định dạng tệp logic.
Câu hỏi:
- Có bị phạt hiệu năng trong các giai đoạn tổng hợp / nén / giải nén khi sử dụng tar được đóng gói trong gzip hoặc bzip2, khi so sánh với việc sử dụng định dạng tệp tổng hợp và nén trong cùng một cấu trúc dữ liệu không? Giả sử thời gian chạy của máy nén được so sánh là giống hệt nhau (ví dụ: gzip và Deflate là tương tự nhau).
- Có các tính năng của định dạng tệp tar mà các định dạng tệp khác, chẳng hạn như .7z và .zip không có?
- Vì tar là một định dạng tệp cũ và các định dạng tệp mới hơn tồn tại ngày nay, tại sao tar (dù được gói trong gzip, bzip2 hoặc thậm chí là xz mới) ngày nay vẫn được sử dụng rộng rãi trên GNU / Linux, Android, BSD và các UNIX khác hệ điều hành, để chuyển tập tin, tải nguồn chương trình và nhị phân, và đôi khi là định dạng của trình quản lý gói?
Đó là một câu hỏi hoàn toàn hợp lý; rất nhiều thứ đã thay đổi trong thế giới điện toán trong ba mươi năm qua nhưng chúng ta 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ố cái nhìn sâu sắc về tuổi thọ và chức năng của định dạng tar:
Phần 1: Hiệu suất
Dưới đây là so sánh hai quy trình công việc riêng biệt và những gì họ làm.
Bạn có một tập tin trên đĩa
blah.tar.gz
nghĩa là, 1 GB dữ liệu được nén bằng gzip, khi không nén, chiếm 2 GB (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 tập tin
Điều này sẽ dẫn đến
blah.tar
đó là một tập hợp đơn thuần củacác tập tin…
ở 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àoblah.tar.gz
, sau đó hủy liên kết (xóa) tệpblah.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:
súng nén blah.tar.gz
Điều này sẽ
- ĐỌC nội dung dữ liệu nén 1GB của
blah.tar.gz
.- QUY TRÌNH dữ liệu nén thông qua
gzip
giải nén trong bộ nhớ.- Khi bộ nhớ đệm lấp đầy với dữ liệu có giá trị khối khối, hãy VIẾT dữ liệu không nén vào tệp
blah.tar
trên đĩa và lặp lại cho đến khi tất cả cá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, không 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 tin có thể là một vài byte lớn hơn tổng của tất cả các dữ liệu tệp sẽ là.Bạn chạy:
tar xvf blah.tar
Điều này sẽ
- ĐỌC 2GB nội dung dữ liệu không nén của
blah.tar
vàhắc ín
cấu trúc dữ liệu của định dạng tệp, bao gồm thông tin về quyền tệp, tên tệp, thư mục, v.v..- VIẾT vào đĩ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 / thông tin siêu dữ liệu sang tạo tệp và thư mục mới trên đĩa khi 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 (đối với gunzip) + 2GB (đối với tar) = 3GB.
Tổng số dữ liệu chúng tôi VIẾT vào đĩa trong quá trình này là 2GB (đối với gunzip) + 2GB (đối với 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 của
blah.tar.gz
, một khối tại một thời điểm, vào bộ nhớ.- QUY TRÌNH 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
hắc ín
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 lên trong
hắc ín
trình phân tích tệp, nó sẽ VIẾT dữ liệu không nén vào đĩa, bằng cách tạo tệp và thư mục và điền vào chúng với nội dung không 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, giai đoạn.
Tổng số dữ liệu chúng tôi VIẾT 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 hệt nhau vào đĩa I / O được thực hiện bởi, giả sử,
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óihắc ín
, và bạn có kho lưu trữ TAR của LZMA2, hiệu quả tương đương với thuật toán tiên tiến nhất hiện có7-Zip
:-)Phần 2: Tính năng
hắc ín
lưu trữ các quyền 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, các liên kết tượng trưng, v.v. Có nhiều trường hợp người ta có thể cần phải đưa một loạt các tệp vào 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 nhị phân như .tar.gz hoặc .tar.bz2 vì đây là định dạng tệp mẫu số chung thấp nhất của Cameron: giống như hầu hết người dùng Windows có quyền truy cập vào bộ giải nén .zip hoặc .rar, hầu hết các bản cài đặt Linux, ngay cả những thứ cơ bản nhất, cũng sẽ có quyền truy cập vào ít nhất tar và gunzip, bất kể cũ hay giảm xuống. Ngay cả các phần mềm Android cũng 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 ở đị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ư các định dạng tệp Zip hoặc Rar ở chỗ nó vừa 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 lý do nhạc không được bán từ các cửa hàng tải xuống trực tuyến ở 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 chạy các hệ thống cổ xưa hoặc rất cơ bản.
Có một cái gì đó để thêm vào lời giải thích? Tắt â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 am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.