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å tarformatet og hvorfor bruker vi det fortsatt etter alle disse årene:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
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 levetidets levetid og funksjonalitet:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
det vil si 1 GB gzip-komprimerte data som, når de er ukomprimert, opptar 2 GB (så 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 files …
Dette ville resultere i
blah.tar
som bare er aggregering av
files …
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 til
blah.tar.gz
deretter fjern koblingen (slett) filen
blah.tar
Nå, la oss dekomprimere!
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.
-
Som minnesbufferen fyller opp med "en blokk" verdt data, SKRIVER 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 sannsynligviset 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
og
tar
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 2GB (for gunzip) + 2GB (for tjære) + noen byte for metadata = ca 4GB.
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, til og med
tar
filformat parser, som vil lese informasjon om metadata, etc. og de ukomprimerte fildataene.
-
Når minnebufferen fylles opp i
tar
fil parser, vil den SKRIVE de ukomprimerte dataene til disk, ved å lage filer og kataloger og fylle dem opp med det ukomprimerte innholdet.
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, hvor mye disk I / O i Vei 2 eridentisk til disken I / O utført av, si
Zip
eller
7-Zip
programmer, justering for eventuelle forskjeller i kompresjonsforhold.
Og hvis kompresjonsforholdet er din bekymring, bruk
Xz
kompressor for å innkapsles
tar
og du har LZMA2'ed TAR-arkiv, som er like effektiv som den mest avanserte algoritmen tilgjengelig for
7-Zip
:-)
Del 2: Funksjoner
tar
lagrer UNIX-tillatelser innenfor filmetadataene sine, og er meget kjent og testet for å kunne pakke opp en katalog med alle slags forskjellige tillatelser, symbolske koblinger etc. 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 fellesnevner" 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 pared. 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, 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 som musikk ikke selges fra online nedlastingsbutikker 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.