Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Въпроса
Reader на SuperUser MarcusJ е любопитен за формата на катран и защо продължава да го използва след всички тези години:
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?
Това е съвсем разумен въпрос; толкова много се е променило в изчислителния свят през последните тридесет години, но все още използваме формата на катран. Каква е историята?
Отговорът
Сътрудникът на SuperUser Allquixotic предлага известно разбиране за дълголетието и функционалността на формата на катран:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
което е, да речем, 1 GB от gzip-компресирани данни, които при некомпресиране заемат 2 GB (така че съотношението на компресия е 50%).
Начинът, по който бихте създали това, ако искате да архивирате и компресирате поотделно, ще бъде:
tar cf blah.tar files …
Това би довело до
blah.tar
което е просто обобщаване на
files …
в некомпресирана форма.
Тогава ще го направите
gzip blah.tar
Това ще прочете съдържанието на
blah.tar
от диска, ги компресирайте чрез алгоритъма за компресия на gzip, напишете съдържанието
blah.tar.gz
след което прекратете връзката (изтрийте) файла
blah.tar
Сега, нека декомпресираме!
Път 1
Ти имаш
blah.tar.gz
по един или друг начин.
Решавате да изпълните:
gunzip blah.tar.gz
Това ще
-
ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz
-
Процедирайте компресираните данни през
gzip
декомпресор в паметта.
-
Тъй като буферът за паметта се запълва с данни за "блок", ПИСМИ некомпресираните данни във файла
blah.tar
на диска и повторете, докато не се прочетат всички компресирани данни.
-
Прекратяване на връзката (изтриване) на файла
blah.tar.gz
Сега вече имаш
blah.tar
на диска, който е некомпресиран, но съдържа един или повече файлове в него с много ниска структура на данните. Размерът на файла вероятно еняколко байта по-голяма от сумата от всички данни за файла.
Ти бягаш:
tar xvf blah.tar
Това ще
-
ПРОЧЕТЕТЕ 2GB некомпресирано съдържание на данни от
blah.tar
и
tar
структурата на файловия формат, включително информация за файловите разрешения, имена на файлове, директории и др.
- ПИСМЕТЕ на диска 2GB данните плюс метаданните. Това включва: преобразуване на информацията за структурата на данните / метаданните в създаването на нови файлове и директории на диск, както и пренаписване на съществуващи файлове и директории с ново съдържание на данни.
Общите данни, които ние ПРОЧЕТИ от диска в този процес е 1GB (за gunzip) + 2GB (за катран) = 3GB.
Общите данни, които ние НАПИСАЛ до диска в този процес е 2GB (за gunzip) + 2GB (за катран) + няколко байта за метаданни = около 4GB.
Път 2
Ти имаш
blah.tar.gz
по един или друг начин.
Решавате да изпълните:
tar xvzf blah.tar.gz
Това ще
-
ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz
блок в даден момент, в паметта.
-
Процедирайте компресираните данни през
gzip
декомпресор в паметта.
-
Тъй като буферът на паметта се запълва, ще го направи тръба тези данни, в паметта, до
tar
файлов формат, който ще прочете информацията за метаданните и т.н. и данните за некомпресираните файлове.
-
Тъй като буферът за паметта се запълва в
tar
файла parser, той ще записва некомпресираните данни на диск, като създава файлове и директории и ги попълва с некомпресирано съдържание.
Общите данни, които ние ПРОЧЕТИ от диска в този процес е 1 GB компресирани данни, период.
Общите данни, които ние НАПИСАЛ до диска в този процес е 2 GB некомпресирани данни + няколко байта за метаданни = около 2 GB.
Ако забележите, размерът на дисковете I / O в Път 2 еидентичен към дисковия вход / изход, изпълняван от, да речем
Zip
или
7-Zip
програми, коригиране на всякакви разлики в съотношението на компресия.
И ако съотношението на компресия е вашето притеснение, използвайте
Xz
компресор за капсулиране
tar
и имате LZMA2'ed TAR архив, който е също толкова ефективен, колкото и най-модерния алгоритъм, с който разполага
7-Zip
:-)
Част 2: Характеристики
tar
съхранява разрешенията на UNIX в рамките на файловите си метаданни и е много добре познат и тестван за успешно опаковане на директория с различни видове разрешения, символни връзки и т.н. Има повече от няколко случая, в които може да се наложи да събирате множество файлове в един файл или поток, но не непременно да го компресирате (въпреки че компресията е полезна и често се използва).
Част 3: Съвместимост
Много инструменти се разпространяват в изходна или двоична форма като.tar.gz или.tar.bz2, защото това е файлов формат с най-малък общ знаменател: подобно на повечето потребители на Windows има достъп до.zip или.rar декомпресори, повечето Linux инсталации, дори и най-основните, ще имат достъп най-малко на катран и gunzip, без значение колко възрастен или по-ниски. Дори и фърмуерите на Android имат достъп до тези инструменти.
Новите проекти, насочени към аудитории, изпълняващи съвременни дистрибуции, могат много добре да се разпространяват в по-модерен формат, като например.tar.xz (използвайки компресирания формат Xz (LZMA), който компресира по-добре от gzip или bzip2) или.7z, файловите формати Zip или Rar, тъй като компресират и определят оформление за капсулиране на няколко файла в един файл.
Не виждате.7z да се използват по-често поради същата причина, че музиката не се продава от онлайн магазините за изтегляне в съвсем нови формати като Opus или видео в WebM. Съвместимост с хора, управляващи древни или много основни системи.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите.Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.