Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

Дагы бир колдонуучу катуу дискке маалыматтын жаңы бөлүгүн жазгысы келет, бирок аны аткаруу үчүн бош орун жетишсиз. Мен дагы эч нерсени жок кылгым келбейт, анткени "баары абдан маанилүү жана зарыл." Анан аны менен эмне кылышыбыз керек?

Бул көйгөй эч кимде жок. Биздин катуу дисктерде терабайт маалымат бар жана бул сумма азайбайт. Бирок ал канчалык уникалдуу? Акыр-аягы, бардык файлдар белгилүү бир узундуктагы биттердин жыйындысы жана, кыязы, жаңысы буга чейин сакталган файлдан анча деле айырмаланбайт.

Катуу дискте сакталган маалыматтарды издөө, эгер ийгиликсиз болбосо, анда натыйжалуу иш эмес экендиги түшүнүктүү. Башка жагынан алганда, эгерде айырма аз болсо, анда сиз аны бир аз тууралай аласыз ...

Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

TL;DR - JPEG файлдарын колдонуу менен маалыматтарды оптималдаштыруунун кызыктай ыкмасы жөнүндө сөз кылуунун экинчи аракети, азыр түшүнүктүү түрдө.

Биттер жана айырмачылыктар жөнүндө

Эгерде сиз эки такыр кокус маалымат бөлүктөрүн алсаңыз, анда алар камтылган биттердин орто эсеп менен жарымы дал келет. Чынында эле, ар бир жуп үчүн мүмкүн болгон макеттердин арасында ('00, 01, 10, 11′), так жарымы бирдей мааниге ээ, бул жерде баары жөнөкөй.

Бирок, албетте, эки файлды алып, бирин экинчисине туура келтирсек, алардын бирин жоготуп алабыз. Өзгөртүүлөрдү сактасак, биз жөн гана ойлоп табабыз дельта коддоо, ал бизсиз жакшы жашайт, бирок ал, адатта, бир эле максаттарда колдонулбайт. Биз кичине ырааттуулукту чоңураак ырааттуулукка киргизүүгө аракет кылсак болот, бирок ошентсе да, биз аны бардык нерсеге этиятсыздык менен колдонсок, маалыматтардын маанилүү сегменттерин жоготуп алуу коркунучу бар.

Эмне жана эмненин ортосундагы айырманы жок кылууга болот? Башкача айтканда, колдонуучу жазган жаңы файл бул жөн гана биттердин ырааттуулугу, алар менен биз өз алдынча эч нерсе кыла албайбыз. Андан кийин сиз жөн гана катуу дисктен ушундай биттерди табышыңыз керек, алар айырманы сактабастан өзгөртсө болот, андыктан олуттуу кесепеттерсиз жоготуудан аман кала аласыз. Ал эми ФСтин өзүндөгү файлды эле эмес, анын ичиндеги анча сезилбеген маалыматты өзгөртүү мааниси бар. Бирок кайсынысы жана кантип?

Орнотуу ыкмалары

Жоголгон кысылган файлдар жардамга келет. Бардык бул jpegs, mp3s жана башкалар, бирок жоготуу менен кысуу, бирок, коопсуз өзгөртүүгө болот биттердин бир тутам. Коддоштуруунун ар кандай этаптарында алардын компоненттерин сезилбестен өзгөрткөн алдыңкы ыкмаларды колдонууга болот. Күтө тур. Өркүндөтүлгөн ыкмалар... байкалбаган өзгөртүү... бир бит экинчисине... дээрлик окшош стеганография!

Чынында эле, бир маалыматты башкасына киргизүү анын ыкмаларын башка эч нерседей элестетет. Адамдын сездеруне жасалган езгеруулердун сезилбестиги да мени суктандырды. Жолдор бири-биринен ажыраган жерде жашыруун болот: биздин милдет колдонуучуга өзүнүн катуу дискине кошумча маалыматты киргизүүгө туура келет; бул ага зыян гана алып келет. Ал кайра унутат.

Ошондуктан, биз аларды колдоно алабыз да, биз кээ бир өзгөртүүлөрдү киргизүү керек. Анан мен аларга учурдагы ыкмалардын биринин жана жалпы файл форматынын мисалында айтып берем жана көрсөтөм.

Чөөлөр жөнүндө

Эгер сиз аны чындап кысып алсаңыз, бул дүйнөдөгү эң кысылган нерсе. Биз, албетте, JPEG файлдары жөнүндө сөз болуп жатат. Маалыматтарды киргизүү үчүн көптөгөн куралдар жана ыкмалары бар гана эмес, бул планетадагы эң популярдуу графикалык формат.

Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

Бирок, ит багуу менен алектенбеш үчүн, бул форматтагы файлдарда өзүңүздүн иш чөйрөңүздү чектөө керек. Ашыкча кысуудан улам пайда болгон монохромдук квадраттарды эч ким жактырбайт, андыктан сиз кысылган файл менен иштөө менен чектелишиңиз керек, кайра коддоодон качуу. Тактап айтканда, маалыматтардын жоголушуна жооптуу операциялардан кийин калган бүтүн сан коэффициенттери менен - ​​коддоо схемасында эң сонун чагылдырылган DCT жана квантташтыруу (Бауман Улуттук китепканасынын викисинин аркасында):
Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

Jpeg файлдарын оптималдаштыруунун көптөгөн мүмкүн болгон ыкмалары бар. Жоопсуз оптималдаштыруу (jpegtran) бар, оптималдаштыруу бар "жоготуу жок", бул чындыгында дагы бир нерсеге салым кошот, бирок биз аларга маани бербейбиз. Анткени, колдонуучу бош диск мейкиндигин көбөйтүү үчүн бир маалыматты башкасына киргизүүгө даяр болсо, анда ал сүрөттөрүн көп убакыт мурун оптималдаштырган, же сапатын жоготуп алуудан коркуп, муну такыр каалабайт.

F5

Алгоритмдердин бүтүндөй үй-бүлөсү бул шарттарга туура келет, алар менен тааныша аласыз бул жакшы презентацияда. Алардын ичинен эң алдыңкысы – алгоритм F5 жарыктык компонентинин коэффициенттери менен иштеген Андреас Вестфельд, анткени адамдын көзү анын өзгөрүүлөрүнө эң аз сезгич. Мындан тышкары, ал матрицалык коддоштурууга негизделген кыстаруу ыкмасын колдонот, бул маалыматтын бирдей көлөмүн киргизүүдө, колдонулган контейнердин көлөмү канчалык чоң болсо, азыраак өзгөртүүлөрдү киргизүүгө мүмкүндүк берет.

Өзгөртүүлөрдүн өзүлөрү белгилүү бир шарттарда коэффициенттердин абсолюттук маанисин бирге азайтат (башкача айтканда, ар дайым эмес), бул сиздин катуу дискиңизде маалыматтарды сактоону оптималдаштыруу үчүн F5ти колдонууга мүмкүндүк берет. Кеп мындай өзгөрүүдөн кийинки коэффициент JPEG форматындагы маанилердин статистикалык бөлүштүрүлүшүнө байланыштуу Хаффман коддоосунан кийин азыраак биттерди ээлейт жана жаңы нөлдөр аларды RLE аркылуу коддоодо пайда берет.

Керектүү өзгөртүүлөр сырды сактоо үчүн жооптуу бөлүктү жок кылууга (сырсөздү кайра түзүү), бул ресурстарды жана аткаруу убактысын үнөмдөөгө жана бир эле учурда бир эмес, көп файлдар менен иштөө механизмин кошууга чейин жетет. Окурман дагы майда-чүйдөсүнө чейин өзгөртүү жараянына кызыкдар болушу күмөн, ошондуктан ишке ашыруунун сүрөттөмөсүнө өтүү.

бийик-Tech

Бул ыкма кандайча иштээрин көрсөтүү үчүн, мен таза C ыкмасын ишке ашырдым жана аткаруу ылдамдыгы жана эс тутуму жагынан бир катар оптималдаштырууларды жүргүздүм (сиз бул сүрөттөрдүн салмагын DCTге чейин кысуусуз элестете албайсыз). Кросс-платформа китепканалардын айкалышы аркылуу жетишилген libjpeg, pcre и tinydir, бул үчүн биз аларга ыраазычылык билдиребиз. Мунун баары "жасатуу" аркылуу чогултулган, андыктан Windows колдонуучулары баалоо үчүн Cygwinди өздөрү орнотуп, же Visual Studio жана китепканалар менен өз алдынча иштешүүнү каалашат.

Ишке ашыруу консолдук утилита жана китепкана түрүндө жеткиликтүү. Кызыккандар Github репозиторийиндеги Readme'ден акыркыны колдонуу жөнүндө көбүрөөк биле алышат, шилтемени мен посттун аягында тиркейм.

пайдалануу кандай?

Абайлагыла. Таңгактоо үчүн колдонулган сүрөттөр берилген түпкү каталогдогу кадимки туюнтманы колдонуп издөө аркылуу тандалат. Аяктагандан кийин, файлдарды анын чегинде жылдырууга, атын өзгөртүүгө жана каалагандай көчүрүүгө, файлды жана операциялык системаларды өзгөртүүгө ж.б.у.с. Бирок, өтө этият болушуңуз керек жана кандайдыр бир жол менен дароо мазмунду өзгөртпөшүңүз керек. Бир биттин маанисин жоготуп алуу маалыматты калыбына келтирүүгө мүмкүн болбой калышы мүмкүн.

Аяктагандан кийин, утилита пакеттен чыгаруу үчүн зарыл болгон бардык маалыматты, анын ичинде колдонулган сүрөттөр жөнүндө маалыматтарды камтыган атайын архивдик файлды калтырат. Ал өзүнөн-өзү бир нече килобайтты түзөт жана дисктин ээлеген мейкиндигине олуттуу таасир этпейт.

Мүмкүн болгон кубаттуулукту '-a' желегинин жардамы менен талдай аласыз: './f5ar -a [издөө папкасы] [Perl менен шайкеш регулярдуу туюнтма]'. Таңгактоо './f5ar -p [издөө папка] [Perl-шайкеш регулярдуу туюнтма] [пакеттелген файл] [архивдин аталышы]' буйругу менен, ал эми таңгактан чыгаруу './f5ar -u [архивдик файл] [калыбына келтирилген файлдын аталышы менен аткарылат. ]' .

Эмгектин демонстрациясы

Методдун натыйжалуулугун көрсөтүү үчүн мен кызматтан иттердин 225 таптакыр бекер сүрөттөрүнүн жыйнагын жүктөдүм. Unsplash жана документтерден экинчи томдун 45 метр өлчөмүндөгү чоң pdf табылган Программалоо искусствосу Knuta.

ырааттуулугу абдан жөнөкөй:

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

Күйөрмандар үчүн скриншоттор

Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

Пакеттен ажыратылган файл окула берет жана окула берет:

Катуу диск мейкиндигин үнөмдөөнүн кызыктай ыкмасы жөнүндө

Көрүнүп тургандай, катуу дисктеги оригиналдуу 633 + 36 == 669 мегабайт маалыматтан биз жагымдуураак 551ге келдик. Мындай радикалдуу айырма алардын таасирин тийгизген коэффициенттердин маанилеринин төмөндөшү менен түшүндүрүлөт. кийинки жоготуусуз кысуу: бир-бирден кыскартуу оңой эле " акыркы файлдан бир нече байтты кесип алат. Бирок, бул өтө кичинекей болсо да, дагы эле маалымат жоготуу, ага чыдашыңыз керек.

Бактыга жараша, алар көзгө таптакыр көрүнбөйт. Спойлердин астында (хабрастораж чоң файлдарды иштете албагандыктан) окурман айырманы көз менен да, алардын интенсивдүүлүгүн да баалай алат, өзгөртүлгөн компоненттин маанилерин түпнускадан алып салуу менен алынган: баштапкы, ичиндеги маалымат менен, айырма (түс канчалык күңүрт болсо, блоктун айырмасы ошончолук аз болот).

Ордуна корутундусу

Бардык ушул кыйынчылыктарды эске алып, катуу дискти сатып алуу же баарын булутка жүктөө маселенин бир топ жөнөкөй чечими сыяктуу сезилиши мүмкүн. Бирок биз азыр ушундай сонун мезгилде жашап жатканыбызга карабастан, эртең дагы эле интернетке кирип, бардык кошумча маалыматтарыңызды бир жерге жүктөй аласыз деген кепилдик жок. Же дүкөнгө барып, дагы миң терабайт катуу диск сатып алыңыз. Бирок сиз ар дайым бар үйлөрдү колдоно аласыз.

-> GitHub

Source: www.habr.com

Комментарий кошуу