Qattiq disk maydonini tejashning g'alati usuli haqida

Boshqa foydalanuvchi qattiq diskka yangi ma'lumot yozishni xohlaydi, lekin buning uchun uning bo'sh joyi etarli emas. Men ham hech narsani o'chirmoqchi emasman, chunki "hamma narsa juda muhim va zarur". Va u bilan nima qilishimiz kerak?

Hech kimda bu muammo yo'q. Qattiq disklarimizda terabaytlarcha ma'lumotlar mavjud va bu miqdor pasayishga moyil emas. Ammo u qanchalik o'ziga xos? Oxir-oqibat, barcha fayllar shunchaki ma'lum uzunlikdagi bitlar to'plamidir va, ehtimol, yangisi allaqachon saqlanganidan unchalik farq qilmaydi.

Qattiq diskda saqlangan ma'lumotlarning bo'laklarini qidirish, agar muvaffaqiyatsiz bo'lmasa, hech bo'lmaganda samarali vazifa emasligi aniq. Boshqa tomondan, agar farq kichik bo'lsa, unda siz uni biroz sozlashingiz mumkin ...

Qattiq disk maydonini tejashning g'alati usuli haqida

TL;DR - JPEG fayllari yordamida ma'lumotlarni optimallashtirishning g'alati usuli haqida gapirishga ikkinchi urinish, endi tushunarli shaklda.

Bitlar va farqlar haqida

Agar siz ikkita mutlaqo tasodifiy ma'lumotlarni olsangiz, ular o'z ichiga olgan bitlarning o'rtacha yarmi mos keladi. Darhaqiqat, har bir juftlik uchun mumkin bo'lgan tartiblar orasida ('00, 01, 10, 11') aynan yarmi bir xil qiymatlarga ega, bu erda hamma narsa oddiy.

Lekin, albatta, agar biz ikkita faylni olib, birini ikkinchisiga moslashtirsak, ulardan birini yo'qotamiz. Agar biz o'zgarishlarni saqlasak, biz shunchaki qayta ixtiro qilamiz delta kodlash, bu bizsiz juda yaxshi mavjud, garchi u odatda bir xil maqsadlarda ishlatilmasa ham. Biz kichikroq ketma-ketlikni kattaroq qatorga kiritishga harakat qilishimiz mumkin, ammo shunga qaramay, agar biz undan hamma narsada ehtiyotsizlik bilan foydalansak, ma'lumotlarning muhim segmentlarini yo'qotish xavfi bor.

Nima va nima o'rtasidagi farqni yo'q qilish mumkin? Ya'ni, foydalanuvchi tomonidan yozilgan yangi fayl shunchaki bitlar ketma-ketligi bo'lib, biz o'z-o'zidan hech narsa qila olmaymiz. Keyin siz qattiq diskda shunday bitlarni topishingiz kerakki, ular farqni saqlamasdan o'zgartirilishi mumkin, shunda siz jiddiy oqibatlarsiz ularning yo'qolishidan omon qolishingiz mumkin. Va nafaqat FS-dagi faylni, balki undagi ba'zi kamroq sezgir ma'lumotlarni o'zgartirish mantiqan. Lekin qaysi biri va qanday?

O'rnatish usullari

Yo'qotilgan siqilgan fayllar yordamga keladi. Ushbu jpeglar, mp3lar va boshqalar, garchi siqilish yo'qolgan bo'lsa ham, xavfsiz o'zgartirilishi mumkin bo'lgan bir qator bitlarni o'z ichiga oladi. Kodlashning turli bosqichlarida ularning tarkibiy qismlarini sezilmas tarzda o'zgartiradigan ilg'or usullardan foydalanish mumkin. Kutmoq. Ilg'or texnikalar... sezilmas modifikatsiya... bir bit ikkinchisiga... deyarli o'xshaydi steganografiya!

Darhaqiqat, bitta ma'lumotni boshqasiga joylashtirish uning usullarini boshqa hech narsa kabi eslatadi. Inson his-tuyg'ulariga kiritilgan o'zgarishlarning sezilmasligi ham meni hayratda qoldiradi. Yo'llar bir-biridan farq qiladigan joyda: bizning vazifamiz foydalanuvchining qattiq diskiga qo'shimcha ma'lumotlarni kiritishiga to'g'ri keladi, bu faqat unga zarar keltiradi. U yana unutadi.

Shuning uchun, biz ulardan foydalanishimiz mumkin bo'lsa-da, biz ba'zi o'zgartirishlar kiritishimiz kerak. Va keyin men ularni mavjud usullardan biri va umumiy fayl formati misolida aytib beraman va ko'rsataman.

Shoqollar haqida

Agar siz uni chindan ham siqib qo'ysangiz, bu dunyodagi eng siqilgan narsadir. Biz, albatta, JPEG fayllari haqida gapiramiz. Unga ma'lumotlarni joylashtirish uchun nafaqat ko'plab vositalar va mavjud usullar mavjud, balki bu sayyoradagi eng mashhur grafik formatdir.

Qattiq disk maydonini tejashning g'alati usuli haqida

Biroq, itlarni etishtirish bilan shug'ullanmaslik uchun siz ushbu formatdagi fayllardagi faoliyat sohangizni cheklashingiz kerak. Hech kim haddan tashqari siqilish tufayli paydo bo'ladigan monoxrom kvadratlarni yoqtirmaydi, shuning uchun siz allaqachon siqilgan fayl bilan ishlashni cheklashingiz kerak, qayta kodlashdan qochish. Aniqrog'i, ma'lumotlar yo'qolishi uchun javobgar bo'lgan operatsiyalardan keyin qoladigan butun son koeffitsientlari bilan - kodlash sxemasida mukammal ko'rsatilgan DCT va kvantlash (Bauman Milliy kutubxonasining wiki tufayli):
Qattiq disk maydonini tejashning g'alati usuli haqida

Jpeg fayllarini optimallashtirishning ko'plab mumkin bo'lgan usullari mavjud. Yo'qotishsiz optimallashtirish (jpegtran) mavjud, optimallashtirish mavjud "yo'qotish yo'q", bu aslida boshqa narsaga hissa qo'shadi, lekin biz ularga ahamiyat bermaymiz. Axir, agar foydalanuvchi bo'sh disk maydonini ko'paytirish uchun bitta ma'lumotni boshqasiga joylashtirishga tayyor bo'lsa, u o'z tasvirlarini ancha vaqt oldin optimallashtirgan yoki sifatni yo'qotishdan qo'rqib, buni umuman qilishni xohlamaydi.

F5

Algoritmlarning butun oilasi ushbu shartlarga mos keladi, ular bilan siz tanishishingiz mumkin bu yaxshi taqdimotda. Ularning eng ilg'orlari algoritmdir F5 Andreas Vestfeld tomonidan, yorqinlik komponentining koeffitsientlari bilan ishlash, chunki inson ko'zi uning o'zgarishlariga eng kam sezgir. Bundan tashqari, u matritsali kodlashga asoslangan joylashtirish texnikasidan foydalanadi, bu esa bir xil miqdordagi ma'lumotni joylashtirishda kamroq o'zgartirishlar kiritish imkonini beradi, ishlatiladigan konteyner hajmi qanchalik katta bo'lsa.

O'zgarishlarning o'zi ma'lum sharoitlarda (ya'ni har doim ham emas) koeffitsientlarning mutlaq qiymatini bittaga kamaytirishga olib keladi, bu sizga qattiq diskdagi ma'lumotlarni saqlashni optimallashtirish uchun F5 dan foydalanish imkonini beradi. Gap shundaki, bunday o'zgarishdan keyin koeffitsient JPEG-da qiymatlarning statistik taqsimoti tufayli Huffman kodlashdan keyin kamroq bitni egallaydi va yangi nollar ularni RLE yordamida kodlashda daromad keltiradi.

Kerakli o'zgartirishlar maxfiylik uchun mas'ul bo'lgan qismni yo'q qilish (parolni o'zgartirish), bu resurslarni va bajarish vaqtini tejaydi va bir vaqtning o'zida bir nechta fayllar bilan ishlash mexanizmini qo'shadi. O'quvchini o'zgartirish jarayonini batafsilroq qiziqtirishi dargumon, shuning uchun amalga oshirishning tavsifiga o'taylik.

Yuqori texnologiya

Ushbu yondashuv qanday ishlashini ko'rsatish uchun men usulni sof C-da amalga oshirdim va bajarish tezligi va xotira jihatidan bir qator optimallashtirishlarni amalga oshirdim (siz bu rasmlarning og'irligi DCT dan oldin ham siqilishsiz qanchalik og'irligini tasavvur qila olmaysiz). O'zaro platformalar kutubxonalar kombinatsiyasidan foydalangan holda erishildi libjpeg, dona ΠΈ kichikdir, buning uchun ularga minnatdorchilik bildiramiz. Bularning barchasi "yasalish" tomonidan birlashtiriladi, shuning uchun Windows foydalanuvchilari baholash uchun o'zlari uchun ba'zi Cygwin-ni o'rnatmoqchi yoki Visual Studio va kutubxonalar bilan mustaqil ravishda shug'ullanmoqchi.

Amalga oshirish konsol yordam dasturi va kutubxona ko'rinishida mavjud. Qiziqqanlar ikkinchisidan foydalanish haqida ko'proq ma'lumotni Github-dagi ombordagi readme-dan bilib olishlari mumkin, havolani men post oxirida qo'shaman.

Qanday foydalanish kerak?

Ehtiyotkorlik bilan. Qadoqlash uchun ishlatiladigan tasvirlar berilgan ildiz katalogida muntazam ifoda yordamida qidirish orqali tanlanadi. Tugallangach, fayllar o'z chegaralari doirasida o'z xohishiga ko'ra ko'chirilishi, nomini o'zgartirishi va nusxalanishi, fayl va operatsion tizimlarni o'zgartirishi mumkin va hokazo. Biroq, siz juda ehtiyot bo'lishingiz va darhol tarkibni hech qanday tarzda o'zgartirmasligingiz kerak. Bitta bit qiymatini yo'qotish ma'lumotni qayta tiklashni imkonsiz qilishi mumkin.

Tugatgandan so'ng, yordamchi dastur o'rash uchun zarur bo'lgan barcha ma'lumotlarni, shu jumladan ishlatilgan tasvirlar haqidagi ma'lumotlarni o'z ichiga olgan maxsus arxiv faylini qoldiradi. O'z-o'zidan, uning og'irligi bir necha kilobaytni tashkil qiladi va ishg'ol qilingan disk maydoniga sezilarli ta'sir ko'rsatmaydi.

Siz '-a' bayrog'i yordamida mumkin bo'lgan imkoniyatlarni tahlil qilishingiz mumkin: './f5ar -a [qidiruv papkasi] [Perl-mos muntazam ifoda]'. Qadoqlash './f5ar -p [qidiruv papkasi] [Perl-mos keluvchi oddiy ifoda] [qadoqlangan fayl] [arxiv nomi]' buyrug'i bilan amalga oshiriladi va './f5ar -u [arxiv fayli] [qayta tiklangan fayl nomi] bilan o'ramidan chiqariladi. ]'.

Ishning namoyishi

Usulning samaradorligini ko'rsatish uchun men xizmatdan itlarning 225 mutlaqo bepul fotosuratlari to'plamini yukladim. Unsplash va hujjatlarda ikkinchi jildning 45 metrli katta pdf faylini topdi Dasturlash san'ati Knuta.

Bu ketma-ketlik juda oddiy:

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

Muxlislar uchun skrinshotlar

Qattiq disk maydonini tejashning g'alati usuli haqida

Paketdan chiqarilgan fayl o'qilishi mumkin va o'qilishi kerak:

Qattiq disk maydonini tejashning g'alati usuli haqida

Ko'rib turganingizdek, qattiq diskdagi dastlabki 633 + 36 == 669 megabayt ma'lumotlardan biz yanada yoqimli 551 ga keldik. Bunday tub farq ularning koeffitsientlariga ta'sir qiluvchi koeffitsientlar qiymatlarining pasayishi bilan izohlanadi. keyingi yo'qotishsiz siqish: birma-bir qisqartirish "yakuniy fayldan bir necha baytni osongina kesib tashlashi mumkin. Biroq, bu juda kichik bo'lsa-da, baribir ma'lumotlar yo'qolishi, siz chidashingiz kerak bo'ladi.

Yaxshiyamki, ular ko'zga mutlaqo ko'rinmaydi. Spoyler ostida (habrastorage katta fayllar bilan ishlay olmaydi), o'quvchi farqni ko'z bilan ham, o'zgartirilgan komponentning qiymatlarini asl nusxadan ayirish orqali olingan ularning intensivligini baholashi mumkin: original, ichidagi ma'lumotlar bilan, farq (rang qanchalik xira bo'lsa, blokdagi farq shunchalik kichik bo'ladi).

Xulosa o'rniga

Bu barcha qiyinchiliklarni hisobga olsak, qattiq diskni sotib olish yoki hamma narsani bulutga yuklash muammoni hal qilish uchun ancha sodda bo'lib tuyulishi mumkin. Ammo biz hozir shunday ajoyib davrda yashayotgan bo'lsak ham, ertaga hali ham Internetga kirish va barcha qo'shimcha ma'lumotlarni biron bir joyga yuklash mumkin bo'lishiga kafolat yo'q. Yoki do'konga boring va o'zingizga yana ming terabayt qattiq disk sotib oling. Lekin siz har doim mavjud uylardan foydalanishingiz mumkin.

-> GitHub

Manba: www.habr.com

a Izoh qo'shish