Startpagina » hoe » Wat is het voordeel van het gebruik van het bestandstarget vandaag?

    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 de bestanden ...  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 naar blah.tar.gz, ontkoppel (verwijder) vervolgens het bestand blah.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 bestandblah.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 de teer 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 kapselen teer, en je hebt het LZMA2'ed TAR-archief, dat net zo efficiënt is als het meest geavanceerde algoritme dat beschikbaar is 7-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.