Część 1: Wydajność
Oto porównanie dwóch oddzielnych przepływów pracy i ich działań.
Na dysku blah.tar.gz
znajduje się plik, który, powiedzmy, 1 GB danych skompresowanych gzip, który po rozpakowaniu zajmuje 2 GB (a więc współczynnik kompresji 50%).
Sposób, w jaki to utworzyłbyś, gdybyś osobno archiwizował i kompresował, to:
tar cf blah.tar files ...
Spowodowałoby blah.tar
to po prostu agregację files ...
nieskompresowanej formy.
Wtedy byś zrobił
gzip blah.tar
Odczytuje to zawartość blah.tar
dysku, kompresuje je za pomocą algorytmu kompresji gzip, zapisuje zawartość blah.tar.gz
, a następnie rozłącza (usuwa) plik blah.tar
.
Teraz dekompresujmy!
Sposób 1
Masz blah.tar.gz
, tak czy inaczej.
Zdecydowałeś się uruchomić:
gunzip blah.tar.gz
To będzie
- PRZECZYTAJ 1 GB skompresowanej zawartości danych
blah.tar.gz
.
- Przetwarzaj skompresowane dane przez
gzip
dekompresor w pamięci.
- Gdy bufor pamięci zapełni się danymi o wartości „bloku”, NAPISZ nieskompresowane dane do pliku
blah.tar
na dysku i powtarzaj, aż wszystkie skompresowane dane zostaną odczytane.
- Odłącz (usuń) plik
blah.tar.gz
.
Teraz masz blah.tar
na dysku, który jest nieskompresowany, ale zawiera jeden lub więcej plików, z bardzo niskim narzutem struktury danych. Rozmiar pliku jest prawdopodobnie o kilka bajtów większy niż suma wszystkich danych pliku.
Biegniesz:
tar xvf blah.tar
To będzie
- PRZECZYTAJ 2 GB nieskompresowanej zawartości danych
blah.tar
i tar
struktur danych formatu pliku, w tym informacje o uprawnieniach do plików, nazwach plików, katalogach itp.
- NAPISZ 2 GB danych plus metadane na dysk. Obejmuje to: tłumaczenie informacji o strukturze danych / metadanych na tworzenie nowych plików i katalogów na dysku, odpowiednio, lub przepisywanie istniejących plików i katalogów z nową zawartością danych.
Całkowita ilość danych, które ODCZYTALIŚMY z dysku w tym procesie wyniosła 1 GB (dla gunzip) + 2 GB (dla tar) = 3 GB.
Całkowita ilość danych, które WROTE zapisaliśmy na dysk w tym procesie, wyniosła 2 GB (dla gunzip) + 2 GB (dla tar) + kilka bajtów dla metadanych = około 4 GB.
Sposób 2
Masz blah.tar.gz
, tak czy inaczej.
Zdecydowałeś się uruchomić:
tar xvzf blah.tar.gz
To będzie
- PRZECZYTAJ do pamięci skompresowaną zawartość 1 GB danych
blah.tar.gz
, blok na raz.
- Przetwarzaj skompresowane dane przez
gzip
dekompresor w pamięci.
- Gdy bufor pamięci się zapełnia, potokuje te dane w pamięci do
tar
parsera formatu pliku, który odczyta informacje o metadanych itp. I nieskompresowanych danych pliku.
- Gdy bufor pamięci zapełni się w
tar
analizatorze plików, NAPISUJE nieskompresowane dane na dysk, tworząc pliki i katalogi i wypełniając je nieskompresowaną zawartością.
Łączna ilość danych, które odczytaliśmy z dysku w tym procesie, wyniosła 1 GB skompresowanych danych, okres.
Łączna ilość danych, które WROTE zapisaliśmy na dysk w tym procesie, wyniosła 2 GB nieskompresowanych danych + kilka bajtów dla metadanych = około 2 GB.
Jeśli zauważysz, ilość dyskowych I / O w Way 2 jest identyczna z dyskowymi I / O wykonywanymi przez, powiedzmy, programy Zip
lub 7-Zip , dostosowując się do wszelkich różnic w stopniu kompresji.
A jeśli Twoim problemem jest współczynnik kompresji, użyj Xz
kompresora do enkapsulacji tar
, a masz archiwum TAR LZMA2 , które jest tak samo wydajne, jak najbardziej zaawansowany algorytm dostępny dla 7-Zip :-)
Część 2: Funkcje
tar
przechowuje uprawnienia uniksowe w obrębie metadanych plików i jest bardzo dobrze znany i przetestowany pod kątem skutecznego pakowania katalogu z różnego rodzaju uprawnieniami, symbolicznymi linkami itp. Istnieje więcej niż kilka przypadków, w których można potrzebować spakować kilka plików do jednego pliku lub strumienia, ale niekoniecznie kompresuj go (chociaż kompresja jest przydatna i często używana).
Część 3: Kompatybilność
Wiele narzędzi jest rozpowszechnianych w formie źródłowej lub binarnej jako .tar.gz lub .tar.bz2, ponieważ jest to format pliku „najniższego wspólnego mianownika”: podobnie jak większość użytkowników systemu Windows ma dostęp do dekompresorów .zip lub .rar, większość instalacji Linuksa , nawet najbardziej podstawowy, będzie miał dostęp do co najmniej tar i gunzip, bez względu na to, ile ma lat lub jest zredukowany. Nawet oprogramowanie układowe na Androida ma dostęp do tych narzędzi.
Nowe projekty skierowane do odbiorców korzystających z nowoczesnych dystrybucji mogą bardzo dobrze rozpowszechniać w bardziej nowoczesnym formacie, takim jak .tar.xz (przy użyciu formatu kompresji Xz (LZMA), który kompresuje lepiej niż gzip lub bzip2), lub .7z, który jest podobny do formaty plików ZIP lub RAR , ponieważ zarówno kompresuje, jak i określa układ kapsułkowania wielu plików w jednym pliku.
Nie widać częstszego używania .7z z tego samego powodu, dla którego muzyka nie jest sprzedawana w internetowych sklepach z plikami do pobrania w nowych formatach, takich jak Opus , lub wideo w WebM . Kompatybilność z osobami korzystającymi ze starożytnych lub bardzo podstawowych systemów.
tar xvzf
trudniej jest7z -x
...