
Графичният архивиращ формат е в изчислителните години истински металус, но все още е в тежка употреба днес. Какво прави така, че формата на катран да е толкова полезен дълго след създаването му?
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Reader на SuperUser MarcusJ е любопитен за формата на катран и защо продължава да го използва след всички тези години:
Знам, че катранът е направен за ленти архиви през деня, но днес имаме архивни файлови формати, които обединяват файлове и изпълняват компресия в същия логически файлов формат.
въпроси:
- Има ли наказание за ефективността по време на етапите на агрегиране / компресия / декомпресия за използване на капсулиран в gzip или bzip2 тар, в сравнение с използването на файлов формат, който обединява и компресира в една и съща структура от данни? Да приемем, че времето на изпълнение на компресора, което се сравнява, е идентично (например gzip и Deflate са подобни).
- Има ли функции на файла с формат tar, че други файлови формати, като например .7z и .zip, нямат?
- Тъй като катранът е такъв стар формат на файла и по-новите файлови формати съществуват днес, защо е тарг (независимо дали е капсулиран в gzip, bzip2 или дори в новия xz) все още толкова широко използван днес в GNU / Linux, Android, BSD и други UNIX операционни системи, за прехвърляне на файлове, изтегляне на програми и бинарни файлове, а понякога и като формат за мениджър на пакети?
Това е съвсем разумен въпрос; толкова много се е променило в изчислителния свят през последните тридесет години, но все още използваме формата на катран. Каква е историята?
Сътрудникът на SuperUser Allquixotic предлага известно разбиране за дълголетието и функционалността на формата на катран:
Част 1: Изпълнение
Ето едно сравнение на два отделни работни потока и какво правят.
Имате файл на диск
blah.tar.gzкоето е, да речем, 1 GB от gzip-компресирани данни, които при некомпресиране заемат 2 GB (така че съотношението на компресия е 50%).Начинът, по който бихте създали това, ако искате да архивирате и компресирате поотделно, ще бъде:
tar cf blah.tar файлове ...Това би довело до
blah.tarкоето е просто обобщаване нафайлове ...в некомпресирана форма.Тогава ще го направите
gzip blah.tarТова ще прочете съдържанието на
blah.tarот диска, ги компресирайте чрез алгоритъма за компресия на gzip, напишете съдържаниетоblah.tar.gz, след което прекратете връзката (изтрийте) файлаblah.tar.Сега, нека декомпресираме!
Път 1
Ти имаш
blah.tar.gz, по един или друг начин.Решавате да изпълните:
gunzip blah.tar.gzТова ще
- ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz.- Процедирайте компресираните данни през
софтуернадекомпресор в паметта.- Тъй като буферът за паметта се запълва с данни за "блок", ПИСМИ некомпресираните данни във файла
blah.tarна диска и повторете, докато не се прочетат всички компресирани данни.- Прекратяване на връзката (изтриване) на файла
blah.tar.gz.Сега вече имаш
blah.tarна диска, който е некомпресиран, но съдържа един или повече файлове в него с много ниска структура на данните. Размерът на файла вероятно еняколко байта по-голяма от сумата от всички данни за файла.Ти бягаш:
tar xvf blah.tarТова ще
- ПРОЧЕТЕТЕ 2GB некомпресирано съдържание на данни от
blah.tarикатранструктурата на файловия формат, включително информация за файловите разрешения, имена на файлове, директории и др.- ПИСМЕТЕ на диска 2GB данните плюс метаданните. Това включва: преобразуване на информацията за структурата на данните / метаданните в създаването на нови файлове и директории на диск, както и пренаписване на съществуващи файлове и директории с ново съдържание на данни.
Общите данни, които ниеПРОЧЕТИ от диска в този процес е 1GB (за gunzip) + 2GB (за катран) = 3GB.
Общите данни, които ниеНАПИСАЛ до диска в този процес е 2GB (за gunzip) + 2GB (за катран) + няколко байта за метаданни = около 4GB.
Път 2
Ти имаш
blah.tar.gz, по един или друг начин.Решавате да изпълните:
tar xvzf blah.tar.gzТова ще
- ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz, блок в даден момент, в паметта.- Процедирайте компресираните данни през
софтуернадекомпресор в паметта.- Тъй като буферът на паметта се запълва, ще го направитръба тези данни, в паметта, до
катранфайлов формат, който ще прочете информацията за метаданните и т.н. и данните за некомпресираните файлове.- Тъй като буферът за паметта се запълва в
катранфайла parser, той ще записва некомпресираните данни на диск, като създава файлове и директории и ги попълва с некомпресирано съдържание.Общите данни, които ниеПРОЧЕТИ от диска в този процес е 1 GB компресирани данни, период.
Общите данни, които ниеНАПИСАЛ до диска в този процес е 2 GB некомпресирани данни + няколко байта за метаданни = около 2 GB.
Ако забележите, размерът на дисковете I / O вПът 2 еидентичен към дисковия вход / изход, изпълняван от, да речем
ципили7-Zipпрограми, коригиране на всякакви разлики в съотношението на компресия.И ако съотношението на компресия е вашето притеснение, използвайте
XZкомпресор за капсулиранекатран, и имате LZMA2'ed TAR архив, който е също толкова ефективен, колкото и най-модерния алгоритъм, с който разполага7-Zip:-)Част 2: Характеристики
катрансъхранява разрешенията на 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? Вижте цялата тема на дискусията тук.