Vad är fördelen med att använda Tar-filformatet idag?
Tar arkiveringsformat är, under beräkningsår, ett verkligt Metuselah men det är fortfarande i stor utsträckning idag. Vad gör tjärformatet så användbart långt efter starten?
Dagens Question & Answer-session kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsaren MarcusJ är nyfiken på tjärformat och varför använder vi fortfarande det efter alla dessa år:
Jag vet att tjära gjordes för tejparkiv tillbaka på dagen, men idag har vi arkivfilformat som både aggregatfiler och komprimering i samma logiska filformat.
frågor:
- Finns det en prestationsstraff under aggregering / komprimering / dekomprimeringssteg för att använda tjärkapslet i gzip eller bzip2, jämfört med att använda ett filformat som gör aggregering och komprimering i samma datastruktur? Antag att runtime för kompressorn som jämförs är identisk (t ex gzip och deflat är liknande).
- Finns det funktioner i tjärfilformat som andra filformat, t.ex. .7z och .zip inte har?
- Eftersom tjära är ett gammalt filformat och det finns nyare filformat idag, varför är tjära (oavsett om det är inkapslat i gzip, bzip2 eller till och med den nya xz) som fortfarande används så mycket idag i GNU / Linux, Android, BSD och andra sådana UNIX operativsystem, för filöverföringar, programkällor och binära nedladdningar, och ibland även som paketformatformat?
Det är en helt rimlig fråga. så mycket har förändrats i datorvärlden de senaste trettio åren men vi använder fortfarande tjärformatet. Vad är historien?
Svaret
SuperUser-bidragsgivaren Allquixotic erbjuder viss inblick i tjärformatets livslängd och funktionalitet:
Del 1: Prestanda
Här är en jämförelse av två separata arbetsflöden och vad de gör.
Du har en fil på disken
blah.tar.gz
det vill säga 1 GB gzip-komprimerad data som vid okomprimering upptar 2 GB (så ett kompressionsförhållande på 50%).Det sätt på vilket du skulle skapa detta, om du skulle göra arkivering och komprimering separat, skulle vara:
tjära cf blah.tar-filer ...
Detta skulle resultera i
blah.tar
vilket är enbart aggregering avfiler ...
i okomprimerad form.Då skulle du göra det
gzip blah.tar
Detta skulle läsa innehållet i
blah.tar
från disken, komprimera dem genom gzip-komprimeringsalgoritmen, skriv innehållet tillblah.tar.gz
, Lossa sedan bort filen (ta bort)blah.tar
.Nu, låt oss dekomprimera!
Väg 1
Du har
blah.tar.gz
, på ett eller annat sätt.Du bestämmer dig för att springa:
gunzip blah.tar.gz
Det här kommer att
- LÄS 1GB: s komprimerade datainnehåll på
blah.tar.gz
.- PROCESS den komprimerade data genom
gzip
dekompressor i minnet.- Eftersom minnesbufferten fyller upp med "ett block" värde av data, SKRIVA de okomprimerade data till filen
blah.tar
på disken och upprepa tills alla komprimerade data är lästa.- Ta bort länken (ta bort) filen
blah.tar.gz
.Nu har du
blah.tar
på disk, som är okomprimerad men innehåller en eller flera filer i den med mycket låg datastrukturkostnad. Filstorleken är förmodligen ett par byte större än summan av alla fildata skulle vara.Du springer:
tjära xvf blah.tar
Det här kommer att
- LÄS 2GB okomprimerade datainnehåll av
blah.tar
och dentjära
filformatets datastrukturer, inklusive information om filbehörigheter, filnamn, kataloger, etc..- SKRIV för att skiva 2GB data plus metadata. Det innebär att: översätta datastruktur / metadatainformation till att skapa nya filer och kataloger på disk efter behov, eller omskriva befintliga filer och kataloger med nytt datainnehåll.
Den totala data vi LÄSA från disken i denna process var 1GB (för gunzip) + 2GB (för tjära) = 3GB.
Den totala data vi SKREV till disk i denna process var 2GB (för gunzip) + 2GB (för tjära) + några byte för metadata = ca 4GB.
Väg 2
Du har
blah.tar.gz
, på ett eller annat sätt.Du bestämmer dig för att springa:
tjära xvzf blah.tar.gz
Det här kommer att
- LÄS 1GB: s komprimerade datainnehåll på
blah.tar.gz
, ett block i taget, till minnet.- PROCESS den komprimerade data genom
gzip
dekompressor i minnet.- När minnesbufferten fylls upp, kommer det att rör den data, i minnet, till och med
tjära
filformatparser, som läser informationen om metadata etc. och den okomprimerade fildatan.- När minnesbufferten fylls i
tjära
filparser SKRIVAR den okomprimerade data till disken genom att skapa filer och kataloger och fylla i dem med okomprimerat innehåll.Den totala data vi LÄSA från disken i denna process var 1 GB komprimerad data, period.
Den totala data vi SKREV till disk i denna process var 2 GB okomprimerad data + några byte för metadata = ca 2 GB.
Om du märker, mängden skiva I / O i Väg 2 är identisk till disken I / O utförd av, säg
Blixtlås
eller7-Zip
program, justering för eventuella skillnader i kompressionsförhållande.Och om kompressionsförhållandet är ditt problem, använd
XZ
kompressorn för inkapslingtjära
, och du har LZMA2'ed TAR-arkiv, vilket är lika effektivt som den mest avancerade algoritmen tillgänglig för7-Zip
:-)Del 2: Funktioner
tjära
lagrar UNIX-behörigheter inom sin filmetadata och är mycket välkänd och testad för att framgångsrikt packa upp en katalog med alla möjliga olika behörigheter, symboliska länkar etc. Det finns mer än några exempel där man kan behöva globa en massa filer i en enda fil eller ström, men komprimerar inte nödvändigtvis det (även om komprimering är användbar och ofta används).Del 3: Kompatibilitet
Många verktyg distribueras i källa eller binär form som .tar.gz eller .tar.bz2 eftersom det är ett "lägsta gemensamma nämnare" filformat: precis som de flesta Windows-användare har tillgång till .zip eller .rar dekompressorer, de flesta Linux-installationer, även de mest grundläggande, kommer att ha tillgång till åtminstone tjära och gunzip, oavsett hur gammal eller pared. Även Android-firmware har tillgång till dessa verktyg.
Nya projekt riktade mot publiken som driver moderna distributioner kan mycket väl fördelas i ett mer modernt format, till exempel .tar.xz (med komprimeringsformatet Xz (LZMA), vilket komprimerar bättre än gzip eller bzip2) eller .7z, vilket liknar Zip- eller Rar-filformatet genom att det både komprimerar och anger en layout för inkapsling av flera filer i en enda fil.
Du kan inte se .7z används oftare av samma anledning att musik inte säljs från onlinehämtningsbutiker i helt nya format som Opus eller video i WebM. Kompatibilitet med människor som kör gamla eller väldigt grundläggande system.
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.