Wat is het voordeel van het gebruik van het bestandstarget vandaag?
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 Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep 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 tijd werd gebruikt voor tape-archieven, maar vandaag hebben we archiefbestandsformaten die zowel bestanden samenvoegen als compressie uitvoeren binnen hetzelfde logische bestandsformaat.
vragen:
- Bestaat er een prestatievergoeding tijdens de aggregatie / compressie / decompressiestadia voor het gebruik van teer ingekapseld in gzip of bzip2 in vergelijking 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?
- Omdat 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 dergelijke UNIX besturingssystemen, voor bestandsoverdracht, programmabronnen en binaire downloads, en soms zelfs als een pakketbeheerindeling?
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 is een vergelijking van twee afzonderlijke workflows en wat ze doen.
Je hebt een bestand op schijf
blah.tar.gz
dat wil zeggen, 1 GB aan gzip gecomprimeerde data die, wanneer deze niet gecomprimeerd is, 2 GB in beslag neemt (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
dat is slechts een samenvoeging van debestanden ...
in niet-gecomprimeerde vorm.Dan zou je doen
gzip blah.tar
Dit zou de inhoud van lezen
blah.tar
van schijf, comprimeer ze via het gzip-compressie-algoritme, schrijf de inhoud naarblah.tar.gz
, ontkoppel (verwijder) vervolgens het bestandblah.tar
.Laten we het decomprimeren!
Weg 1
Jij hebt
blah.tar.gz
, op een of andere manier.U besluit om te lopen:
gunzip blah.tar.gz
Dit 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 het bestand
blah.tar
op schijf en herhaal 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 overhead van de gegevensstructuur. De bestandsgrootte is waarschijnlijk een paar bytes groter dan de som van alle bestandsgegevens zou zijn.Jij rent:
tar xvf blah.tar
Dit zal
- LEES de 2GB niet-gecomprimeerde data-inhoud van
blah.tar
en deteer
bestandsstructuren van gegevensstructuren, inclusief informatie over bestandsmachtigingen, bestandsnamen, mappen, enz.- SCHRIJF om de 2GB aan data plus de metadata te schijven. Dit houdt in: het vertalen van de gegevensstructuur / metadata-informatie naar het aanmaken van nieuwe bestanden en mappen op schijf, naargelang geschikt, of het herschrijven van bestaande bestanden en mappen met nieuwe gegevensinhoud.
De totale gegevens die we hebben LEZEN van schijf in dit proces was 1 GB (voor gunzip) + 2 GB (voor tar) = 3 GB.
De totale gegevens die we hebben GESCHREVEN naar schijf in dit proces was 2 GB (voor gunzip) + 2 GB (voor tar) + enkele bytes voor metadata = ongeveer 4 GB.
Manier 2
Jij hebt
blah.tar.gz
, op een of andere manier.U besluit om te lopen:
tar xvzf blah.tar.gz
Dit zal
- LEES de 1GB gecomprimeerde data-inhoud van
blah.tar.gz
, een blok tegelijk, in het geheugen.- PROCES de gecomprimeerde gegevens via de
gzip
decompressor in het geheugen.- Naarmate de geheugenbuffer vol raakt, zal het gebeuren pijp die gegevens, in het geheugen, door naar de
teer
bestandsindeling parser, die de informatie over metadata, etc. en de niet-gecomprimeerde bestandsgegevens zal lezen.- Terwijl de geheugenbuffer vol raakt in de
teer
bestandsparser, zal het de ongecomprimeerde gegevens SCHRIJVEN naar schijf, door bestanden en mappen te maken en ze te vullen met de ongecomprimeerde inhoud.De totale gegevens die we hebben LEZEN van schijf in dit proces was 1 GB gecomprimeerde gegevens, periode.
De totale gegevens die we hebben GESCHREVEN naar schijf in dit proces was 2 GB ongecomprimeerde gegevens + een paar bytes voor metadata = ongeveer 2 GB.
Als u merkt, de hoeveelheid schijf-I / O in Manier 2 is identiek naar de schijf I / O uitgevoerd door, laten we zeggen, de
ritssluiting
of7-Zip
programma's, aanpassen voor eventuele verschillen in compressieverhouding.En als de compressieratio uw zorg is, gebruik dan de
xz
compressor om in te kapselenteer
, en je hebt het LZMA2'ed TAR-archief, dat net zo efficiënt is als het meest geavanceerde algoritme dat beschikbaar is7-Zip
:-)Deel 2: Functies
teer
slaat UNIX-machtigingen op in zijn bestandsmetadata, en is zeer bekend en getest voor het succesvol inpakken van een map met allerlei verschillende machtigingen, symbolische koppelingen, enz. Er zijn meer dan een paar gevallen waarin men een aantal bestanden glob een enkel bestand of een enkele stroom, 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 .rar decompressors, de meeste Linux-installaties, zelfs de meest elementaire, zal toegang hebben tot ten minste teer en gunzip, ongeacht hoe oud of beschaafd. 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, wat vergelijkbaar is met de Zip- of Rar-bestandsindelingen waarin het zowel comprimeert als een lay-out specificeert voor het inkapselen van meerdere bestanden in een enkel bestand.
Je ziet .7z niet vaker gebruiken 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.
Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.