If-Koubou

Care este avantajul utilizării formatului de fișier Tar de azi?

Care este avantajul utilizării formatului de fișier Tar de azi? (Cum să)


Formatul de arhivare a tarului este, în anii de calcul, o veritabilă metuzahă, dar este încă folosită astăzi. Ce face formatul de gudron atât de util după ce a început?

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Intrebarea

Cititorul super-utilizator MarcusJ este curios despre formatul de tar și de ce îl folosim încă după toți acești ani:

Stiu ca tarul a fost facut pentru arhive de banda in acea zi, insa astazi avem formate de fisiere arhive care ambele asambla fisiere si fac compresie in acelasi format logic.

Întrebări:

  • Există o pedeapsă de performanță în timpul etapelor de agregare / comprimare / decompresie pentru folosirea unui tar încapsulat în gzip sau bzip2, în comparație cu utilizarea unui format de fișier care face agregarea și comprimarea în aceeași structură de date? Presupunem că durata de funcționare a compresorului care este comparat este identică (de exemplu, gzip și Deflate sunt similare).
  • Există caracteristici ale formatului de fișier tar care alte formate de fișiere, cum ar fi .7z și .zip nu au?
  • Din moment ce tar este un format de fișier vechi și formate de fișiere mai noi există de astăzi, de ce este tar (fie încapsulat în gzip, bzip2 sau chiar noul xz) încă atât de utilizat astăzi pe GNU / Linux, Android, BSD și alte UNIX sisteme de operare, transferuri de fișiere, surse de programe și descărcări binare și, uneori, chiar și ca format de manager de pachete?

Aceasta este o întrebare perfect rezonabilă; atâtea lucruri s-au schimbat în lumea calculatoarelor în ultimii treizeci de ani, dar încă mai folosim formatul tar. Care e povestea?

Răspunsul

Contribuitorul Superquest Allquixotic oferă câteva informații despre longevitatea și funcționalitatea formatului tar:

Partea 1: Performanță

Iată o comparație a două fluxuri de lucru separate și a ceea ce fac.

Aveți un fișier pe discblah.tar.gz care este, să zicem, 1 GB de date comprimate gzip care, atunci când sunt necomprimate, ocupă 2 GB (deci un raport de compresie de 50%).

Modul în care ați crea acest lucru, dacă ați face arhivarea și comprimarea separat, ar fi:

tar cf blah.tar fișiere ... 

Acest lucru ar avea ca rezultatblah.tar care este o simplă agregare afișiere ... în formă necomprimată.

Atunci ai face

gzip blah.tar 

Acest lucru ar citi conținutulblah.tar de pe disc, comprimați-le prin algoritmul de compresie gzip, scrieți conținutulblah.tar.gz, apoi deconectați (ștergeți) fișierulblah.tar.

Acum, să decomprimăm!

Calea 1

Tu aiblah.tar.gz, într-un fel sau altul.

Voi decideți să rulați:

gunzip blah.tar.gz 

Asta va

  • CITIȚI conținutul de date comprimat de 1 GB dinblah.tar.gz.
  • PROCESAȚI datele comprimate pringzip decompresor în memorie.
  • Pe măsură ce buffer-ul de memorie se umple cu un "bloc" în valoare de date, WRITE datele necomprimate în fișierblah.tar pe disc și repetați până când se citesc toate datele comprimate.
  • Deconectați (ștergeți) fișierulblah.tar.gz.

Acum aiblah.tar pe disc, care este necomprimat, dar conține unul sau mai multe fișiere în cadrul acestuia, cu o structură de date foarte scăzută. Dimensiunea fișierului este probabilun cuplu de doi mai mare decât suma tuturor datelor din fișiere.

Alergi:

tar xvf blah.tar 

Asta va

  • CITIȚI 2GB de conținut de date necomprimat dinblah.tar sigudron structurile de date ale formatului de fișier, inclusiv informații despre permisiunile de fișier, numele fișierelor, directoarele etc.
  • WRITE pentru a discului 2 GB de date plus metadatele. Aceasta implică: traducerea informațiilor despre structura de date / metadate în crearea de fișiere și directoare noi pe disc, după caz, sau rescrierea fișierelor și directoarelor existente cu conținut nou de date.

Datele totale pe care le avemCITIT din disc în acest proces a fost 1GB (pentru gunzip) + 2GB (pentru tar) = 3GB.

Datele totale pe care le avemSCRIS la disc în acest proces a fost 2GB (pentru gunzip) + 2GB (pentru tar) + câteva octeți pentru metadate = aproximativ 4GB.

Calea 2

Tu aiblah.tar.gz, într-un fel sau altul.

Voi decideți să rulați:

tar xvzf blah.tar.gz 

Asta va

  • CITIȚI conținutul de date comprimat de 1 GB dinblah.tar.gz, un bloc la un moment dat, în memorie.
  • PROCESAȚI datele comprimate pringzip decompresor în memorie.
  • Pe măsură ce tamponul de memorie se umple, se va facețeavă că datele, în memorie, până lagudron formatul de parser, care va citi informațiile despre metadate etc. și datele de fișier necomprimate.
  • Pe măsură ce tamponul de memorie se umple îngudron parserul fișierelor, va scrie fișierele necomprimate pe disc, prin crearea de fișiere și directoare și completarea acestora cu conținutul necomprimat.

Datele totale pe care le avemCITIT de pe disc în acest proces a fost 1GB de date comprimate, perioadă.

Datele totale pe care le avemSCRIS la disc în acest proces a fost 2 GB de date necomprimate + câteva octeți pentru metadate = aproximativ 2 GB.

Dacă observați, cantitatea de disc I / O înCalea 2 esteidentic la discul I / O realizat de, să zicem,Zip sau7-Zip programe, ajustând diferențele de compresie.

Și dacă raportul de compresie este îngrijorarea dvs., utilizațiXZ compresor pentru a încapsulagudron, și aveți arhiva TAR LZMA2'ed, care este la fel de eficientă ca algoritmul cel mai avansat disponibil7-Zip :-)

Partea 2: Caracteristici

gudron stochează permisiunile UNIX în cadrul metadatelor sale de fișiere și este foarte bine cunoscut și testat pentru ambalarea cu succes a unui director cu tot felul de permisiuni, legături simbolice etc.Există mai mult de câteva cazuri în care s-ar putea să fie nevoie să compilați o mulțime de fișiere într-un singur fișier sau într-un flux, dar nu să îl comprimați neapărat (deși compresia este utilă și adesea folosită).

Partea 3: Compatibilitate

Multe instrumente sunt distribuite în format sursă sau binar sub formă de fișiere .tar.gz sau .tar.bz2, deoarece acestea reprezintă un format de fișier cu cel mai mic numitor comun: la fel ca majoritatea utilizatorilor de Windows care au acces la decompresoare .zip sau .rar, majoritatea instalărilor Linux, chiar și cele mai de bază, vor avea acces la cel puțin gudron și gunzip, indiferent cât de bătrâni sau mai jos. Chiar și firmware-urile Android au acces la aceste instrumente.

Proiectele noi care vizează publicul care rulează distribuții moderne pot fi foarte bine distribuite într-un format mai modern, cum ar fi .tar.xz (utilizând formatul de compresie Xz (LZMA), care comprimă mai bine decât gzip sau bzip2) sau .7z, formatele de fișiere Zip sau Rar prin faptul că ambele comprimă și specifică un aspect pentru încapsularea mai multor fișiere într-un singur fișier.

Nu vedeți .7z folosit mai des pentru același motiv că muzica nu este vândută din magazinele de descărcare online în formate noi, cum ar fi Opus, sau video în WebM. Compatibilitatea cu persoanele care rulează sisteme vechi sau foarte de bază.

Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.