Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.
Jautājums
SuperUser lasītājs MarcusJ ir interesanti par tar formātu un kāpēc mēs to joprojām izmantojam pēc visiem šiem gadiem:
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?
Tas ir pilnīgi saprātīgs jautājums; pēdējos trīsdesmit gados tik daudz ir mainījusies skaitļošanas pasaulē, bet mēs joprojām izmantojam tar formātu. Kāds ir stāsts?
Atbilde
SuperUser veicinātājs Allquixotic piedāvā kādu ieskatu tar formāta ilgmūžībā un funkcionalitātē:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
proti, 1 GB gzip-saspiestu datu, kas, nesaspiesti, aizņem 2 GB (tā saspiešanas koeficients ir 50%).
Veids, kā jūs to izveidojat, ja vēlaties atsevišķi arhivēt un saspiest, ir:
tar cf blah.tar files …
Tas radītu situāciju
blah.tar
kas ir tikai apvienošanās
files …
nesaspiests formā.
Tad jūs darītu
gzip blah.tar
Tas varētu izlasīt satura saturu
blah.tar
no diska, saspiest tos ar gzip kompresijas algoritmu, rakstīt saturu uz
blah.tar.gz
tad atsaista (dzēš) failu
blah.tar
Tagad atlaidīsim!
Ceļš 1
Tev ir
blah.tar.gz
vienā veidā vai citā.
Jūs nolemjat palaist:
gunzip blah.tar.gz
Tas būs
-
IZLASIET 1GB saspiestu datu saturu
blah.tar.gz
-
PROCESS saspiestos datus, izmantojot
gzip
dekompresors atmiņā.
-
Tā kā atmiņas buferis aizpilda datus ar "bloka" vērtību, RAKSTIET nesaspiestos datus failā
blah.tar
uz diska un atkārtojiet, līdz visi saspiestie dati tiek nolasīti.
-
Atsaistīt (dzēst) failu
blah.tar.gz
Tagad jums ir
blah.tar
uz diska, kas ir nesaspiests, bet tajā ir viens vai vairāki faili ar ļoti zemu datu struktūras pieskaitāmās izmaksas. Iespējams, ir faila lielumspāris baitus lielāks par visu failu datu summu.
Tu skrien:
tar xvf blah.tar
Tas būs
-
NOLASĪT 2 GB nesaspiestu datu saturu
blah.tar
un
tar
faila formāta datu struktūras, tostarp informācija par failu atļaujām, failu nosaukumiem, direktorijām utt.
- RAKSTIET disku, lai iegūtu 2 GB datu un metadatus. Tas ietver: datu struktūras / metadatu informācijas tulkošanu, ja nepieciešams, izveidojot jaunus failus un direktorijus, vai pārrakstot esošos failus un direktorijus ar jaunu datu saturu.
Kopējie dati mums Lasīt no diska šajā procesā bija 1 GB (par gunzip) + 2 GB (taram) = 3 GB.
Kopējie dati mums WROTE uz diska šajā procesā bija 2GB (par gunzip) + 2 GB (par darvu) + daži baiti par metadatus = apmēram 4 GB.
2. ceļš
Tev ir
blah.tar.gz
vienā veidā vai citā.
Jūs nolemjat palaist:
tar xvzf blah.tar.gz
Tas būs
-
IZLASIET 1GB saspiestu datu saturu
blah.tar.gz
bloks vienlaikus, atmiņā.
-
PROCESS saspiestos datus, izmantojot
gzip
dekompresors atmiņā.
-
Tā kā atmiņas buferis aizpilda, tas būs caurule ka dati, atmiņā, līdz
tar
faila formāta parsētājs, kurš izlasīs informāciju par metadatus utt. un nesaspiestajiem faila datiem.
- Tā kā atmiņas buferis aizpilda
tar
faila parsētājs, tā RAKSTS nesaspiesti dati uz disku, izveidojot failus un direktorijus un aizpildot tos ar nesaspiestu saturu.
Kopējie dati mums Lasīt no diska šajā procesā bija 1GB saspiestu datu periodu.
Kopējie dati mums WROTE uz diska šajā procesā bija 2GB nesaspiesti dati + daži baiti metadatiem = aptuveni 2 GB.
Ja pamanāt, diska I / O daudzums ir 2. ceļš iridentisks uz diska I / O veic, teiksim,
Zip
vai
7-Zip
programmas, pielāgojot jebkurai kompresijas pakāpes atšķirībām.
Un ja saspiešanas koeficients ir jūsu rūpes, izmantojiet
Xz
kompresors iekapsulēt
tar
un jums ir LZMA2'ed TAR arhīvs, kas ir tikpat efektīvs kā vismodernākais algoritms, kas pieejams
7-Zip
:-)
2.daļa: Funkcijas
tar
saglabā UNIX atļaujas savos faila metadatos un ir ļoti labi pazīstams un pārbaudīts, vai katalogs ir veiksmīgi iepakots, izmantojot dažāda veida atļaujas, simboliskas saites u.tml. Dažādos gadījumos var rasties vairāki gadījumi, kad var būt nepieciešams ielādēt vairākus failus vienu failu vai plūsmu, bet tas ne vienmēr ir saspiests (lai gan kompresija ir lietderīga un bieži vien tiek izmantota).
3.daļa: savietojamība
Daudzi rīki tiek izplatīti avota vai bināro formā kā.tar.gz vai.tar.bz2, jo tas ir "zemākais kopsaucējs" faila formāts: tāpat kā lielākajai daļai Windows lietotāju ir pieejami.zip vai.rar dekompresori, lielākā daļa Linux instalāciju, pat visvienkāršākā, būs pieejams vismaz tar un gunzip, neatkarīgi no tā, cik vecs vai sagriezts. Pat šiem Android ierīcēm ir piekļuve šiem rīkiem.
Jauni projekti, kuru mērķauditorija tiek izmantota mūsdienu izplatīšanai, ļoti labi var izplatīties mūsdienīgākā formātā, piemēram,.tar.xz (izmantojot Xz (LZMA) kompresijas formātu, kas saspiež labāk nekā gzip vai bzip2) vai.7z, kas ir līdzīgs Zip vai Rar failu formāti, jo tas gan saspiež un konkretizē izkārtojumu, lai iekļautu vairākus failus vienā failā.
Jūs neredzat.7z biežāk tiek izmantots tāda paša iemesla dēļ, ka mūzika netiek pārdota no tiešsaistes lejupielādes veikaliem pavisam jaunos formātos, piemēram, Opus vai video WebM. Savietojamība ar cilvēkiem, kuri darbojas vecās vai ļoti vienkāršās sistēmās.
Vai kaut ko pievienot paskaidrojumam? Skatieties komentāros.Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem? Šeit skatiet pilnu diskusiju pavedienu.