21Aug
Het teerarchiveringsformaat is, in de computertijd, een echte Methusalem, maar het wordt nog steeds zwaar gebruikt. Wat maakt het tar-formaat zo nuttig lang nadat het is opgestart?
De vraag van vandaag &Antwoord sessie komt naar ons met dank aan SuperUser-een onderverdeling van Stack Exchange, een community-gestuurde groepering van Q & A-websites.
De vraag
SuperUser-lezer MarcusJ is nieuwsgierig naar het tar-formaat en waarom we het na al die jaren nog steeds gebruiken:
Ik weet dat tar al in de loop van de dag werd gemaakt voor tape-archieven, maar vandaag hebben we archiefbestandsformaten die allebeiverzamel bestanden en voer compressie uit binnen dezelfde logische bestandsindeling.
Vragen:
- Bestaat er een prestatiestoring tijdens de aggregatie /compression/-decompressiestappen voor het gebruik van teer ingekapseld in gzip of bzip2, vergeleken met het gebruik van een bestandsindeling die aggregatie en compressie in dezelfde gegevensstructuur uitvoert? Stel dat de looptijd van de vergeleken compressor identiek is( bijvoorbeeld gzip en Deflate zijn vergelijkbaar).
- Zijn er functies van het tar-bestandsformaat die andere bestandsindelingen, zoals. 7z en. zip niet hebben?
- Aangezien tar zo'n oud bestandsformaat is, en er nieuwere bestandsformaten bestaan, waarom is tar( of het nu is ingekapseld in gzip, bzip2 of zelfs de nieuwe xz) tegenwoordig nog steeds zo veel gebruikt op GNU / Linux, Android, BSD en andere dergelijkeUNIX-besturingssystemen, voor bestandsoverdracht, programmabronnen en binaire downloads, en soms zelfs als een pakketbeheer-indeling?
Dat is een volkomen redelijke vraag;er is in de laatste dertig jaar zoveel veranderd in de computerwereld, maar we gebruiken nog steeds het tar-formaat. Wat is het verhaal?
Het antwoord
SuperUser-bijdrager Allquixotic biedt enig inzicht in de levensduur en functionaliteit van het tar-formaat:
Deel 1: prestaties
Hier volgt een vergelijking van twee afzonderlijke werkstromen en wat ze doen.
U hebt een bestand op schijf blah.tar.gz, dat wil zeggen 1 GB aan gzip gecomprimeerde gegevens die, wanneer ze niet worden gecomprimeerd, 2 GB in beslag nemen( dus een compressieverhouding van 50%).
De manier waarop u dit zou maken, als u apart zou archiveren en compressie zou doen, zou zijn:
tar cf blah.tar-bestanden. ..Dit zou resulteren in blah.tar, wat slechts een samenvoeging van de bestanden is. .in ongecomprimeerde vorm.
Dan zou je
gzip blah.tardoen. Dit zou de inhoud van blah.tar van schijf lezen, ze comprimeren met het gzip-compressiealgoritme, de inhoud schrijven naar blah.tar.gz en vervolgens ontkoppelen( verwijderen) van het bestand blah.teer.
Laten we nu decomprimeren!
Way 1
Je hebt blah.tar.gz op de een of andere manier.
U besluit om uit te voeren:
gunzip blah.tar.gzDit zal
- LEES de 1GB gecomprimeerde data-inhoud van blah.tar.gz.
- PROCES de gecomprimeerde gegevens via de gzip-decompressor in het geheugen.
- Aangezien de geheugenbuffer vol is met "een blok" aan gegevens, SCHRIJFT u de ongecomprimeerde gegevens in de fileblah.tar op schijf en herhaalt u totdat alle gecomprimeerde gegevens zijn gelezen.
- Ontkoppel( verwijder) het bestand blah.tar.gz.
Nu heb je blah.tar op schijf, die niet is gecomprimeerd, maar een of meer bestanden bevat, met een zeer lage datastructuur. De bestandsgrootte is waarschijnlijk een paar bytes groter dan de som van alle bestandsgegevens.
U voert:
tar xvf blah.taruit.
- LEES de 2 GB niet-gecomprimeerde gegevensinhoud van de gegevensstructuren van blah.tar en het tar-bestandsformaat, inclusief informatie over bestandsmachtigingen, bestandsnamen, mappen, enz.
- WRITE op schijfde 2 GB aan data plus de metadata. Dit houdt in: het vertalen van de datastructuur / metadata-informatie naar het aanmaken van nieuwe bestanden en mappen op de juiste schijf, of het herschrijven van bestaande bestanden en mappen met nieuwe data-inhoud.
De totale gegevens die we READ van schijf in dit proces hebben, waren 1 GB( voor gunzip) + 2 GB( voor tar) = 3 GB.
De totale gegevens die we WROTE naar schijf in dit proces hadden, waren 2 GB( voor gunzip) + 2 GB( voor tar) + enkele bytes voor metadata = ongeveer 4 GB.
Way 2
Je hebt blah.tar.gz, op één of andere manier.
U besluit om uit te voeren:
tar xvzf blah.tar.gzDit zal
- de 1GB gecomprimeerde data-inhoud van blah.tar.gz lezen, een blok tegelijk, in het geheugen.
- PROCES de gecomprimeerde gegevens via de gzip-decompressor in het geheugen.
- Terwijl de geheugenbuffer vol raakt, zal die gegevens doorsturen, in het geheugen, naar de tar bestandsformaat parser, die de informatie over metadata, etc. en de ongecomprimeerde bestandsgegevens zal lezen.
- Naarmate de geheugenbuffer voller wordt in de tar-bestandsparser, zal het de ongecomprimeerde gegevens naar schijf SCHRIJVEN, door bestanden en mappen te maken en ze te vullen met de niet-gecomprimeerde inhoud.
De totale gegevens die we READ van schijf in dit proces was 1 GB gecomprimeerde gegevens, punt.
De totale gegevens die we naar schijf WDRTE in dit proces was 2 GB ongecomprimeerde gegevens + enkele bytes voor metadata = ongeveer 2 GB.
Als u opmerkt, is de hoeveelheid schijf-I / O in Way 2 gelijk aan voor de schijf-I / O uitgevoerd door, laten we zeggen, de Zip- of 7-Zip-programma's, het aanpassen van eventuele verschillen in compressieverhouding.
En als compressieverhouding uw zorg is, gebruik dan de Xz-compressor om tar te encapsuleren, en u hebt het LZMA2'ed TAR-archief, dat net zo efficiënt is als het meest geavanceerde algoritme dat beschikbaar is voor 7-Zip: -)
Deel 2: Functies
tar slaat UNIX-machtigingen op binnen de metadata van het bestand en is zeer bekend en getest voor het succesvol inpakken van een directory met allerlei verschillende machtigingen, symbolische koppelingen, enz. Er zijn meer dan een paar gevallen waarin men een aantal bestanden glob moet hebbenin een enkel bestand of stream, maar niet noodzakelijkerwijs comprimeren( hoewel compressie nuttig is en vaak wordt gebruikt).
Deel 3: Compatibiliteit
Veel tools worden gedistribueerd in bron- of binaire vorm als. tar.gz of. tar.bz2 omdat het een "kleinste gemene deler" bestandsindeling is: net zoals de meeste Windows-gebruikers toegang hebben tot. zip of. rardecompressors, zullen de meeste Linux-installaties, zelfs de meest eenvoudige, toegang hebben tot ten minste teer en pistoolzip, ongeacht hoe oud of afgezwakt. Zelfs Android-firmwares hebben toegang tot deze tools.
Nieuwe projecten die zijn gericht op doelgroepen met moderne distributies kunnen zeer goed worden gedistribueerd in een moderner formaat, zoals. tar.xz( met behulp van het Xz( LZMA) compressieformaat, dat beter comprimeert dan gzip of bzip2), of. 7z, dat vergelijkbaar isnaar de Zip- of Rar-bestandsformaten in die zin dat het zowel een lay-out comprimeert als specificeert voor het inkapselen van meerdere bestanden in een enkel bestand.
U gebruikt. 7z niet vaker om dezelfde reden dat muziek niet wordt verkocht via online downloadwinkels in gloednieuwe indelingen zoals Opus of video in WebM.Compatibiliteit met mensen met oude of zeer basale systemen.
Heeft u iets toe te voegen aan de uitleg? Geluid uit in de opmerkingen. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk de volledige discussiethread hier.