Par dīvainu metodi cietā diska vietas taupīŔanai

Cits lietotājs vēlas ierakstÄ«t jaunu datu daļu cietajā diskā, taču viņam nav pietiekami daudz brÄ«vas vietas, lai to izdarÄ«tu. Es arÄ« nevēlos neko dzēst, jo "viss ir ļoti svarÄ«gi un nepiecieÅ”ams". Un ko mums ar to darÄ«t?

Nevienam nav Ŕīs problēmas. MÅ«su cietajos diskos ir terabaiti informācijas, un Å”im apjomam nav tendence samazināties. Bet cik unikāls tas ir? Galu galā visi faili ir tikai noteikta garuma bitu komplekti, un, visticamāk, jaunais daudz neatŔķiras no jau saglabātā.

Ir skaidrs, ka cietajā diskā jau saglabātas informācijas meklÄ“Å”ana ir ja ne neveiksme, tad vismaz ne efektÄ«vs uzdevums. Savukārt, ja starpÄ«ba ir maza, tad var nedaudz pieregulēt...

Par dīvainu metodi cietā diska vietas taupīŔanai

TL;DR - otrais mēģinājums runāt par dÄ«vainu datu optimizÄ“Å”anas metodi, izmantojot JPEG failus, tagad saprotamākā formā.

Par bitiem un atŔķirībām

Ja ņem divus pilnÄ«gi nejauÅ”us datu gabalus, tad vidēji puse no tajos esoÅ”ajiem bitiem sakrÄ«t. PatieŔām, no katra pāra iespējamajiem izkārtojumiem ('00, 01, 10, 11ā€²) tieÅ”i pusei ir vienādas vērtÄ«bas, Å”eit viss ir vienkārÅ”i.

Bet, protams, ja mēs vienkārÅ”i paņemsim divus failus un pielāgosim vienu otrajam, tad vienu no tiem mēs zaudēsim. Ja saglabāsim izmaiņas, mēs vienkārÅ”i izgudrosim no jauna delta kodējums, kas lieliski eksistē bez mums, lai gan to parasti neizmanto tiem paÅ”iem mērÄ·iem. Mēs varam mēģināt iegult mazāku secÄ«bu lielākā, taču pat tādā gadÄ«jumā mēs riskējam zaudēt kritiskos datu segmentus, ja tos neapdomÄ«gi izmantosim ar visu.

Starp ko un ko tad var novērst atŔķirÄ«bu? Nu, tas ir, lietotāja rakstÄ«ts jauns fails ir tikai bitu secÄ«ba, ar kuru mēs paÅ”i neko nevaram izdarÄ«t. Tad tikai cietajā diskā jāatrod tādi biti, lai tos varētu nomainÄ«t, nesaglabājot starpÄ«bu, lai varētu pārdzÄ«vot to zaudējumu bez nopietnām sekām. Ir lietderÄ«gi mainÄ«t ne tikai paÅ”u FS failu, bet arÄ« kādu mazāk sensitÄ«vu informāciju tajā. Bet kurÅ” un kā?

PielāgoŔanas metodes

PalÄ«gā nāk zaudēti saspiesti faili. Visi Å”ie jpeg, mp3 un citi, lai arÄ« kompresijas ar zaudējumiem, satur virkni bitu, kurus var droÅ”i mainÄ«t. Ir iespējams izmantot progresÄ«vas metodes, kas nemanāmi pārveido to komponentus dažādos kodÄ“Å”anas posmos. Pagaidiet. Uzlabotas tehnikas... nemanāma modifikācija... viens mazliet citā... tas ir gandrÄ«z kā steganogrāfija!

PatieŔām, vienas informācijas iegulÅ”ana citā atgādina viņas metodes kā neko citu. Mani iespaido arÄ« cilvēka maņās veikto izmaiņu nemanāmÄ«ba. Ja ceļi atŔķiras, tas ir noslēpumā: mÅ«su uzdevums ir lietotājam ievadÄ«t papildu informāciju savā cietajā diskā; tas viņam tikai kaitēs. ViņŔ atkal aizmirsÄ«s.

Tāpēc, lai gan mēs varam tos izmantot, mums ir jāveic dažas izmaiņas. Un tad es tos pastāstÄ«Å”u un parādÄ«Å”u, izmantojot vienu no esoÅ”ajām metodēm un kopÄ«gu faila formātu.

Par Ŕakāļiem

Ja jÅ«s to patieŔām saspiežat, tā ir saspiežamākā lieta pasaulē. Mēs, protams, runājam par JPEG failiem. Ir ne tikai daudz rÄ«ku un esoÅ”o metožu datu iegulÅ”anai tajā, bet tas ir vispopulārākais grafikas formāts uz Ŕīs planētas.

Par dīvainu metodi cietā diska vietas taupīŔanai

Taču, lai nenodarbotos ar suņu audzÄ“Å”anu, Ŕāda formāta failos jāierobežo sava darbÄ«bas joma. Nevienam nepatÄ«k vienkrāsaini kvadrāti, kas parādās pārmērÄ«gas saspieÅ”anas dēļ, tāpēc jums ir jāierobežo darbs ar jau saspiestu failu, izvairoties no pārkodÄ“Å”anas. PrecÄ«zāk, ar veselu skaitļu koeficientiem, kas paliek pēc operācijām, kas ir atbildÄ«gas par datu zudumu - DCT un kvantÄ“Å”anu, kas lieliski tiek parādÄ«ta kodÄ“Å”anas shēmā (pateicoties Baumaņas Nacionālās bibliotēkas wiki):
Par dīvainu metodi cietā diska vietas taupīŔanai

Ir daudzas iespējamās metodes jpeg failu optimizÄ“Å”anai. Ir optimizācija bez zudumiem (jpegtran), ir optimizācija "nekādu zaudējumuā€œ, kas patiesÄ«bā veicina kaut ko citu, taču mums par tiem nerÅ«p. Galu galā, ja lietotājs ir gatavs iegult vienu informāciju citā, lai palielinātu brÄ«vo vietu diskā, tad viņŔ vai nu sen optimizēja savus attēlus, vai arÄ« nevēlas to darÄ«t vispār, baidoties no kvalitātes zuduma.

F5

Å iem nosacÄ«jumiem atbilst vesela algoritmu saime, ar kuriem varat iepazÄ«ties Å”ajā labajā prezentācijā. Vismodernākais no tiem ir algoritms F5 Andreas Westfeld, strādājot ar spilgtuma komponenta koeficientiem, jo ā€‹ā€‹cilvēka acs ir vismazāk jutÄ«ga pret tā izmaiņām. Turklāt tajā tiek izmantota iegulÅ”anas tehnika, kuras pamatā ir matricas kodējums, kas ļauj veikt mazāk izmaiņu, iegulstot tādu paÅ”u informācijas daudzumu, jo lielāks ir izmantotā konteinera izmērs.

PaÅ”as izmaiņas noved pie tā, ka noteiktos apstākļos (tas ir, ne vienmēr) tiek samazināta koeficientu absolÅ«tā vērtÄ«ba par vienu, kas ļauj izmantot F5, lai optimizētu datu glabāŔanu cietajā diskā. Lieta ir tāda, ka koeficients pēc Ŕādām izmaiņām, visticamāk, aizņems mazāk bitu pēc Hafmena kodÄ“Å”anas, jo vērtÄ«bu statistiskais sadalÄ«jums ir JPEG formātā, un jaunās nulles dos pieaugumu, kodējot tās, izmantojot RLE.

NepiecieÅ”amās modifikācijas ir saistÄ«tas ar to, ka tiek likvidēta daļa, kas ir atbildÄ«ga par slepenÄ«bu (paroles pārkārtoÅ”ana), kas ietaupa resursus un izpildes laiku, un tiek pievienots mehānisms darbam ar daudziem failiem, nevis pa vienam. Maz ticams, ka lasÄ«tāju interesēs izmaiņu process sÄ«kāk, tāpēc pāriesim pie ievieÅ”anas apraksta.

Augstās tehnoloģijas

Lai parādÄ«tu, kā Ŕī pieeja darbojas, es ieviesu metodi tÄ«rā C un veicu vairākas optimizācijas gan izpildes ātruma, gan atmiņas ziņā (jÅ«s nevarat iedomāties, cik daudz Å”ie attēli sver bez saspieÅ”anas, pat pirms DCT). Vairāku platformu, izmantojot bibliotēku kombināciju libjpeg, priekÅ” Šø tinydir, par ko mēs viņiem pateicamies. To visu saliek ā€œmakeā€, tāpēc Windows lietotāji vēlas paÅ”i instalēt kādu Cygwin, lai to novērtētu, vai arÄ« paÅ”i strādāt ar Visual Studio un bibliotēkām.

IevieÅ”ana ir pieejama konsoles utilÄ«ta un bibliotēkas veidā. Interesenti var uzzināt vairāk par pēdējo izmantoÅ”anu Github repozitorijā esoÅ”ajā readme, saiti, uz kuru es pievienoÅ”u ieraksta beigās.

Kā lietot?

UzmanÄ«gi. IesaiņoÅ”anai izmantotie attēli tiek atlasÄ«ti, meklējot, izmantojot regulāro izteiksmi dotajā saknes direktorijā. Pēc pabeigÅ”anas failus var pārvietot, pārdēvēt un kopēt pēc vēlÄ“Å”anās, mainÄ«t failus un operētājsistēmas utt. Tomēr jums jābÅ«t Ä«paÅ”i uzmanÄ«gam un nekādā veidā nemainiet tÅ«lÄ«tējo saturu. Pat viena bita vērtÄ«bas zaudÄ“Å”ana var padarÄ«t neiespējamu informācijas atgÅ«Å”anu.

Pēc pabeigÅ”anas utilÄ«ta atstāj Ä«paÅ”u arhÄ«va failu, kurā ir visa izpakoÅ”anai nepiecieÅ”amā informācija, tostarp dati par izmantotajiem attēliem. Pats par sevi tas sver apmēram pāris kilobaitus un tam nav bÅ«tiskas ietekmes uz aizņemto diska vietu.

Varat analizēt iespējamo ietilpÄ«bu, izmantojot karogu "-a": "./f5ar -a [meklÄ“Å”anas mape] [Ar Perl saderÄ«ga regulārā izteiksme]". IesaiņoÅ”ana tiek veikta ar komandu './f5ar -p [meklÄ“Å”anas mape] [ar Perl saderÄ«ga regulārā izteiksme] [iepakots fails] [arhÄ«va nosaukums]' un izpakoÅ”ana tiek veikta ar komandu './f5ar -u [arhÄ«va fails] [atkoptā faila nosaukums. ]' .

Darba demonstrēŔana

Lai parādÄ«tu metodes efektivitāti, es augÅ”upielādēju 225 absolÅ«ti bezmaksas suņu fotoattēlu kolekciju no pakalpojuma. Unsplash un atrada dokumentos lielu pdf 45 metrus no otrā sējuma ProgrammÄ“Å”anas māksla Knuta.

Secība ir pavisam vienkārŔa:

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

Ekrānuzņēmumi faniem

Par dīvainu metodi cietā diska vietas taupīŔanai

Izsaiņoto failu var un joprojām vajadzētu lasīt:

Par dīvainu metodi cietā diska vietas taupīŔanai

Kā redzat, no sākotnējiem 633 + 36 == 669 megabaitiem datu cietajā diskā mēs nonācām pie patÄ«kamākā 551. Šāda radikāla atŔķirÄ«ba ir izskaidrojama ar koeficientu vērtÄ«bu samazināŔanos, kas ietekmē to sekojoÅ”a bezzudumu saspieÅ”ana: samazinot pa vienam, var viegli ā€œnogriezt pāris baitus no gala faila. Tomēr tas joprojām ir datu zudums, kaut arÄ« ārkārtÄ«gi mazs, ar ko jums bÅ«s jāsamierinās.

Par laimi, tie ir absolÅ«ti neredzami acÄ«m. Zem spoilera (tā kā habrastorage nevar apstrādāt lielus failus) lasÄ«tājs var novērtēt atŔķirÄ«bu gan pēc acs, gan to intensitātes, kas iegÅ«ta, atņemot mainÄ«tā komponenta vērtÄ«bas no oriÄ£ināla: oriÄ£inālu, ar informāciju iekÅ”pusē, atŔķirÄ«ba (jo blāvāka krāsa, jo mazāka atŔķirÄ«ba blokā).

Tā vietā, lai noslēgtu

Ņemot vērā visas Ŕīs grÅ«tÄ«bas, cietā diska iegāde vai visa augÅ”upielāde mākonÄ« var Ŕķist daudz vienkārŔāks problēmas risinājums. Bet, lai arÄ« Å”obrÄ«d dzÄ«vojam tik brÄ«niŔķīgā laikā, nav garantijas, ka rÄ«t vēl bÅ«s iespējams pieslēgties tieÅ”saistē un kaut kur augÅ”upielādēt visus savus papildu datus. Vai arÄ« dodieties uz veikalu un iegādājieties sev vēl tÅ«kstoÅ” terabaitu cieto disku. Bet jÅ«s vienmēr varat izmantot esoŔās mājas.

-> GitHub

Avots: www.habr.com

Pievieno komentāru