/ / Hvad er fordelen ved at bruge tjærefilformatet i dag?

Hvad er fordelen ved at bruge tjærefilformatet i dag?


Tarearkiveringsformatet er i beregningsår en veritabel Methuselah, men den er stadig i kraftig brug i dag. Hvad gør tjæreformatet så nyttigt længe efter starten?

Dagens spørgsmål & svar-session kommer til os med tilladelse fra SuperUser - en underafdeling af Stack Exchange, en samfundsdrevet gruppe af spørgsmål og svar på websteder.

Spørgsmålet

SuperUser-læser MarcusJ er nysgerrig efter tjæreformatet, og hvorfor vi stadig bruger det efter alle disse år:

Jeg ved, at der blev lavet tjære til båndarkiver tilbage i dag, men i dag har vi arkivfilformater, der både aggregerer filer og udfører komprimering i det samme logiske filformat.

spørgsmål:

  • Er der en præstationsstraf i løbet afaggregering / komprimering / dekomprimeringstrin til brug af tjære indkapslet i gzip eller bzip2, sammenlignet med at bruge et filformat, der gør aggregering og komprimering i den samme datastruktur? Antag, at kompressorens sammenligningstid er identisk (f.eks. Gzip og Deflate er ens).
  • Er der funktioner i tar-filformatet, som andre filformater, f.eks. 7z og .zip ikke har?
  • Da tar er sådan et gammelt filformat og nyerefilformater findes i dag, hvorfor er tjære (hvad enten de er indkapslet i gzip, bzip2 eller endda den nye xz) stadig så udbredte i dag på GNU / Linux, Android, BSD og andre sådanne UNIX-operativsystemer, til filoverførsler, programkilde og binære downloads, og nogle gange endda som et pakkehåndteringsformat?

Det er et helt rimeligt spørgsmål; så meget er ændret i databehandlingsverdenen i de sidste tredive år, men vi bruger stadig tjæreformatet. Hvad er historien?

Svaret

SuperUser-bidragyder Allquixotic tilbyder en vis indsigt i tjæreformatets levetid og funktionalitet:

Del 1: Ydeevne

Her er en sammenligning af to separate arbejdsgange og hvad de gør.

Du har en fil på disken blah.tar.gz hvilket er 1 GB gzip-komprimerede data, der, når de ikke er komprimeret, optager 2 GB (så et komprimeringsforhold på 50%).

Den måde, du ville oprette dette på, hvis du skulle arkivere og komprimere hver for sig, ville være:

tar cf blah.tar files ...

Dette ville resultere i blah.tar hvilket kun er en sammenlægning af files ... i ukomprimeret form.

Så ville du gøre det

gzip blah.tar

Dette vil læse indholdet af blah.tar fra disk, komprimere dem gennem gzip-komprimeringsalgoritmen, skriv indholdet til blah.tar.gz, fjern derefter linket fra (slet) filen blah.tar.

Lad os dekomprimere!

Måde 1

Du har blah.tar.gz, på den ene eller anden måde.

Du beslutter at køre:

gunzip blah.tar.gz

Dette vil

  • LÆS 1 GB komprimeret dataindhold på blah.tar.gz.
  • PROCESS de komprimerede data gennem gzip dekompressor i hukommelsen.
  • Når hukommelsesbufferen fyldes med "en blok" -værdi af data, SKRIV de ukomprimerede data i filenblah.tar på disken og gentag, indtil alle de komprimerede data er læst.
  • Fjern linket (slet) filen blah.tar.gz.

Nu har du det blah.tar på disk, som er ukomprimeret, men indeholder en eller flere filer inde i den, med meget lav datastruktur overhead. Filstørrelsen er sandsynligvis et par bytes større end summen af ​​alle fildata ville være.

Du løber:

tar xvf blah.tar

Dette vil

  • LÆS 2 GB ukomprimeret dataindhold på blah.tar og tar filformatets datastrukturer, herunder oplysninger om filtilladelser, filnavne, mapper osv.
  • SKRIV til disk 2GB af data plus metadata. Dette indebærer: oversættelse af datastrukturen / metadatainformationen til oprettelse af nye filer og mapper på disken efter behov, eller omskrivning af eksisterende filer og mapper med nyt dataindhold.

De samlede data vi LÆS fra disk i denne proces var 1 GB (for pistol) + 2 GB (for tjære) = 3 GB.

De samlede data vi SKREV til disk i denne proces var 2 GB (for pistol) + 2 GB (for tjære) + et par byte til metadata = ca. 4 GB.

Måde 2

Du har blah.tar.gz, på den ene eller anden måde.

Du beslutter at køre:

tar xvzf blah.tar.gz

Dette vil

  • LÆS 1 GB komprimeret dataindhold på blah.tar.gz, en blok ad gangen i hukommelsen.
  • PROCESS de komprimerede data gennem gzip dekompressor i hukommelsen.
  • Når hukommelsesbufferen fyldes op, gør den det rør disse data i hukommelsen til tar filformatparser, der vil læse oplysningerne om metadata osv. og de ukomprimerede fildata.
  • Når hukommelsesbufferen udfyldes i tar fil parser, vil det skrive de ukomprimerede data til disken ved at oprette filer og mapper og udfylde dem med det ukomprimerede indhold.

De samlede data vi LÆS fra disk i denne proces var 1 GB komprimerede data, periode.

De samlede data vi SKREV til disk i denne proces var 2 GB ukomprimeret data + et par byte til metadata = ca. 2 GB.

Hvis du bemærker det, er mængden af ​​disk I / O i Måde 2 er identisk til disken I / O udført af, siger, the Zip eller7-Zip programmer, justering for eventuelle forskelle i kompressionsforhold.

Og hvis komprimeringsforholdet er din bekymring, skal du bruge Xz kompressor til indkapsling tar, og du har LZMA2'et TAR-arkiv, som er lige så effektiv som den mest avancerede algoritme, der er tilgængelig for 7-Zip :-)

Del 2: Funktioner

tar gemmer UNIX-tilladelser i dets filmetadata,og er meget velkendt og testet for vellykket pakning af et bibliotek med alle slags forskellige tilladelser, symboliske links osv. Der er mere end et par tilfælde, hvor man muligvis har behov for at samle en masse filer i en enkelt fil eller stream, men ikke komprimerer det nødvendigvis (selvom komprimering er nyttigt og ofte brugt).

Del 3: Kompatibilitet

Mange værktøjer distribueres i kilde eller binærtform som .tar.gz eller .tar.bz2, fordi det er et "laveste fællesnævner" -filformat: ligesom de fleste Windows-brugere har adgang til .zip- eller .rar-dekompressorer, de fleste Linux-installationer, selv de mest basale, har adgang til i det mindste tjære og pistol, uanset hvor gammel eller pared. Selv Android-firmwares har adgang til disse værktøjer.

Nye projekter rettet mod moderne publikumdistributioner kan meget vel distribuere i et mere moderne format, såsom .tar.xz (ved hjælp af Xz (LZMA) -kompressionsformat, som komprimerer bedre end gzip eller bzip2), eller .7z, der ligner Zip- eller Rar-filformaterne ved at det både komprimerer og specificerer et layout til indkapsling af flere filer til en enkelt fil.

Du kan ikke se det.7z bruges oftere af den samme grund, at musik ikke sælges fra online download-butikker i helt nye formater som Opus eller video i WebM. Kompatibilitet med mennesker, der kører gamle eller meget basale systemer.


Har du noget at tilføje til forklaringen? Lyd fra i kommentarerne. Vil du læse flere svar fra andre teknisk-erfarne Stack Exchange-brugere? Se den fulde diskussionstråd her.