21Aug
Tar arkiveringsformat är, under beräkningsår, ett verkligt Metuselah men det används fortfarande idag. Vad gör tjärformatet så användbart långt efter starten?
Dagens fråga &Svarssession 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ärformatet och varför använder vi det fortfarande efter alla år:
Jag vet att tjära gjordes för tejparkiv tillbaka på dagen, men idag har vi arkivfilformat som bådaaggregerade filer och utföra komprimering inom samma logiska filformat.
Frågor:
- Finns det ett prestationsstraff vid aggregering av /compression/-dekompressionssteg för användning av tjära inkapslade 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, som. 7z och. zip inte har?
- Eftersom tjära är ett så gammalt filformat och det finns nyare filformat idag, varför är tjära( oavsett om den är inkapslad 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ådanaUNIX-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 ger viss insikt om 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å skivan blah.tar.gz, det vill säga 1 GB gzip-komprimerad data som vid okomprimering upptar 2 GB( så ett komprimeringsförhållande på 50%).
Sättet som du skulle skapa här, om du skulle göra arkivering och komprimering separat, skulle vara:
tar cf blah.tar-filer. ..Detta skulle resultera i blah.tar vilket bara är en samling av filerna. .i okomprimerad form.
Då skulle du göra
gzip blah.tarDetta skulle läsa innehållet i blah.tar från disken, komprimera dem genom gzip-komprimeringsalgoritmen, skriv innehållet till blah.tar.gz, och länka sedan bort filen blah.tjära.
Nu, låt oss dekomprimera!
Way 1
Du har blah.tar.gz, på ett eller annat sätt.
Du bestämmer dig för att köra:
gunzip blah.tar.gzDetta kommer att
- läsa 1GB komprimerade datainnehållet av blah.tar.gz.
- PROCESS den komprimerade data genom gzip-dekompressorn i minnet.
- Eftersom minnesbufferten fyller upp med ett "block" värde av data, SKRIVA den okomprimerade data till fileblah.tar på disken och upprepa tills alla komprimerade data läses.
- Unlink( 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 kör:
tar xvf blah.tarDetta kommer att
- läsa 2GB okomprimerat datainnehåll i blah.tar och tarfilformatets datastrukturer, inklusive information om filbehörigheter, filnamn, kataloger etc.
- WRITE till disk2GB data plus metadata. Det innebär att: översätt data struktur / metadata information till att skapa nya filer och kataloger på disken som passande, eller skriva om befintliga filer och kataloger med nytt datainnehåll.
Den totala data som vi LÄS från disken i denna process var 1GB( för gunzip) + 2GB( för tjära) = 3GB.
Den totala data vi WROTE 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 köra:
tar xvzf blah.tar.gzDetta kommer
- LÄS 1GB-komprimerad datainnehåll av blah.tar.gz, ett block i taget, till minnet.
- PROCESS den komprimerade data genom gzip-dekompressorn i minnet.
- När minnesbufferten fylls upp, kommer det -röret att data, i minnet, till tar-filformatparsern, som kommer att läsa informationen om metadata etc. och den okomprimerade fildatan.
- Eftersom minnesbufferten fylls i tarfilsparsaren SKRIVAR den okomprimerad data till disken genom att skapa filer och kataloger och fylla i dem med okomprimerade innehåll.
Den totala data som vi LÄS från disken i denna process var 1GB komprimerad data, period.
Den totala data vi WROTE till disk i denna process var 2 GB okomprimerad data + några byte för metadata = ca 2 GB.
Om du märker är mängden skiva I / O i Way 2 identisk till skivan I / O utförd av Zip or7-Zip-programmen, vilket justerar för eventuella skillnader i kompressionsförhållandet.
Och om kompressionsförhållandet är ditt problem, använd Xz-kompressorn för att kapsla tjära, och du har LZMA2'ed TAR-arkiv, vilket är lika effektivt som den mest avancerade algoritmen som är tillgänglig för 7-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 få fall där man kan behöva globa en massa filertill 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äll 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. rardekompressorer, de flesta Linux-installationer, även de mest grundläggande, kommer att ha åtkomst 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 kör 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 är liknandetill filformatet Zip eller Rar, eftersom 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 personer som kör gamla eller mycket 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.