Format archiwum ISO, znany również jako ISO 9660, to standard systemu plików opublikowany przez Międzynarodową Organizację Normalizacyjną (ISO) w 1988 roku. Został zaprojektowany jako wieloplatformowy system plików dla nośników optycznych, takich jak płyty CD-ROM. Celem było zapewnienie ujednoliconej metody odczytu danych z dysków optycznych dla różnych systemów operacyjnych, zapewniając interoperacyjność i kompatybilność.
ISO 9660 definiuje hierarchiczną strukturę systemu plików, podobną do systemów plików używanych przez większość systemów operacyjnych. Organizuje dane w katalogach i plikach, przy czym każdy katalog może zawierać podkatalogi i pliki. Standard określa format deskryptorów woluminów i katalogów, a także tablicę ścieżek, która służy do szybkiego dostępu do katalogów.
Jedną z kluczowych cech formatu ISO 9660 jest jego prostota i kompatybilność. Standard nakłada ograniczenia na nazwy plików, struktury katalogów i metadane, aby zapewnić, że dyski mogą być odczytywane przez szeroką gamę systemów. Nazwy plików są ograniczone do 8 znaków, po których następuje rozszerzenie składające się z 3 znaków (format 8.3) i mogą zawierać tylko wielkie litery, cyfry i podkreślenia. Nazwy katalogów są podobnie ograniczone, z maksymalną głębokością 8 poziomów.
Aby pomieścić dłuższe nazwy plików i dodatkowe metadane, standard ISO 9660 został rozszerzony za pomocą różnych specyfikacji. Jednym z takich rozszerzeń jest Joliet, wprowadzony przez Microsoft w 1995 roku. Joliet umożliwia dłuższe nazwy plików (do 64 znaków Unicode) i obsługuje rozróżnianie wielkości liter. Osiąga to poprzez dołączenie dodatkowego zestawu rekordów katalogów przy użyciu kodowania UCS-2, które jest odczytywane przez systemy obsługujące rozszerzenie Joliet.
Innym godnym uwagi rozszerzeniem ISO 9660 jest Rock Ridge, który został opracowany dla systemów UNIX. Rock Ridge dodaje semantykę systemu plików POSIX, taką jak uprawnienia do plików, własność i dowiązania symboliczne, do formatu ISO 9660. To rozszerzenie umożliwia zachowanie atrybutów plików specyficznych dla systemu UNIX podczas tworzenia obrazów ISO z systemów plików UNIX.
Format ISO 9660 dzieli dysk na bloki logiczne, z których każdy ma zwykle rozmiar 2048 bajtów. Pierwsze 16 bloków jest zarezerwowanych do użytku systemowego i zawiera deskryptory woluminów, które dostarczają informacji o strukturze i zawartości dysku. Główny deskryptor woluminu jest obowiązkowy i zawiera takie szczegóły, jak identyfikator woluminu dysku, rozmiar bloków logicznych i rekord katalogu głównego.
Po deskryptorach woluminów na dysku przechowywana jest tabela ścieżek. Tabela ścieżek zawiera informacje o lokalizacji każdego katalogu na dysku, umożliwiając szybkie przechodzenie po hierarchii katalogów. Składa się z tabeli ścieżek L (Little-Endian) i tabeli ścieżek M (Big-Endian), aby obsługiwać różne kolejności bajtów używane przez różne systemy.
Katalogi i pliki są przechowywane w kolejnych blokach dysku. Każdy katalog jest reprezentowany przez rekord katalogu, który zawiera informacje takie jak nazwa katalogu, jego katalog nadrzędny i lokalizacja powiązanych plików i podkatalogów. Pliki są przechowywane jako ciągłe sekwencje bloków logicznych, a ich lokalizacja i rozmiar są określone w odpowiednim rekordzie identyfikatora pliku w katalogu.
Podczas tworzenia obrazu ISO system plików jest najpierw organizowany zgodnie z wymaganiami standardu ISO 9660. Obejmuje to zapewnienie, że nazwy plików i katalogów są zgodne z formatem 8.3, ograniczenie głębokości katalogu i konwersję nazw plików na wielkie litery. Po przygotowaniu systemu plików jest on zapisywany do pliku obrazu z rozszerzeniem `.iso`, który można następnie nagrać na dysk optyczny lub użyć jako obraz dysku wirtualnego.
Aby odczytać dysk sformatowany w formacie ISO 9660, system operacyjny lub dedykowana aplikacja rozpoczyna od zbadania deskryptorów woluminów w celu określenia struktury i charakterystyki dysku. Następnie używa tabeli ścieżek i rekordów katalogów do poruszania się po hierarchii systemu plików i lokalizowania określonych plików lub katalogów. Gdy uzyskuje się dostęp do pliku, system odczytuje odpowiednie bloki logiczne z dysku na podstawie informacji podanych w rekordzie identyfikatora pliku.
Format ISO 9660 został szeroko przyjęty i jest nadal powszechnie używany do dystrybucji oprogramowania, treści multimedialnych i danych archiwalnych na dyskach optycznych. Jego prostota, kompatybilność i niezawodność przyczyniły się do jego długowieczności, nawet gdy pojawiły się nowsze formaty dysków optycznych i systemy plików.
Pomimo swojego wieku standard ISO 9660 pozostaje istotny we współczesnych komputerach. Wiele aplikacji i systemów operacyjnych, w tym Windows, macOS i Linux, nadal natywnie obsługuje ten format. Ponadto obrazy ISO są często używane do dystrybucji plików instalacyjnych systemu operacyjnego, pakietów oprogramowania i obrazów dysków maszyn wirtualnych, ponieważ zapewniają wygodną i niezależną od platformy metodę przechowywania i przesyłania danych.
Podsumowując, format ISO 9660 odegrał kluczową rolę w standaryzacji struktury systemu plików dla dysków optycznych, umożliwiając kompatybilność między platformami i ułatwiając dystrybucję treści cyfrowych. Jego rozszerzenia, takie jak Joliet i Rock Ridge, dodały obsługę dłuższych nazw plików, dodatkowych metadanych i atrybutów specyficznych dla systemu UNIX. Chociaż dyski optyczne zostały w dużej mierze zastąpione przez inne nośniki pamięci i metody dystrybucji oparte na sieci, format ISO 9660 pozostaje niezawodnym i szeroko obsługiwanym standardem do archiwizowania i wymiany danych.
W miarę rozwoju technologii format ISO 9660 może zostać ostatecznie zastąpiony przez nowsze, bardziej zaawansowane systemy plików zaprojektowane dla dysków optycznych o dużej pojemności lub innych nośników pamięci. Jednak jego wpływ na historię informatyki i jego rola w ustanowieniu znormalizowanego podejścia do wymiany danych między platformami nie zostaną zapomniane. Format ISO 9660 służy jako świadectwo znaczenia interoperacyjności i korzyści płynących ze współpracy w branży w zakresie opracowywania i przyjmowania standardów.
Kompresja plików redukuje redundancję, dzięki czemu te same informacje wymagają mniej bitów. Górna granica jest wyznaczana przez teorię informacji: dla kompresji bezstratnej limitem jest entropia źródła (zobacz teoremę kodowania źródła Shannona source coding theorem oraz jego oryginalny artykuł z 1948 roku „A Mathematical Theory of Communication”). W kompresji stratnej kompromis między przepływnością a jakością opisuje teoria rate–distortion.
Większość kompresorów działa w dwóch etapach. Najpierw model przewiduje lub ujawnia strukturę danych. Następnie koder zamienia te przewidywania w niemal optymalne wzorce bitowe. Klasyczną rodziną modeli jest Lempel–Ziv LZ77 (1977) i LZ78 (1978) wykrywają powtarzające się podciągi i zamiast surowych bajtów emitują odwołania. Po stronie kodowania kodowanie Huffmana (zob. artykuł z 1952 r.) przypisuje krótsze kody symbolom bardziej prawdopodobnym. Kodowanie arytmetyczne i range coding są jeszcze precyzyjniejsze i zbliżają się do granicy entropii, a nowoczesne Asymmetric Numeral Systems (ANS) osiągają podobne wyniki dzięki szybkim implementacjom tablicowym.
DEFLATE (wykorzystywane przez gzip, zlib i ZIP) łączy LZ77 z kodowaniem Huffmana. Specyfikacje są publiczne: DEFLATE RFC 1951, wrapper zlib RFC 1950i format gzip RFC 1952. Gzip jest przeznaczony do strumieniowania i wprost nie oferuje dostępu losowego. Obrazy PNG standaryzują DEFLATE jako jedyną metodę kompresji (maks. okno 32 KiB) zgodnie ze specyfikacją „Compression method 0… deflate/inflate… at most 32768 bytes” oraz W3C/ISO PNG 2nd Edition.
Zstandard (zstd): nowszy uniwersalny kompresor zaprojektowany dla wysokich współczynników i bardzo szybkiej dekompresji. Format opisano w RFC 8878 (oraz lustrze HTML) i w specyfikacji referencyjnej na GitHubie. Podobnie jak gzip, podstawowa ramka nie celuje w dostęp losowy. Jednym z supermocy zstd są słowniki: niewielkie próbki z korpusu, które dramatycznie poprawiają kompresję wielu małych lub podobnych plików (zob.dokumentację słowników python-zstandard i przykład Nigela Tao). Implementacje akceptują zarówno słowniki „unstructured”, jak i „structured” (dyskusja).
Brotli: zoptymalizowane pod kątem treści webowych (np. fonty WOFF2, HTTP). Łączy statyczny słownik z jądrem LZ+entropia podobnym do DEFLATE. Specyfikacja to RFC 7932, które opisuje też okno 2WBITS−16 z WBITS w [10, 24] (1 KiB−16 B do 16 MiB−16 B) i stwierdza, że nie zapewnia dostępu losowego. Brotli często pokonuje gzip na tekstach webowych, jednocześnie szybko dekodując.
Kontener ZIP: ZIP to archiwum plików, które może przechowywać wpisy z różnymi metodami kompresji (deflate, store, zstd itd.). De facto standardem jest APPNOTE PKWARE (zob.portal APPNOTE, hostowaną kopięoraz omówienia LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 celuje w surową szybkość przy umiarkowanych współczynnikach. Zobacz stronę projektu („extremely fast compression”) oraz opis formatu ramek. Idealne do cache w pamięci, telemetrii lub wrażliwych ścieżek, gdzie dekompresja musi być prawie tak szybka jak RAM.
XZ / LZMA goni za wysoką gęstością (świetnymi współczynnikami) kosztem wolniejszej kompresji. XZ to kontener; ciężar pracy wykonują zwykle LZMA/LZMA2 (modelowanie podobne do LZ77 + range coding). Zobacz format .xz, specyfikację LZMA (Pavlov)oraz notatki jądra Linux o XZ Embedded. XZ zwykle kompresuje lepiej niż gzip i często konkuruje z nowoczesnymi kodekami wysokiego współczynnika, ale wymaga dłuższego kodowania.
bzip2 stosuje Transformację Burrowsa–Wheelera (BWT), move-to-front, RLE i kodowanie Huffmana. Zwykle daje mniejsze pliki niż gzip, ale działa wolniej; zobacz oficjalny podręcznik oraz stronę man (Linux).
Liczy się „rozmiar okna”. Odwołania w DEFLATE mogą sięgać tylko 32 KiB wstecz (RFC 1951) oraz limitu PNG 32 KiB opisanego tutaj. Brotli ma okno od ~1 KiB do 16 MiB (RFC 7932). Zstd dostraja okno i głębokość wyszukiwania poziomami (RFC 8878). Podstawowe strumienie gzip/zstd/brotli są projektowane do sekwencyjnego dekodowania; same formaty nie gwarantują dostępu losowego, choć kontenery (np. indeksy tar, ramek chunked lub indeksy specyficzne dla formatu) mogą go dodać.
Powyższe formaty są bezstratne: odtwarzają dokładnie te same bajty. Kodeki multimedialne często są stratne: odrzucają niewidoczne szczegóły, by osiągnąć niższe bitrate’y. W obrazach klasyczny JPEG (DCT, kwantyzacja, kodowanie entropijne) jest standaryzowany w ITU-T T.81 / ISO/IEC 10918-1. W audio MP3 (MPEG-1 Layer III) i AAC (MPEG-2/4) używają modeli percepcyjnych i transformacji MDCT (zob.ISO/IEC 11172-3, ISO/IEC 13818-7i przegląd MDCT tutaj). Metody stratne i bezstratne mogą współistnieć (np. PNG do UI, kodeki webowe dla obrazów/wideo/audio).
Teoria Shannon 1948 · Rate–distortion · Kodowanie Huffman 1952 · Kodowanie arytmetyczne · Range coding · ANS. Format DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · Format XZ. Stos BWT Burrows–Wheeler (1994) · podręcznik bzip2. Media JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Podsumowanie: wybierz kompresor dopasowany do danych i ograniczeń, mierz na prawdziwych próbkach i nie zapominaj o zyskach ze słowników oraz sprytnego ramek. Z odpowiednią parą uzyskasz mniejsze pliki, szybsze transfery i żwawsze aplikacje bez poświęcania poprawności czy przenośności.
Kompresja plików to proces, który zmniejsza rozmiar pliku lub plików, zazwyczaj w celu oszczędności miejsca na dysku lub przyspieszenia transmisji przez sieć.
Kompresja plików działa poprzez identyfikowanie i usuwanie nadmiarowej informacji w danych. Wykorzystuje algorytmy do kodowania oryginalnych danych w mniejszej przestrzeni.
Dwa główne typy kompresji plików to kompresja bezstratna i stratna. Kompresja bezstratna pozwala na idealne przywrócenie oryginalnego pliku, podczas gdy kompresja stratna umożliwia znaczniejsze zmniejszenie rozmiaru kosztem pewnej utraty jakości danych.
Popularnym przykładem narzędzia do kompresji plików jest WinZip, który obsługuje wiele formatów kompresji, w tym ZIP i RAR.
W przypadku kompresji bezstratnej, jakość pozostaje niezmieniona. Jednak przy kompresji stratnej może dojść do zauważalnego spadku jakości, ponieważ eliminuje ona mniej ważne dane, aby bardziej znacząco zmniejszyć rozmiar pliku.
Tak, kompresja plików jest bezpieczna pod względem integralności danych, zwłaszcza przy kompresji bezstratnej. Jednak, jak wszystkie pliki, skompresowane pliki mogą być celem dla złośliwego oprogramowania lub wirusów, dlatego zawsze ważne jest, aby mieć zainstalowane wiarygodne oprogramowanie zabezpieczające.
Prawie wszystkie typy plików można skompresować, w tym pliki tekstowe, obrazy, audio, wideo i pliki oprogramowania. Jednak poziom możliwej do osiągnięcia kompresji może znacznie różnić się w zależności od typu pliku.
Plik ZIP to typ formatu pliku, który wykorzystuje kompresję bezstratną do zmniejszenia rozmiaru jednego lub więcej plików. Wiele plików w pliku ZIP jest efektywnie grupowanych razem w jeden plik, co ułatwia również udostępnianie.
Technicznie tak, chociaż dodatkowe zmniejszenie rozmiaru może być minimalne lub nawet niekorzystne. Kompresowanie już skompresowanego pliku czasami może zwiększyć jego rozmiar z powodu metadanych dodawanych przez algorytm kompresji.
Aby rozpakować plik, zazwyczaj potrzebujesz narzędzia do dekompresji lub rozpakowywania, takiego jak WinZip czy 7-Zip. Te narzędzia mogą wyodrębnić oryginalne pliki z formatu skompresowanego.