Қатты дискідегі орынды үнемдеудің біртүрлі әдісі туралы

Басқа пайдаланушы қатты дискіге деректердің жаңа бөлігін жазғысы келеді, бірақ оны орындау үшін оның бос орны жеткіліксіз. Мен ештеңені жойғым келмейді, өйткені «бәрі өте маңызды және қажет». Ал біз онымен не істеуіміз керек?

Бұл мәселе ешкімде жоқ. Біздің қатты дискілерде терабайт ақпарат бар және бұл сома азаймайды. Бірақ ол қаншалықты ерекше? Ақыр соңында, барлық файлдар белгілі бір ұзындықтағы биттердің жиынтығы болып табылады және, ең алдымен, жаңасы бұрыннан сақталғаннан айтарлықтай ерекшеленбейді.

Қатты дискіде сақталған ақпарат бөліктерін іздеу сәтсіздік болмаса, кем дегенде тиімді тапсырма емес екені анық. Екінші жағынан, егер айырмашылық аз болса, оны аздап реттеуге болады...

Қатты дискідегі орынды үнемдеудің біртүрлі әдісі туралы

TL;DR - JPEG файлдарын пайдаланып деректерді оңтайландырудың біртүрлі әдісі туралы айтудың екінші әрекеті, енді түсінікті түрде.

Биттер және айырмашылықтар туралы

Егер сіз екі толық кездейсоқ деректер бөлігін алсаңыз, онда олардағы биттердің орта есеппен жартысы сәйкес келеді. Шынында да, әрбір жұп үшін ықтимал орналасулардың ('00, 01, 10, 11′) дәл жартысы бірдей мәндерге ие, мұнда бәрі қарапайым.

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

Ненің және ненің арасындағы айырмашылықты жоюға болады? Яғни, пайдаланушы жазған жаңа файл - бұл биттердің тізбегі, онымен біз өздігінен ештеңе жасай алмаймыз. Содан кейін қатты дискіден мұндай биттерді табу керек, олар айырмашылықты сақтамай-ақ өзгертілуі мүмкін, осылайша сіз олардың жоғалуынан ауыр зардаптарсыз аман қалуыңыз мүмкін. Тек FS ішіндегі файлды ғана емес, оның ішіндегі кейбір құпия ақпаратты өзгерту мағынасы бар. Бірақ қайсысы және қалай?

Орнату әдістері

Шығын сығылған файлдар көмекке келеді. Барлық осы jpeg файлдары, mp3 файлдары және басқалары жоғалтатын қысу болса да, қауіпсіз өзгертуге болатын көптеген биттерді қамтиды. Кодтаудың әртүрлі кезеңдерінде олардың құрамдастарын сезілмейтін түрде өзгертетін жетілдірілген әдістерді қолдануға болады. Күте тұрыңыз. Жетілдірілген әдістер... сезілмейтін модификация... бір бит екіншісіне... бұл дерлік стеганография!

Шынында да, бір ақпаратты екіншісіне енгізу оның әдістерін басқа ештеңе сияқты еске салады. Адамның сезім мүшелеріне енгізілген өзгерістердің байқалмайтындығына да тәнтімін. Жолдар алшақтайтын жерде құпиялылық: біздің міндетіміз пайдаланушының қатты дискіге қосымша ақпаратты енгізуіне түседі, бұл оған тек зиян тигізеді. Ол қайтадан ұмытады.

Сондықтан, біз оларды пайдалана алатын болсақ та, кейбір өзгертулер енгізуіміз керек. Содан кейін мен оларды бар әдістердің бірін және жалпы файл пішімін мысалға ала отырып айтамын және көрсетемін.

Шақалдар туралы

Егер сіз оны шынымен қыссаңыз, бұл әлемдегі ең қысылатын нәрсе. Біз, әрине, JPEG файлдары туралы айтып отырмыз. Оған деректерді енгізудің көптеген құралдары мен бар әдістері ғана емес, сонымен қатар бұл планетадағы ең танымал графикалық пішім.

Қатты дискідегі орынды үнемдеудің біртүрлі әдісі туралы

Дегенмен, ит өсірумен айналыспау үшін осы форматтағы файлдардағы қызмет саласын шектеу керек. Шамадан тыс қысу нәтижесінде пайда болатын монохромды квадраттарды ешкім ұнатпайды, сондықтан сіз қысылған файлмен жұмыс істеуге шектеу қоюыңыз керек, қайта кодтауды болдырмау. Нақтырақ айтқанда, деректердің жоғалуына жауапты операциялардан кейін қалатын бүтін коэффициенттермен - кодтау схемасында тамаша көрсетілген DCT және кванттау (Бауман Ұлттық кітапханасының вики арқасында):
Қатты дискідегі орынды үнемдеудің біртүрлі әдісі туралы

jpeg файлдарын оңтайландырудың көптеген мүмкін әдістері бар. Шығынсыз оңтайландыру бар (jpegtran), оңтайландыру бар »шығын жоқ«, бұл шын мәнінде басқа нәрсеге үлес қосады, бірақ біз оларға мән бермейміз. Ақыр соңында, егер пайдаланушы бос дискілік кеңістікті ұлғайту үшін бір ақпаратты екіншісіне ендіруге дайын болса, онда ол суреттерін әлдеқашан оңтайландырған немесе сапаны жоғалтудан қорқып, мұны мүлде жасағысы келмейді.

F5

Алгоритмдердің тұтас тобы осы шарттарға сәйкес келеді, олармен танысуға болады бұл жақсы презентацияда. Олардың ішіндегі ең жетілдірілгені – алгоритм F5 Андреас Вестфельд, жарықтық компонентінің коэффициенттерімен жұмыс істейді, өйткені адам көзі оның өзгерістеріне ең аз сезімтал. Сонымен қатар, ол матрицалық кодтауға негізделген ендіру техникасын пайдаланады, бұл ақпараттың бірдей көлемін ендіру кезінде, пайдаланылатын контейнердің өлшемі неғұрлым үлкен болса, азырақ өзгертулер енгізуге мүмкіндік береді.

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

Қажетті модификациялар ресурстар мен орындау уақытын үнемдейтін құпиялылыққа жауапты бөлікті (парольді қайта реттеу) жоюға және бір уақытта бір файлдың орнына көптеген файлдармен жұмыс істеу механизмін қосуға дейін жетеді. Оқырманды өзгерту процесін толығырақ қызықтыруы екіталай, сондықтан енгізудің сипаттамасына көшейік.

Жоғары технологиялар

Бұл тәсілдің қалай жұмыс істейтінін көрсету үшін мен әдісті таза C тілінде енгіздім және орындау жылдамдығы мен жады бойынша бірқатар оңтайландыруларды орындадым (сіз бұл суреттердің салмағы DCT-ге дейін қысылмай қанша салмақ түсіретінін елестете алмайсыз). Кросс-платформаға кітапханалар тіркесімін қолдану арқылы қол жеткізілді libjpeg, дана и tinydir, бұл үшін біз оларға алғыс айтамыз. Мұның бәрі «жасау» арқылы біріктірілген, сондықтан Windows пайдаланушылары бағалау үшін өздері үшін кейбір Cygwin орнатқысы келеді немесе Visual Studio және кітапханалармен өз бетінше айналысқысы келеді.

Іске асыру консольдік утилита және кітапхана түрінде қол жетімді. Қызығушылық танытқандар соңғыны пайдалану туралы қосымша ақпаратты Github репозиторийіндегі Readme бөлімінде біле алады, сілтемені мен посттың соңында қосамын.

Қалай пайдалануға болады?

Мұқият. Орау үшін пайдаланылатын кескіндер берілген түбірлік каталогта тұрақты өрнекті пайдаланып іздеу арқылы таңдалады. Аяқтағаннан кейін файлдарды оның шекаралары шегінде қалауы бойынша жылжытуға, атын өзгертуге және көшіруге, файлды және операциялық жүйелерді өзгертуге және т.б. болады. Дегенмен, өте сақ болу керек және тікелей мазмұнды ешбір жолмен өзгертпеу керек. Тіпті бір биттің мәнін жоғалту ақпаратты қалпына келтіруді мүмкін етпеуі мүмкін.

Аяқтағаннан кейін қызметтік бағдарлама орамнан шығаруға қажетті барлық ақпаратты, соның ішінде пайдаланылған кескіндер туралы деректерді қамтитын арнайы мұрағаттық файлды қалдырады. Өздігінен оның салмағы бірнеше килобайтты құрайды және дискідегі бос орынға айтарлықтай әсер етпейді.

Мүмкін сыйымдылықты '-a' жалауын пайдаланып талдауға болады: './f5ar -a [іздеу қалтасы] [Perl-үйлесімді тұрақты өрнек]'. Буып-түю './f5ar -p [қалтаны іздеу] [Perl-үйлесімді тұрақты өрнек] [бумаланған файл] [мұрағат атауы]' пәрменімен және './f5ar -u [архивтік файл] [қалпына келтірілген файл атауымен қаптамадан шығару» пәрменімен орындалады. ]' .

Жұмысты көрсету

Әдістің тиімділігін көрсету үшін мен сервистен иттердің 225 мүлдем тегін фотосуреттерінің жинағын жүктедім. Unsplash және құжаттардан екінші томның 45 метрлік үлкен pdf файлын тапты Бағдарламалау өнері Кнута.

Жүйе өте қарапайым:

$ 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

Ақпарат көзі: www.habr.com

пікір қалдыру