Puncte:0

Comprimarea tar și 7z pe Linux - care este diferența?

drapel tr

Am o problema! Am un script de rezervă în python. Face backup pentru toate folderele din /var/www/ în .tar.7z diferit pentru fiecare folder din /var/www/

Problema este că timpul de compresie este foarte lent. Iar pentru folderele mari de 4 GB se oprește comprimarea uneori la 1G, alteori la 1,5 GB.

Acesta este rândul pentru această compresie:

os.system("tar cf - -C %s . 2>/dev/null 3>/dev/null | 7za a -p%s -si %s 1>/dev/null 2>/dev/null 3> /dev/null" % (cf, self.config.get(jn, "archpass"), nume de fișier))

Când încerc tar -cf compress-dir.tar /var/www/bigsite.com/ folderul de 4 GB, rulează creează .tar extrem de rapid în câteva minute este gata.

Cu toate acestea, în cadrul scriptului python, fișierul temporar care este creat de îndată ce .tar începe să fie generat, crește în dimensiune foarte lent. După aproximativ 10 minute ajunge la aproximativ 1 GB...și în curând încetează să crească, nefiind nicio eroare în consolă.

Există vreo modalitate prin care pot simula același lucru care se întâmplă aici: tar cf - -C %s . 2>/dev/null 3>/dev/null direct în bash? Pentru că clar nu este la fel ca tar -cf compress-dir.tar /var/www/bigsite.com/ deoarece rulează mult mai repede.

Poate dacă rulez tar-ul direct în bash poate apărea o eroare. Desigur, dacă aveți alte idei, vă rog să-mi spuneți.

drapel in
Majoritatea versiunilor tar acceptă compresia gzip încorporată prin adăugarea opțiunii `z`. Gzip nu este la fel de eficient ca 7zip în ceea ce privește dimensiunea comprimată, dar poate fi puțin mai rapid. Pentru problema 7zip, aș bănui că o versiune veche sau defectă a 7zip, deoarece 7zip nu ar trebui să aibă probleme cu fișierele mari.De asemenea, nu trebuie să rămâneți cu 7zip, pot fi folosite și alte compresoare precum bzip2. Și folosind anumiți parametri puteți reduce eficiența compresiei pentru a accelera procesul de backup.
Puncte:1
drapel ar

Gudronul nu face compresie de la sine. Aceasta înseamnă că debitul este aproape limitat doar de capacitatea IO. Hard disk-urile pot gestiona cu ușurință 100 MB/s, așa că 4 GB R/W ar trebui să fie realizabili în aproximativ 80 de secunde - 4 GB citit și 4 GB scris. SSD-urile pot face sute de megabiți pe secundă sau mai mult.

Cu toate acestea, 7z face compresie. Compresia este în principiu legată de CPU, nu de stocare.

Pentru a compara 7z, puteți rula 7z b. Pe laptopul pe care îl folosesc pentru a scrie asta, 7z poate gestiona 20MB/s. Stocarea mea NVMe poate suporta 2 GB/s. Sunt două ordine de mărime în diferență! Comprimarea a 4 GB ar dura 200 de secunde; pur și simplu introducerea într-un tarball ar trebui să dureze 2 secunde!

Diferiți algoritmi de compresie au compromisuri diferite. 7z poate fi configurat pentru utilizare diferite niveluri de compresie, în 10 pași.

Ar trebui să experimentați cu diferite niveluri pentru a găsi compromisul corect pentru dimensiunea vitezei pentru aplicația dvs.

Există vreo modalitate prin care pot simula același lucru care se întâmplă aici: tar cf - -C %s . 2>/dev/null 3>/dev/null direct în bash? Pentru că în mod clar nu este același lucru cu tar -cf compress-dir.tar /var/www/bigsite.com/ deoarece rulează mult mai repede.

Sigur, este o comandă shell. os.system() pur și simplu rulează comenzile specificate. Comanda tar din exemplul dvs. adaugă %s la un tarball și emite rezultatul la stdout. În exemplul complet pe care îl furnizați, acesta este transmis la 7z.

Dar, așa cum am spus mai sus: nu este gudronul care este lent. Este 7z.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.