Kummalisest meetodist ketta ruumi sÀÀstmiseks

JÀrjekordne kasutaja soovib kÔvakettale salvestada uut andmeplokki, kuid tal puudub selle jaoks vaba koht. Samuti ei taha ta midagi kustutada, kuna "kÔik on vÀga oluline ja vajalik". Mida me temaga siis teeme?

Sama probleem ei ole ainult tema mure. Meie kÔvaketastel puhkab terabyte kaupa informatsiooni ning see kogus ei kavatse kahaneda. Kuid kui unikaalne see on? LÔppude lÔpuks on kÔik failid lihtsalt teatud pikkusega bitikogumid ja tÔenÀoliselt ei erine uus oluliselt sellest, mis juba salvestatud.

Selge on see, et juba salvestatud andmepulkade otsimine kĂ”vakettal on ĂŒlesanne, mis on vĂ€hemalt mitteefektiivne, kui mitte hoopis lootusetu. Teisest kĂŒljest, kui erinevused on vĂ€ikesed, siis vĂ”ib neid ju veidi kohandada...

Kummalisest meetodist ketta ruumi sÀÀstmiseks

TL;DR — teine katse rÀÀkida kummalisest andmete optimeerimise meetodist JPEG-failide abil, seekord arusaadavamas vormis.

Bitidest ja erinevustest

Kui vĂ”tta kaks tĂ€iesti juhuslikku andmepulka, siis on nende vahel keskmiselt pooled bitsid ĂŒhesugused. TĂ”epoolest, iga paari (’00, 01, 10, 11â€Č) vĂ”imalike kombinatsioonide seas on tĂ€pselt pooled omavahel kattuvad, siin on kĂ”ik lihtne.

Kuid muidugi, kui me lihtsalt vĂ”tame kaks faili ja kohandame ĂŒhe teise jĂ€rgi, siis kaotame me ĂŒhe neist. Kui aga sĂ€ilitame muudatused, siis leiutame lihtsalt uuesti delta-koodimise, mis eksisteerib ilma meie abita suurepĂ€raselt, kuigi ei kasutata tavaliselt sarnastes eesmĂ€rkides. Saame proovida vĂ€iksemat jĂ€rjestust suuremasse integreerida, kuid isegi siis riskime me oluliste andmesegmentide kaotamisega, kui me kasutame seda mĂ”tlematult koos millegagi.

Mille vahel siis on vĂ”imalik erinevust kĂ”rvaldada? Niisiis, kasutaja salvestatav uus fail — lihtsalt bitijada, millega me iseenesest midagi teha ei saa. Peame lihtsalt leidma kĂ”vakettalt sellised bitid, mida saab muuta ilma, et peaksime salvestama erinevust, et saaksime nende kaotamise ilma tĂ”siste tagajĂ€rgedeta ĂŒle elada. Ja on mĂ”tet muuta mitte ainult fail ise failisĂŒsteemis, vaid ka mĂ”nda vĂ€hem tundlikku teavet selle sees. Kuid millist ja kuidas?

Kohandamismeetodid

Abi aitavad kaotatud andmetega kokku surutud failid. KÔik need jpeg, mp3 ja muud, kuigi nad on kaotatud kompressiooni, sisaldavad hulga bitte, mis on ohutult muudetavad. Saame kasutada edasijÔudnud tehnikaid, mis muudavad nende komponente mÀrkamatult erinevates kodeerimise osades. Oota. EdasijÔudnud tehnikad
 mÀrkamatud muudatused
 mÔned bitid muudesse
 see on peaaegu steganograafia!

TĂ”epoolest, ĂŒhe teabe peidetud teise sisse meenutab see meetodeid nagu ĂŒkski teine. Samuti muljetavaldav on tehtud muudatuste mĂ€rkamatuks jÀÀmine inimeste aistingute jaoks. Siin on teed lahku minemas — nii et meie ĂŒlesanne on lisada kasutaja kĂ”vakettale tĂ€iendavat teavet, mis talle enamasti ainult kahju toob. Unustab selle veel.

SeetĂ”ttu, kuigi me saame neid kasutada, peame need kohandama. Edasi rÀÀgin ja nĂ€itan neid ĂŒhte olemasolevatest meetoditest ja levinud failiformaadist.

Ć akalitest

Kui juba komprimeerida, siis kÔige kokku surutuma maailmas. RÀÀgime loomulikult JPEG-failidest. Lisaks sellele, et olemas on tohutult tööriistu ja meetodeid, et andmeid sinna peita, on see planeedi kÔige populaarsem graafiline formaat.

Kummalisest meetodist ketta ruumi sÀÀstmiseks

Siiski, et koerust teha, tuleb piirata oma tegevusala selle formaadi failides. Keegi ei armasta ĂŒhevĂ€rvilisi ruute, mis tekivad ĂŒlemÀÀrasest kompressioonist, seetĂ”ttu peaks piirduma juba kokku surutud failiga, vĂ€lja arvatud ĂŒmberkodeerimine. Konkreetselt — tĂ€isarvukvoodiga, mis jÀÀb andmete kaotsimineku eest vastutavate operatsioonide — DCT ja kvantimise — jĂ€rel, mis on suurepĂ€raselt kujutatud kodeerimise skeemil (aitĂ€h Baumanu riikliku raamatukogu wikile):
Kummalisest meetodist ketta ruumi sÀÀstmiseks

JPEG-failide optimeerimiseks on olemas palju vĂ”imalikke meetodeid. On kaotusteta optimeerimine (jpegtran), on optimeerimine “kaotusteta“, mis tegelikult toovad veel rohkem, kuid meid need ei huvita. Sest kui kasutaja on valmis ĂŒhe teabe teise sisse peitma, et suurendada kĂ”vakettal vaba ruumi, siis on ta oma pilte juba ammu optimeerinud vĂ”i ei taha seda ĂŒldse teha, kartes kvaliteedi kaotust.

F5

Selle tingimuste alla sobivad kogu rida algoritme, millega saab tutvuda selles heas esituses. KÔige arenenum neist on algoritm F5 autoriÔigusega Andreas Westfeld, mis töötab heleduskomponendi koefitsientidega, kuna inimsilmas on kÔige vÀhem tundlikud just nende muutustele. Veelgi enam, see kasutab sisestamismeetodit, mis pÔhineb maatriksi kodeerimisel, sundides seega muutma vÀhem koefitsiente sama informatsiooni sisestamiseks, mida suurem on kasutatava konteineri suurus.

Iseenesest muutused vĂ€hendavad absoluutsete koefitsientide vÀÀrtust ĂŒksuse vĂ”rra teatud tingimustel (st mitte alati), mis vĂ”imaldab F5 kasutada andmete salvestamise optimeerimiseks kĂ”vakettale. Asi on selles, et pĂ€rast selliseid muutusi vĂ”ib koefitsient tĂ”enĂ€oliselt nĂ”uda vĂ€hem bitte pĂ€rast Huffmani kodeeringu tegemist JPEGis, ja uued nullid toovad kasu nende kodeerimisel RLE abil.

Kohustuslikud muudatused piirduvad osa eemaldamisega, mis vastutab konfidentsiaalsuse (paroolide segamise) eest, mis sÀÀstab ressursse ja tĂ€itmise aega, ning mitmete failidega töötamise mehhanismi lisamisega korraga ĂŒhe asemel. Üksikasjalikumalt protsessist kindlasti lugejale huvitav ei tundu, liikume seetĂ”ttu elluviimise kirjeldamise juurde.

Tipptehnoloogia

Selle lĂ€henemise töö demonstreerimiseks realiseerisin meetodi puhaskoodis ja tegin mitmeid optimeerimisi nii tĂ€itmise kiirusel kui ka mĂ€lu osas (te ei kujuta ette, kui palju need pildid kaaluvad isegi alati DCT-ni kompressimata). PlatvormideĂŒlene teostatavus saavutati raamatukogude kombinatsiooni abil libjpeg, pcre ja tinydir, mille eest neile tĂ€nu. KĂ”ik see kokku pannakse „make’iga, seega soovivad Windowsi kasutajad hindamiseks paigaldada Cygwini vĂ”i tegeleda Visual Studio ja raamatukogudega iseseisvalt.

Teostus on saadaval konsooli utiliidi ja raamatukogu kujul. Rohkem teavet viimase kasutamise kohta vÔivad huvilised leida readmi failist GitHubi hoidlas, mille lingi ma postituse lÔpus lisaks.

Kuidas kasutada?

Ohtlikult. Pildifailide pakendamiseks kasutatakse regulaaravaldiste pĂ”hjal otsitud faile mÀÀratud juurkataloogis. LĂ”petamisel saab faile liigutada, ĂŒmber nimetada ja kopeerida soovi korral nende sees, muuta failisĂŒsteemi ja operatsioonisĂŒsteemi jne. Kuid tuleb olla ÀÀrmiselt ettevaatlik ja mitte muuta otsest sisu. Isegi ĂŒhe bit'i vÀÀrtuse kaotamine vĂ”ib viia teabe taastamise vĂ”imatuks.

LÔpetamisel jÀtab utiliit spetsiaalse arhivifaili, mis sisaldab kogu vajalikku info tÀieliku taastamise jaoks, sealhulgas kasutatud piltide andmeid. Selle suurus on umbes paar kilobaiti ja see ei avalda suuremat mÔju hÔivatud kettaruumi peale.

VĂ”imaliku mahtuvuse analĂŒĂŒsimiseks saab kasutada lippu ‘-a’: ‘./f5ar -a [otsingukaust] [Perl-ĂŒhilduv regulaaravaldis]’. Pakendamine toimub kĂ€suga ‘./f5ar -p [otsingukaust] [Perl-ĂŒhilduv regulaaravaldis] [pakendatav fail] [arhivi nimi]’, ja pakkimise taastamine toimub kĂ€suga ‘./f5ar -u [arhivi fail] [taastatud faili nimi]’.

Töö demonstreerimine

Kuna meetodi efektiivsust nĂ€idata, laadisin ĂŒles kogu 225 tĂ€iesti tasuta koera fotograafia kogu teenusest. Unsplash ja leidsin dokumentidest suure 45-megabaidise pdf-i teise köite. Programmeerimise Kunst Knuth.

JĂ€rjekord on ĂŒsna lihtne:

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

$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
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 up to 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/

Screenshot'id huvilistele

Kummalisest meetodist ketta ruumi sÀÀstmiseks

Taastatud faili saab ja tuleb veel lugeda:

Kummalisest meetodist ketta ruumi sÀÀstmiseks

Kuidas nĂ€ha, lĂ€htudes algsetest 633 + 36 == 669 megabaidist andmeid kĂ”vakettal, oleme jĂ”udnud meeldivamate 551-ni. See radikaalne erinevus tuleneb tĂ€pselt nende koefitsientide vÀÀrtuste vĂ€henemisest, mis mĂ”jutavad edasist kaotusteta tihendamist: ĂŒheainese vĂ€henemine vĂ”ib rahulikult „lĂ”igata“ paar bait viimasesse faili. Sellegipoolest on need siiski andmete kadumised, kuigi ÀÀrmiselt vĂ€ikesed, millega tuleb leppida.

Õnneks ei ole need silmale absoluutselt mĂ€rgatavad. Spoileris (kuna habrastorage ei oska suurtest failidest) saab lugeja hinnata erinevust nii visuaalselt kui ka nende intensiivsust, mis saadakse muudetud komponendi vÀÀrtuste lahutamisega originaalist: originaal, infoga sees, erinevus (mida tuhmim on vĂ€rv, seda vĂ€iksem on erinevus plokis).

LÔpetuseks

Vaadates kĂ”iki neid keerukusi, vĂ”ib kĂ”vaketta ostmine vĂ”i kĂ”ik pilve laadimine tunduda palju lihtsam lahendus probleemile. Kuid kuigi elame praegu ilusas ajastus, ei ole mingeid garantiisid, et homme saab veel internetti minna ja kĂ”ik oma ĂŒleliigsed andmed kuhugi ĂŒles laadida. VĂ”i minna poodi ja osta endale jĂ€rjekordne tuhande terabaidi kĂ”vaketas. Samas vĂ”ib alati kasutada juba kodus olevaid.

-> GitHub

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster