Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

Një përdorues tjetër dëshiron të shkruajë një pjesë të re të të dhënave në hard disk, por ai nuk ka hapësirë ​​të mjaftueshme të lirë për ta bërë këtë. Unë gjithashtu nuk dua të fshij asgjë, pasi "gjithçka është shumë e rëndësishme dhe e nevojshme". Dhe çfarë duhet të bëjmë me të?

Askush nuk e ka këtë problem. Ka terabajt informacion në hard disqet tona dhe kjo sasi nuk ka tendencë të ulet. Por sa unik është? Në fund të fundit, të gjithë skedarët janë vetëm grupe pjesësh me një gjatësi të caktuar dhe, ka shumë të ngjarë, i riu nuk është shumë i ndryshëm nga ai që është ruajtur tashmë.

Është e qartë se kërkimi i pjesëve të informacionit të ruajtura tashmë në një hard disk është, nëse jo një dështim, atëherë të paktën jo një detyrë efektive. Nga ana tjetër, nëse diferenca është e vogël, atëherë mund ta rregulloni pak...

Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

TL;DR - përpjekja e dytë për të folur për një metodë të çuditshme të optimizimit të të dhënave duke përdorur skedarë JPEG, tani në një formë më të kuptueshme.

Rreth bitave dhe ndryshimit

Nëse merrni dy pjesë krejtësisht të rastësishme të të dhënave, atëherë mesatarisht gjysma e biteve që ato përmbajnë përkojnë. Në të vërtetë, midis paraqitjeve të mundshme për çdo çift ('00, 01, 10, 11'), saktësisht gjysma kanë të njëjtat vlera, gjithçka është e thjeshtë këtu.

Por sigurisht, nëse marrim vetëm dy skedarë dhe vendosim një në të dytën, atëherë do të humbasim njërën prej tyre. Nëse i ruajmë ndryshimet, thjesht do të rishpikim kodimi delta, i cili ekziston shumë mirë pa ne, megjithëse zakonisht nuk përdoret për të njëjtat qëllime. Mund të përpiqemi të vendosim një sekuencë më të vogël në një më të madhe, por edhe kështu rrezikojmë të humbasim segmente kritike të të dhënave nëse i përdorim ato në mënyrë të pamatur me gjithçka.

Midis çfarë dhe çfarë atëherë mund të eliminohet ndryshimi? Epo, domethënë, një skedar i ri i shkruar nga përdoruesi është vetëm një sekuencë bitash, me të cilat ne nuk mund të bëjmë asgjë në vetvete. Atëherë ju vetëm duhet të gjeni pjesë të tilla në hard disk që ato të mund të ndryshohen pa pasur nevojë të ruani ndryshimin, në mënyrë që të mbijetoni humbjen e tyre pa pasoja të rënda. Dhe ka kuptim të ndryshoni jo vetëm skedarin në vetë FS, por disa informacione më pak të ndjeshme brenda tij. Por cili dhe si?

Metodat e montimit

Skedarët e ngjeshur me humbje vijnë në shpëtim. Të gjitha këto jpeg, mp3 dhe të tjera, megjithëse kompresim me humbje, përmbajnë një mori pjesësh që mund të ndryshohen në mënyrë të sigurt. Është e mundur të përdoren teknika të avancuara që modifikojnë në mënyrë të padukshme përbërësit e tyre në faza të ndryshme të kodimit. Prisni. Teknika të avancuara... modifikim i padukshëm... një pjesë në tjetrën... është pothuajse si steganografi!

Në të vërtetë, futja e një informacioni në një tjetër të kujton metodat e saj si asgjë tjetër. Më bën përshtypje edhe padukshmëria e ndryshimeve të bëra në shqisat njerëzore. Aty ku shtigjet ndryshojnë është në fshehtësi: detyra jonë zbret tek përdoruesi që të fut informacione shtesë në hard diskun e tij; kjo vetëm do ta dëmtojë atë. Ai do të harrojë përsëri.

Prandaj, megjithëse mund t'i përdorim ato, duhet të bëjmë disa modifikime. Dhe pastaj unë do t'i tregoj dhe do t'i tregoj duke përdorur shembullin e një prej metodave ekzistuese dhe një formati të përbashkët skedari.

Rreth çakejve

Nëse vërtet e shtrydhni, është gjëja më e ngjeshshme në botë. Ne, natyrisht, po flasim për skedarët JPEG. Jo vetëm që ka shumë mjete dhe metoda ekzistuese për futjen e të dhënave në të, por është formati më i popullarizuar i grafikës në këtë planet.

Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

Sidoqoftë, për të mos u angazhuar në mbarështimin e qenve, duhet të kufizoni fushën tuaj të aktivitetit në skedarë të këtij formati. Askush nuk i pëlqen kuadratet njëngjyrëshe që shfaqen për shkak të ngjeshjes së tepërt, kështu që duhet të kufizoheni në punën me një skedar tashmë të kompresuar, duke shmangur rikodimin. Më konkretisht, me koeficientët e plotë, që mbeten pas operacioneve përgjegjëse për humbjen e të dhënave - DCT dhe kuantizimi, i cili shfaqet në mënyrë perfekte në skemën e kodimit (falë wiki-t të Bibliotekës Kombëtare Bauman):
Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

Ka shumë metoda të mundshme për optimizimin e skedarëve jpeg. Ka optimizim pa humbje (jpegtran), ka optimizim "asnjë humbje“, të cilat në fakt kontribuojnë diçka tjetër, por ne nuk kujdesemi për to. Në fund të fundit, nëse përdoruesi është gati të futë një informacion në tjetrin për të rritur hapësirën e lirë të diskut, atëherë ai ose i optimizoi imazhet e tij shumë kohë më parë, ose nuk dëshiron ta bëjë këtë fare nga frika e humbjes së cilësisë.

F5

Një familje e tërë algoritmesh i përshtatet këtyre kushteve, me të cilat mund të njiheni në këtë prezantim të mirë. Më i avancuari prej tyre është algoritmi F5 nga Andreas Westfeld, duke punuar me koeficientët e komponentit të shkëlqimit, pasi syri i njeriut është më pak i ndjeshëm ndaj ndryshimeve të tij. Për më tepër, ai përdor një teknikë ngulitjeje të bazuar në kodimin e matricës, e cila bën të mundur që të bëhen më pak ndryshime kur futet e njëjta sasi informacioni, sa më e madhe të jetë madhësia e kontejnerit të përdorur.

Vetë ndryshimet zbresin në zvogëlimin e vlerës absolute të koeficientëve me një në kushte të caktuara (d.m.th., jo gjithmonë), gjë që ju lejon të përdorni F5 për të optimizuar ruajtjen e të dhënave në hard diskun tuaj. Çështja është se koeficienti pas një ndryshimi të tillë ka shumë të ngjarë të zërë më pak bit pas kodimit të Huffman për shkak të shpërndarjes statistikore të vlerave në JPEG, dhe zerot e reja do të japin një fitim kur i kodojnë ato duke përdorur RLE.

Modifikimet e nevojshme zbresin në eliminimin e pjesës përgjegjëse për fshehtësinë (rirregullimi i fjalëkalimit), i cili kursen burimet dhe kohën e ekzekutimit, dhe shtimin e një mekanizmi për të punuar me shumë skedarë në vend të një në një kohë. Lexuesi nuk ka gjasa të jetë i interesuar për procesin e ndryshimit në më shumë detaje, kështu që le të kalojmë në një përshkrim të zbatimit.

Teknologji e larte

Për të demonstruar se si funksionon kjo qasje, unë zbatova metodën në C të pastër dhe bëra një sërë optimizimesh si për sa i përket shpejtësisë së ekzekutimit ashtu edhe memorjes (nuk mund ta imagjinoni se sa peshojnë këto foto pa kompresim, madje edhe para DCT). Ndër-platformë e arritur duke përdorur një kombinim të bibliotekave libjpeg, pcre и i vogël, për çka i falënderojmë. E gjithë kjo bashkohet nga 'make', kështu që përdoruesit e Windows duan të instalojnë disa Cygwin për vete për vlerësim, ose të merren vetë me Visual Studio dhe bibliotekat.

Zbatimi është i disponueshëm në formën e një programi të konsolës dhe bibliotekës. Të interesuarit mund të mësojnë më shumë rreth përdorimit të kësaj të fundit në readme në depo në Github, lidhjen të cilës do t'i bashkëngjis në fund të postimit.

Si të përdorni?

Me kujdes. Imazhet e përdorura për paketim zgjidhen duke kërkuar duke përdorur një shprehje të rregullt në direktorinë e dhënë rrënjë. Pas përfundimit, skedarët mund të zhvendosen, riemërohen dhe kopjohen sipas dëshirës brenda kufijve të tij, të ndryshojnë skedarët dhe sistemet operative, etj. Megjithatë, duhet të jeni jashtëzakonisht të kujdesshëm dhe të mos ndryshoni përmbajtjen e menjëhershme në asnjë mënyrë. Humbja e vlerës së qoftë edhe një biti mund ta bëjë të pamundur rikuperimin e informacionit.

Pas përfundimit, programi lë një skedar të posaçëm arkiv që përmban të gjithë informacionin e nevojshëm për shpaketimin, duke përfshirë të dhënat për imazhet e përdorura. Në vetvete, ai peshon rreth disa kilobajt dhe nuk ka ndonjë ndikim të rëndësishëm në hapësirën e zënë të diskut.

Mund të analizoni kapacitetin e mundshëm duke përdorur flamurin '-a': './f5ar -a [dosja e kërkimit] [Shprehja e rregullt e përputhshme me Perl]'. Paketimi bëhet me komandën './f5ar -p [dosja e kërkimit] [Shprehja e rregullt e përputhshme me Perl] [skedari i paketuar] [emri i arkivit]' dhe zbërthimi me './f5ar -u [skedari i arkivit] [emri i skedarit të rikuperuar ]'.

Demonstrimi i punës

Për të treguar efektivitetin e metodës, ngarkova një koleksion prej 225 fotografish absolutisht falas të qenve nga shërbimi Unsplash dhe gjeti në dokumente një pdf të madh prej 45 metrash të vëllimit të dytë Arti i Programimit Knuta.

Sekuenca është mjaft e thjeshtë:

$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/

$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok

$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok

$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf

$ du -sh dogs/
551M dogs/

Pamjet e ekranit për fansat

Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

Skedari i paketuar mund dhe duhet ende të lexohet:

Rreth një metode të çuditshme për të kursyer hapësirën në hard disk

Siç mund ta shihni, nga 633 + 36 == 669 megabajt origjinale të të dhënave në hard disk, arritëm në 551 më të këndshëm. Një ndryshim i tillë rrënjësor shpjegohet me uljen e vlerave të koeficientëve, gjë që ndikon në to. Kompresimi i mëvonshëm pa humbje: zvogëlimi i një nga një mund të "presë lehtësisht disa bajt nga skedari përfundimtar. Sidoqoftë, kjo është ende një humbje e të dhënave, megjithëse jashtëzakonisht e vogël, me të cilën do të duhet të duroni.

Për fat të mirë, ato janë absolutisht të padukshme për syrin. Nën spoilerin (pasi habrastorage nuk mund të trajtojë skedarë të mëdhenj), lexuesi mund të vlerësojë ndryshimin si me sy ashtu edhe me intensitetin e tyre, të marrë duke zbritur vlerat e përbërësit të ndryshuar nga origjinali: origjinale, me informacion brenda, ndryshimi (sa më e zbehtë të jetë ngjyra, aq më i vogël është ndryshimi në bllok).

Në vend të një përfundimi

Duke marrë parasysh të gjitha këto vështirësi, blerja e një hard disk ose ngarkimi i gjithçkaje në cloud mund të duket si një zgjidhje shumë më e thjeshtë për problemin. Por edhe pse jetojmë në një kohë kaq të mrekullueshme tani, nuk ka asnjë garanci se nesër do të jetë ende e mundur të shkoni në internet dhe të ngarkoni të gjitha të dhënat tuaja shtesë diku. Ose shkoni në dyqan dhe blini vetes një hard disk një mijë terabyte. Por gjithmonë mund të përdorni shtëpitë ekzistuese.

-> GitHub

Burimi: www.habr.com

Shto një koment