BSD TAR (Tape Archive) là định dạng tệp được sử dụng rộng rãi để lưu trữ và nén các bộ sưu tập tệp và thư mục. Ban đầu, định dạng này được phát triển để sao lưu dữ liệu vào các thiết bị truy cập tuần tự như băng từ, nhưng hiện nay thường được sử dụng để phân phối các gói phần mềm và tạo bản sao lưu lưu trữ trên nhiều phương tiện lưu trữ khác nhau. Định dạng TAR cho phép nhiều tệp được đóng gói thành một tệp lưu trữ duy nhất trong khi vẫn giữ nguyên cấu trúc thư mục, thuộc tính tệp và quyền.
Lưu trữ TAR bao gồm một loạt các tiêu đề tệp và khối dữ liệu tệp được nối với nhau. Mỗi tệp trong lưu trữ được biểu diễn bằng một khối tiêu đề 512 byte theo sau là dữ liệu của tệp, được làm tròn thành bội số của 512 byte. Khối tiêu đề chứa siêu dữ liệu về tệp, chẳng hạn như tên, kích thước, quyền sở hữu, quyền và dấu thời gian sửa đổi.
Khối tiêu đề tệp có cấu trúc cố định với các trường có kích thước được xác định trước. Một số trường chính bao gồm:
- Tên tệp (100 byte): Tên của tệp, thường giới hạn ở 255 ký tự, kết thúc bằng một byte null.
- Chế độ tệp (8 byte): Quyền và loại tệp, được lưu trữ dưới dạng số bát phân.
- ID người dùng của chủ sở hữu (8 byte): ID người dùng số của chủ sở hữu tệp.
- ID người dùng của nhóm (8 byte): ID nhóm số của chủ sở hữu tệp.
- Kích thước tệp (12 byte): Kích thước của tệp tính bằng byte, được lưu trữ dưới dạng số bát phân.
- Thời gian sửa đổi (12 byte): Dấu thời gian sửa đổi cuối cùng của tệp, được lưu trữ dưới dạng số giây kể từ ngày 1 tháng 1 năm 1970, theo bát phân.
- Tổng kiểm tra tiêu đề (8 byte): Tổng kiểm tra của khối tiêu đề, được sử dụng để phát hiện lỗi.
Theo sau khối tiêu đề, dữ liệu của tệp được lưu trữ trong các khối 512 byte liên tiếp. Nếu kích thước tệp không phải là bội số của 512 byte, khối cuối cùng sẽ được làm tròn bằng các byte null. Kết thúc của lưu trữ được đánh dấu bằng hai khối 512 byte liên tiếp được điền bằng các byte null.
Một trong những hạn chế của định dạng TAR ban đầu là không hỗ trợ các tệp có kích thước lớn hơn 8 GB do trường kích thước tệp 12 byte. Để khắc phục hạn chế này, các tiện ích mở rộng sau này như định dạng POSIX.1-2001 (pax) đã giới thiệu các trường tiêu đề bổ sung để hỗ trợ các tệp có kích thước lớn hơn.
Bản thân định dạng TAR không cung cấp khả năng nén dữ liệu. Tuy nhiên, thông thường người ta nén các lưu trữ TAR bằng các thuật toán nén như gzip, bzip2 hoặc xz. Các tệp kết quả thường được đặt các phần mở rộng như .tar.gz, .tgz, .tar.bz2, .tbz2, .tar.xz hoặc .txz để chỉ ra phương pháp nén được sử dụng.
Việc tạo và giải nén các lưu trữ TAR được hỗ trợ bởi hầu hết các hệ điều hành và có thể được thực hiện bằng các công cụ dòng lệnh hoặc giao diện người dùng đồ họa. Trên các hệ thống giống Unix, lệnh tar thường được sử dụng. Ví dụ:
- Để tạo lưu trữ TAR: `tar -cf archive.tar file1 file2 directory/`
- Để giải nén lưu trữ TAR: `tar -xf archive.tar`
- Để tạo lưu trữ TAR được nén: `tar -czf archive.tar.gz file1 file2 directory/`
Ngoài định dạng TAR cơ bản, còn có một số biến thể và tiện ích mở rộng, chẳng h ạn như định dạng GNU TAR, định dạng này bổ sung hỗ trợ cho các tệp thưa thớt, tên tệp dài và các thuộc tính mở rộng. Các tiện ích mở rộng này cung cấp chức năng bổ sung trong khi vẫn duy trì khả năng tương thích với định dạng TAR cơ bản.
Tính đơn giản và khả năng di động của định dạng TAR đã góp phần vào việc định dạng này được áp dụng rộng rãi trên nhiều nền tảng và trường hợp sử dụng khác nhau. Định dạng này vẫn là lựa chọn phổ biến để lưu trữ, sao lưu và phân phối phần mềm, thường kết hợp với các phương pháp nén để giảm yêu cầu lưu trữ và thời gian truyền.
Nén tệp giảm độ dư thừa để cùng một lượng thông tin sử dụng ít bit hơn. Giới hạn trên được quyết định bởi lý thuyết thông tin: với nén không mất dữ liệu, giới hạn là entropy của nguồn (xem định lý mã nguồn của Shannon source coding theorem và bài báo gốc năm 1948 “A Mathematical Theory of Communication”). Với nén mất dữ liệu, sự đánh đổi giữa bitrate và chất lượng được mô tả bởi lý thuyết rate–distortion.
Hầu hết bộ nén có hai giai đoạn. Đầu tiên một mô hình dự đoán hoặc lộ ra cấu trúc trong dữ liệu. Sau đó một bộ mã biến các dự đoán đó thành mẫu bit gần tối ưu. Gia đình kinh điển là Lempel–Ziv LZ77 (1977) và LZ78 (1978) phát hiện chuỗi lặp rồi phát các tham chiếu thay vì byte thô. Ở phía mã hóa mã Huffman (bài gốc 1952) gán mã ngắn hơn cho ký hiệu có xác suất cao. Mã hóa số học và range coding tiến gần hơn nữa tới giới hạn entropy, trong khi Asymmetric Numeral Systems (ANS) hiện đại đạt được tỷ lệ tương tự với các bảng tra cứu nhanh.
DEFLATE (dùng bởi gzip, zlib, ZIP) kết hợp LZ77 và Huffman. Đặc tả đều mở: DEFLATE RFC 1951, lớp bọc zlib RFC 1950và định dạng gzip RFC 1952. Gzip được thiết kế cho streaming và không cung cấp truy cập ngẫu nhiên. PNG chuẩn hóa DEFLATE là phương pháp duy nhất (cửa sổ tối đa 32 KiB) theo đặc tả “Compression method 0…” và W3C/ISO PNG 2nd Edition.
Zstandard (zstd): bộ nén đa dụng mới cung cấp tỷ lệ cao và giải nén cực nhanh. Định dạng có trong RFC 8878 (cùng bản HTML) và đặc tả tham chiếu trên GitHub. Như gzip, frame cơ bản không nhắm tới truy cập ngẫu nhiên. Siêu năng lực của zstd là từ điển: mẫu nhỏ từ tập dữ liệu giúp hàng loạt tệp nhỏ/giống nhau nén tốt hơn (xem tài liệu python-zstandard và ví dụ của Nigel Tao). Triển khai hỗ trợ cả từ điển “unstructured” lẫn “structured” (thảo luận).
Brotli: tối ưu cho nội dung web (font WOFF2, HTTP). Kết hợp từ điển tĩnh và lõi LZ+entropy giống DEFLATE. Đặc tả là RFC 7932, mô tả cửa sổ 2WBITS−16 với WBITS [10, 24] (1 KiB−16 B tới 16 MiB−16 B) và rằng nó không cung cấp truy cập ngẫu nhiên. Brotli thường vượt gzip trên văn bản web và giải nén nhanh.
Vỏ chứa ZIP: ZIP là kho tệp có thể lưu nhiều phương pháp nén (deflate, store, zstd...). Chuẩn thực tế là APPNOTE của PKWARE (xem cổng APPNOTE, bản lưu trữvà tóm tắt của LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 ưu tiên tốc độ tuyệt đối với tỷ lệ vừa phải. Xem trang dự án và định dạng frame. Lý tưởng cho cache trong RAM, telemetri hoặc đường nóng cần giải nén gần tốc độ bộ nhớ.
XZ / LZMA hướng đến mật độ cao (tỷ lệ tốt) với thời gian nén chậm hơn. XZ là vỏ chứa; công việc chính do LZMA/LZMA2 (mô hình LZ77 + range coding) đảm nhiệm. Xem định dạng .xz, đặc tả LZMA (Pavlov)và ghi chú kernel Linux về XZ Embedded. XZ thường nén tốt hơn gzip và cạnh tranh với codec hiện đại, nhưng mã hóa lâu hơn.
bzip2 dùng Biến đổi Burrows–Wheeler (BWT), move-to-front, RLE và Huffman. Thường nhỏ hơn gzip nhưng chậm hơn; xem hướng dẫn chính thức và trang man (Linux).
Kích thước “cửa sổ” rất quan trọng. Tham chiếu DEFLATE chỉ nhìn lại 32 KiB (RFC 1951) và giới hạn 32 KiB của PNG được nêu ở đây. Brotli hỗ trợ cửa sổ từ ~1 KiB đến 16 MiB (RFC 7932). Zstd điều chỉnh cửa sổ và độ sâu tìm kiếm theo level (RFC 8878). Dòng cơ sở của gzip/zstd/brotli hướng tới giải nén tuần tự; bản thân định dạng không hứa truy cập ngẫu nhiên, nhưng các vỏ chứa (tar có chỉ mục, framing theo khối, chỉ mục chuyên biệt) có thể bổ sung.
Các định dạng trên là lossless: bạn khôi phục đúng byte ban đầu. Codec media thường lossy: loại bỏ chi tiết khó nhận biết để giảm bitrate. Với ảnh, JPEG cổ điển (DCT, lượng tử hóa, mã entropy) được chuẩn hóa trong ITU-T T.81 / ISO/IEC 10918-1. Với âm thanh, MP3 (MPEG-1 Layer III) và AAC (MPEG-2/4) dùng mô hình cảm nhận và biến đổi MDCT (xem ISO/IEC 11172-3, ISO/IEC 13818-7và tổng quan MDCT tại đây). Lossy và lossless có thể cùng tồn tại (ví dụ PNG cho UI, codec web cho ảnh/video/audio).
Lý thuyết Shannon 1948 · Rate–distortion · Mã hóa Huffman 1952 · Mã số học · Range coding · ANS. Định dạng DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · định dạng XZ. Chuỗi BWT Burrows–Wheeler (1994) · hướng dẫn bzip2. Media JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Tóm lại: hãy chọn bộ nén phù hợp dữ liệu và ràng buộc của bạn, đo trên dữ liệu thực và đừng quên lợi ích từ từ điển cùng cách đóng gói thông minh. Khi ghép đúng, bạn sẽ có tệp nhỏ hơn, truyền nhanh hơn và ứng dụng phản hồi hơn mà không hy sinh độ chính xác hay tính di động.
Nén file là quá trình giảm kích thước của một file hoặc các file, thường để tiết kiệm không gian lưu trữ hoặc tăng tốc độ truyền trên mạng.
Nén file hoạt động bằng cách xác định và loại bỏ sự trùng lặp trong dữ liệu. Nó sử dụng thuật toán để mã hóa dữ liệu gốc trong một không gian nhỏ hơn.
Hai loại chính của nén file là nén lossless và lossy. Nén lossless cho phép phục hồi hoàn toàn file gốc, trong khi nén lossy cho phép giảm kích thước đáng kể hơn nhưng có thể mất một phần chất lượng dữ liệu.
Một ví dụ phổ biến về công cụ nén file là WinZip, hỗ trợ nhiều định dạng nén bao gồm ZIP và RAR.
Với nén lossless, chất lượng không thay đổi. Tuy nhiên, với nén lossy, có thể có sự giảm chất lượng rõ rệt do nó loại bỏ dữ liệu ít quan trọng để giảm kích thước file đáng kể hơn.
Có, nén file an toàn về mặt tính toàn vẹn của dữ liệu, đặc biệt với nén lossless. Tuy nhiên, giống như bất kỳ file nào, file nén có thể bị mục tiêu bởi malware hoặc virus, vì vậy luôn quan trọng khi có phần mềm bảo mật uy tín.
Hầu như tất cả các loại file đều có thể được nén, bao gồm file văn bản, hình ảnh, audio, video và file phần mềm. Tuy nhiên, mức độ nén có thể thực hiện đáng kể có thể thay đổi giữa các loại file khác nhau.
ZIP file là một loại định dạng file sử dụng nén lossless để giảm kích thước của một hoặc nhiều file. Nhiều file trong một ZIP file effectively được gói lại thành một file duy nhất, điều này cũng giúp việc chia sẻ dễ dàng hơn.
Về mặt kỹ thuật, có, mặc dù việc giảm kích thước thêm có thể tối thiểu hoặc thậm chí phản tác dụng. Nén một file đã được nén đôi khi có thể tăng kích thước do metadata được thêm vào bởi thuật toán nén.
Để giải nén một file, bạn thường cần một công cụ giải nén hoặc giải nén, như WinZip hoặc 7-Zip. Những công cụ này có thể trích xuất các file gốc từ định dạng nén.