Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

Toinen käyttäjä haluaa kirjoittaa uuden tiedon kiintolevylle, mutta hänellä ei ole tarpeeksi vapaata tilaa tehdä tätä. En myöskään halua poistaa mitään, koska "kaikki on erittäin tärkeää ja tarpeellista". Ja mitä meidän pitäisi tehdä sen kanssa?

Kenelläkään ei ole tätä ongelmaa. Kiintolevyillämme on teratavuja tietoa, eikä tällä määrällä ole taipumusta pienentyä. Mutta kuinka ainutlaatuinen se on? Loppujen lopuksi kaikki tiedostot ovat vain tietynpituisia bittijoukkoja, ja todennäköisesti uusi ei juurikaan eroa jo tallennetusta.

On selvää, että kiintolevylle jo tallennettujen tietojen etsiminen on ellei epäonnistuminen, niin ei ainakaan tehokas tehtävä. Toisaalta, jos ero on pieni, voit säätää sitä hieman...

Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

TL;DR - toinen yritys puhua oudosta menetelmästä tietojen optimoimiseksi JPEG-tiedostoilla, nyt ymmärrettävämmässä muodossa.

Biteistä ja eroista

Jos otat kaksi täysin satunnaista datapalaa, niin keskimäärin puolet niiden sisältämistä biteista osuu yhteen. Itse asiassa kunkin parin ('00, 01, 10, 11') mahdollisista asetteluista täsmälleen puolet on samat arvot, kaikki on yksinkertaista tässä.

Mutta tietysti, jos otamme vain kaksi tiedostoa ja sovitamme toisen toiseen, menetämme yhden niistä. Jos tallennamme muutokset, keksimme yksinkertaisesti uudelleen delta-koodaus, joka on täysin olemassa ilman meitä, vaikka sitä ei yleensä käytetä samoihin tarkoituksiin. Voimme yrittää upottaa pienemmän sekvenssin suurempaan, mutta silti vaarana on menettää kriittisiä datasegmenttejä, jos käytämme sitä holtittomasti kaiken kanssa.

Minkä ja minkä välillä ero voidaan poistaa? Eli käyttäjän kirjoittama uusi tiedosto on vain sarja bittejä, joilla emme voi tehdä mitään itsestään. Sitten sinun on vain löydettävä kiintolevyltä sellaiset bitit, joita voidaan muuttaa ilman, että sinun tarvitsee tallentaa eroa, jotta voit selviytyä niiden menetyksestä ilman vakavia seurauksia. Ja on järkevää muuttaa paitsi itse FS:n tiedostoa, myös joitain vähemmän arkaluonteisia tietoja sen sisällä. Mutta kumpi ja miten?

Sovitusmenetelmät

Häviölliset pakatut tiedostot tulevat apuun. Kaikki nämä jpeg-, mp3- ja muut tiedostot, vaikka ne ovat häviöllisiä, sisältävät joukon bittejä, joita voidaan turvallisesti muuttaa. On mahdollista käyttää kehittyneitä tekniikoita, jotka muuttavat komponenttejaan huomaamattomasti koodauksen eri vaiheissa. Odota. Edistyneitä tekniikoita... huomaamaton muunnos... vähän toiseen... se on melkein kuin steganografia!

Itse asiassa yhden tiedon upottaminen toiseen muistuttaa hänen menetelmiään kuin mitään muuta. Minuun tekee vaikutuksen myös ihmisten aisteille tehtyjen muutosten huomaamattomuus. Polut eroavat on salassa: tehtävämme on, että käyttäjä syöttää lisätietoja kiintolevylleen; se vain vahingoittaa häntä. Hän unohtaa taas.

Siksi, vaikka voimme käyttää niitä, meidän on tehtävä joitain muutoksia. Ja sitten kerron ja näytän ne käyttämällä esimerkkiä yhdestä olemassa olevista menetelmistä ja yleisestä tiedostomuodosta.

Tietoja sakaaleista

Jos todella puristat sitä, se on maailman puristuvin asia. Puhumme tietysti JPEG-tiedostoista. Sen lisäksi, että siellä on paljon työkaluja ja olemassa olevia menetelmiä tietojen upottamiseksi siihen, se on planeetan suosituin grafiikkamuoto.

Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

Kuitenkin, jotta et harjoittaisi koiranjalostusta, sinun on rajoitettava toiminta-alaasi tämän muodon tiedostoissa. Kukaan ei pidä yksivärisistä neliöistä, jotka ilmestyvät liiallisesta pakkauksesta, joten sinun on rajoitettava työskentelyyn jo pakatun tiedoston kanssa, uudelleenkoodauksen välttäminen. Tarkemmin sanottuna kokonaislukukertoimilla, jotka jäävät jäljelle tietojen häviämisestä vastuussa olevien toimintojen jälkeen - DCT ja kvantisointi, joka näkyy täydellisesti koodausjärjestelmässä (Bauman National Libraryn wikin ansiosta):
Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

Jpeg-tiedostojen optimointiin on monia mahdollisia menetelmiä. On häviötöntä optimointia (jpegtran), on optimointia "ei tappiota", jotka itse asiassa edistävät jotain muuta, mutta emme välitä niistä. Loppujen lopuksi, jos käyttäjä on valmis upottamaan yhden tiedon toiseen lisätäkseen vapaata levytilaa, hän joko optimoi kuvansa kauan sitten tai ei halua tehdä tätä ollenkaan laadun heikkenemisen pelossa.

F5

Näihin ehtoihin sopii koko joukko algoritmeja, joihin voit tutustua tässä hyvässä esityksessä. Edistyksellisin niistä on algoritmi F5 Andreas Westfeld, joka työskentelee kirkkauskomponentin kertoimilla, koska ihmissilmä on vähiten herkkä sen muutoksille. Lisäksi se käyttää matriisikoodaukseen perustuvaa upotustekniikkaa, jonka avulla on mahdollista tehdä vähemmän muutoksia upottaessaan samaa tietomäärää, mitä suurempi on käytetyn säiliön koko.

Muutokset itsessään tiivistyvät kertoimien absoluuttisen arvon pienentämiseen yhdellä tietyissä olosuhteissa (eli ei aina), mikä antaa sinun käyttää F5:tä tietojen tallennuksen optimointiin kiintolevylle. Asia on siinä, että kerroin tällaisen muutoksen jälkeen vie todennäköisesti vähemmän bittejä Huffman-koodauksen jälkeen JPEG-arvojen tilastollisen jakautumisen vuoksi, ja uudet nollat ​​antavat vahvistusta koodattaessa niitä RLE:n avulla.

Tarvittavat muutokset tiivistyvät salassapidosta vastaavan osan (salasanojen uudelleenjärjestely) poistamiseen, mikä säästää resursseja ja suoritusaikaa, sekä mekanismin lisäämiseen useiden tiedostojen kanssa työskentelyyn yhden kerrallaan sijasta. Lukija ei todennäköisesti ole kiinnostunut muutosprosessista tarkemmin, joten siirrytään toteutuksen kuvaukseen.

Huipputekniikka

Osoittaakseni tämän lähestymistavan otin menetelmän käyttöön puhtaassa C:ssä ja tein useita optimointeja sekä suoritusnopeuden että muistin suhteen (et voi kuvitella kuinka paljon nämä kuvat painavat ilman pakkausta, jopa ennen DCT:tä). Monialustainen saavutettu käyttämällä kirjastojen yhdistelmää libjpeg, pcre и tinydir, josta kiitämme heitä. Kaikki tämä on koonnut "make", joten Windows-käyttäjät haluavat asentaa Cygwinin itselleen arviointia varten tai käsitellä Visual Studion ja kirjastojen kanssa yksin.

Toteutus on saatavilla konsoliapuohjelman ja kirjaston muodossa. Kiinnostuneet voivat tutustua jälkimmäisen käyttöön Githubin arkiston readme-osiossa, jonka linkin liitän postauksen loppuun.

Kuinka käyttää?

Huolellisesti. Pakkaamiseen käytettävät kuvat valitaan hakemalla annetusta juurihakemistosta säännöllisen lausekkeen avulla. Valmistuttuaan tiedostoja voidaan siirtää, nimetä uudelleen ja kopioida halutessaan sen rajojen sisällä, muuttaa tiedostoja ja käyttöjärjestelmiä jne. Sinun tulee kuitenkin olla erittäin varovainen, äläkä muuta välitöntä sisältöä millään tavalla. Jopa yhden bitin arvon menettäminen voi tehdä tietojen palauttamisen mahdottomaksi.

Valmistuttuaan apuohjelma jättää erityisen arkistotiedoston, joka sisältää kaikki pakkauksen purkamiseen tarvittavat tiedot, mukaan lukien tiedot käytetyistä kuvista. Itse se painaa noin pari kilotavua, eikä sillä ole merkittävää vaikutusta varattuun levytilaan.

Voit analysoida mahdollista kapasiteettia käyttämällä '-a'-lippua: './f5ar -a [hakukansio] [Perl-yhteensopiva säännöllinen lauseke]'. Pakkaaminen tehdään komennolla './f5ar -p [hakukansio] [Perl-yhteensopiva säännöllinen lauseke] [pakattu tiedosto] [arkiston nimi]' ja pakkaus puretaan komennolla './f5ar -u [arkistotiedosto] [palautetun tiedoston nimi ]'.

Työn esittely

Osoittaakseni menetelmän tehokkuutta latasin palvelusta 225 täysin ilmaista valokuvaa koirista. Unsplash ja löysi asiakirjoista suuren 45 metrin pdf-tiedoston toisesta osasta Ohjelmoinnin taito Knuta.

Järjestys on melko yksinkertainen:

$ 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/

Kuvakaappauksia faneille

Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

Pakkaamaton tiedosto voidaan ja pitäisi edelleen lukea:

Tietoja oudosta menetelmästä kiintolevytilan säästämiseksi

Kuten näette, kiintolevyn alkuperäisestä 633 + 36 == 669 megatavua datasta päädyimme miellyttävämpään 551:een. Tällainen radikaali ero selittyy kertoimien arvojen laskulla, mikä vaikuttaa niiden arvoon. myöhempi häviötön pakkaus: yksi kerrallaan pienentäminen voi helposti " leikata pari tavua lopullisesta tiedostosta. Tämä on kuitenkin edelleen tietojen menetys, vaikkakin erittäin pieni, ja sinun on siedettävä.

Onneksi ne ovat täysin näkymättömiä silmälle. Spoilerin alla (koska habrastorage ei pysty käsittelemään suuria tiedostoja) lukija voi arvioida eron sekä silmällä että niiden voimakkuudella, joka saadaan vähentämällä muutetun komponentin arvot alkuperäisestä: оригинал, jossa on tietoa sisällä, ero (mitä himmeämpi väri, sitä pienempi ero lohkossa).

Sen sijaan johtopäätös

Kaikki nämä vaikeudet huomioon ottaen kiintolevyn ostaminen tai kaiken lataaminen pilveen voi tuntua paljon yksinkertaisemmalta ratkaisulta ongelmaan. Mutta vaikka elämme nyt niin ihanaa aikaa, ei ole takeita siitä, että huomenna on vielä mahdollista mennä verkkoon ja ladata kaikki ylimääräiset tietosi jonnekin. Tai mene kauppaan ja osta itsellesi toinen tuhannen teratavun kiintolevy. Mutta voit aina käyttää olemassa olevia taloja.

-> GitHub

Lähde: will.com

Lisää kommentti