Hva er fordelen ved å bruke Tar-filformatet i dag?
Tar arkiveringsformatet er, i beregningsår, et veritabelt Metuselah, men det er fortsatt i stor grad i bruk i dag. Hva gjør tjæreformatet så nyttig lenge etter oppstarten?
Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.
Spørsmålet
SuperUser leser MarcusJ er nysgjerrig på tjæreformatet og hvorfor bruker vi det fortsatt etter alle disse årene:
Jeg vet at tjære ble laget for tape arkiver tilbake på dagen, men i dag har vi arkivfilformater som både aggregatfiler og utfører komprimering i samme logiske filformat.
spørsmål:
- Er det en ytelsesstraff under aggregering / kompresjon / dekompresjonstrinn for bruk av tjære innkapslet i gzip eller bzip2, sammenlignet med å bruke et filformat som gjør aggregering og komprimering i samme datastruktur? Anta at kjøretiden til kompressoren som sammenlignes er identisk (for eksempel gzip og deflate er like).
- Er det funksjoner i tarfilformatet som andre filformater, for eksempel .7z og .zip, ikke har?
- Siden tjære er et gammelt filformat og nyere filformater eksisterer i dag, hvorfor er tjære (enten innkapslet i gzip, bzip2 eller til og med den nye xz) som fortsatt er så mye brukt i dag på GNU / Linux, Android, BSD og andre slike UNIX operativsystemer, for filoverføringer, programkilde og binære nedlastinger, og noen ganger til og med som et pakkehåndteringsformat?
Det er et helt fornuftig spørsmål; så mye har endret seg i databehandlingsverdenen de siste tretti årene, men vi bruker fortsatt tarformatet. Hva er historien?
Svaret
SuperUser bidragsyter Allquixotic gir litt innsikt i tjæreformatets levetid og funksjonalitet:
Del 1: Ytelse
Her er en sammenligning av to separate arbeidsflyter og hva de gjør.
Du har en fil på disken
blah.tar.gz
som er 1 GB gzip-komprimerte data som, når de er ukomprimert, opptar 2 GB (slik at et komprimeringsforhold på 50%).Måten du ville opprette dette på, hvis du skulle arkivere og komprimere separat, ville være:
tar cf blah.tar filer ...
Dette ville resultere i
blah.tar
som bare er aggregering avfiler ...
i ukomprimert form.Da ville du gjøre det
gzip blah.tar
Dette ville lese innholdet av
blah.tar
fra disk, komprimere dem gjennom gzip-komprimeringsalgoritmen, skriv innholdet tilblah.tar.gz
, Deretter fjerner du (slett) filenblah.tar
.La oss dekomprimere nå!
Vei 1
Du har
blah.tar.gz
, på en eller annen måte.Du bestemmer deg for å kjøre:
gunzip blah.tar.gz
Dette vil
- LES 1GB komprimert data innhold av
blah.tar.gz
.- PROSESS de komprimerte dataene gjennom
gzip
dekompressor i minnet.- Siden minnesbufferen fyller opp med en "blokk" som er verdt data, SKRIV de ukomprimerte dataene inn i filen
blah.tar
på disk og gjenta til alle komprimerte data er lest.- Fjern koblingen (slett) filen
blah.tar.gz
.Nå har du
blah.tar
på disk, som er ukomprimert, men inneholder en eller flere filer i den, med svært lav datastruktur overhead. Filstørrelsen er sannsynligvis et par byte større enn summen av alle fildataene ville være.Du løper:
tar xvf blah.tar
Dette vil
- LES 2GB ukomprimert datainnhold av
blah.tar
ogtjære
filformatets datastrukturer, inkludert informasjon om filtillatelser, filnavn, kataloger, etc..- SKRIV til å diskere 2 GB data og metadataene. Dette innebærer: å oversette data struktur / metadata informasjon til å lage nye filer og kataloger på disk etter behov, eller omskrive eksisterende filer og kataloger med nytt datainnhold.
Den totale data vi LESE fra disk i denne prosessen var 1GB (for gunzip) + 2GB (for tjære) = 3GB.
Den totale data vi SKREV til disk i denne prosessen var 2 GB (for gunzip) + 2 GB (for tjære) + noen byte for metadata = ca 4 GB.
Vei 2
Du har
blah.tar.gz
, på en eller annen måte.Du bestemmer deg for å kjøre:
tar xvzf blah.tar.gz
Dette vil
- LES 1GB komprimert data innhold av
blah.tar.gz
, en blokk om gangen, til minne.- PROSESS de komprimerte dataene gjennom
gzip
dekompressor i minnet.- Når minnebufferen fylles opp, vil det rør disse dataene, i minnet, gjennom til
tjære
filformat parser, som vil lese informasjon om metadata etc. og de ukomprimerte fildataene.- Som minnebufferen fylles opp i
tjære
fil parser, vil den SKRIVE de ukomprimerte dataene til disk, ved å lage filer og kataloger og fylle dem opp med ukomprimert innhold.Den totale data vi LESE fra disk i denne prosessen var 1 GB komprimert data, periode.
Den totale data vi SKREV til disk i denne prosessen var 2 GB ukomprimert data + noen byte for metadata = ca 2 GB.
Hvis du merker, mengden av disk I / O i Vei 2 er identisk til disken I / O utført av, si
Glidelås
eller7-Zip
programmer, justering for eventuelle forskjeller i kompresjonsforhold.Og hvis kompresjonsforholdet er din bekymring, bruk
xz
kompressor til innkapslingtjære
, og du har LZMA2'ed TAR-arkiv, som er like effektiv som den mest avanserte algoritmen tilgjengelig for7-Zip
:-)Del 2: Funksjoner
tjære
lagrer UNIX-tillatelser i filmetadataene sine, og er meget kjent og testet for å kunne pakke opp en katalog med alle slags forskjellige tillatelser, symbolske lenker, osv. Det er flere enn noen få tilfeller der man kanskje trenger å spole en masse filer inn i en enkelt fil eller stream, men ikke nødvendigvis komprimere den (selv om komprimering er nyttig og ofte brukt).Del 3: Kompatibilitet
Mange verktøy distribueres i kilde eller binær form som .tar.gz eller .tar.bz2 fordi det er et "laveste fellesnævner" filformat: I likhet med de fleste Windows-brukere har tilgang til .zip eller .rar dekompressorer, de fleste Linux-installasjoner, selv de mest grunnleggende, vil ha tilgang til minst tjære og gunzip, uansett hvor gammel eller paret. Selv Android-firmware har tilgang til disse verktøyene.
Nye prosjekter som målretter publikum som kjører moderne distribusjoner, kan meget godt distribueres i et mer moderne format, for eksempel .tar.xz (ved hjelp av komprimeringsformatet Xz (LZMA), som komprimerer bedre enn gzip eller bzip2) eller .7z, noe som ligner på Zip- eller Rar-filformatene ved at det både komprimerer og spesifiserer en oppsett for innkapsling av flere filer til en enkelt fil.
Du ser ikke .7z brukt oftere av samme grunn at musikk ikke selges fra nettbutikkbutikker i helt nye formater som Opus, eller video i WebM. Kompatibilitet med folk som kjører gamle eller svært grunnleggende systemer.
Har du noe å legge til forklaringen? Lyde av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.