Басқа пайдаланушы қатты дискіге деректердің жаңа бөлігін жазғысы келеді, бірақ оны орындау үшін оның бос орны жеткіліксіз. Мен ештеңені жойғым келмейді, өйткені «бәрі өте маңызды және қажет». Ал біз онымен не істеуіміз керек?
Бұл мәселе ешкімде жоқ. Біздің қатты дискілерде терабайт ақпарат бар және бұл сома азаймайды. Бірақ ол қаншалықты ерекше? Ақыр соңында, барлық файлдар белгілі бір ұзындықтағы биттердің жиынтығы болып табылады және, ең алдымен, жаңасы бұрыннан сақталғаннан айтарлықтай ерекшеленбейді.
Қатты дискіде сақталған ақпарат бөліктерін іздеу сәтсіздік болмаса, кем дегенде тиімді тапсырма емес екені анық. Екінші жағынан, егер айырмашылық аз болса, оны аздап реттеуге болады...
TL;DR - JPEG файлдарын пайдаланып деректерді оңтайландырудың біртүрлі әдісі туралы айтудың екінші әрекеті, енді түсінікті түрде.
Биттер және айырмашылықтар туралы
Егер сіз екі толық кездейсоқ деректер бөлігін алсаңыз, онда олардағы биттердің орта есеппен жартысы сәйкес келеді. Шынында да, әрбір жұп үшін ықтимал орналасулардың ('00, 01, 10, 11′) дәл жартысы бірдей мәндерге ие, мұнда бәрі қарапайым.
Бірақ, әрине, екі файлды алып, біреуін екіншісіне сыйғызсақ, олардың біреуін жоғалтамыз. Өзгерістерді сақтасақ, біз жай ғана қайта ойлап табамыз
Ненің және ненің арасындағы айырмашылықты жоюға болады? Яғни, пайдаланушы жазған жаңа файл - бұл биттердің тізбегі, онымен біз өздігінен ештеңе жасай алмаймыз. Содан кейін қатты дискіден мұндай биттерді табу керек, олар айырмашылықты сақтамай-ақ өзгертілуі мүмкін, осылайша сіз олардың жоғалуынан ауыр зардаптарсыз аман қалуыңыз мүмкін. Тек FS ішіндегі файлды ғана емес, оның ішіндегі кейбір құпия ақпаратты өзгерту мағынасы бар. Бірақ қайсысы және қалай?
Орнату әдістері
Шығын сығылған файлдар көмекке келеді. Барлық осы jpeg файлдары, mp3 файлдары және басқалары жоғалтатын қысу болса да, қауіпсіз өзгертуге болатын көптеген биттерді қамтиды. Кодтаудың әртүрлі кезеңдерінде олардың құрамдастарын сезілмейтін түрде өзгертетін жетілдірілген әдістерді қолдануға болады. Күте тұрыңыз. Жетілдірілген әдістер... сезілмейтін модификация... бір бит екіншісіне... бұл дерлік
Шынында да, бір ақпаратты екіншісіне енгізу оның әдістерін басқа ештеңе сияқты еске салады. Адамның сезім мүшелеріне енгізілген өзгерістердің байқалмайтындығына да тәнтімін. Жолдар алшақтайтын жерде құпиялылық: біздің міндетіміз пайдаланушының қатты дискіге қосымша ақпаратты енгізуіне түседі, бұл оған тек зиян тигізеді. Ол қайтадан ұмытады.
Сондықтан, біз оларды пайдалана алатын болсақ та, кейбір өзгертулер енгізуіміз керек. Содан кейін мен оларды бар әдістердің бірін және жалпы файл пішімін мысалға ала отырып айтамын және көрсетемін.
Шақалдар туралы
Егер сіз оны шынымен қыссаңыз, бұл әлемдегі ең қысылатын нәрсе. Біз, әрине, JPEG файлдары туралы айтып отырмыз. Оған деректерді енгізудің көптеген құралдары мен бар әдістері ғана емес, сонымен қатар бұл планетадағы ең танымал графикалық пішім.
Дегенмен, ит өсірумен айналыспау үшін осы форматтағы файлдардағы қызмет саласын шектеу керек. Шамадан тыс қысу нәтижесінде пайда болатын монохромды квадраттарды ешкім ұнатпайды, сондықтан сіз қысылған файлмен жұмыс істеуге шектеу қоюыңыз керек, қайта кодтауды болдырмау. Нақтырақ айтқанда, деректердің жоғалуына жауапты операциялардан кейін қалатын бүтін коэффициенттермен - кодтау схемасында тамаша көрсетілген DCT және кванттау (Бауман Ұлттық кітапханасының вики арқасында):
jpeg файлдарын оңтайландырудың көптеген мүмкін әдістері бар. Шығынсыз оңтайландыру бар (jpegtran), оңтайландыру бар »
F5
Алгоритмдердің тұтас тобы осы шарттарға сәйкес келеді, олармен танысуға болады
Өзгерістердің өзі белгілі бір жағдайларда (яғни, әрқашан емес) коэффициенттердің абсолютті мәнін біреуге азайтуға дейін төмендейді, бұл қатты дискідегі деректерді сақтауды оңтайландыру үшін F5 функциясын пайдалануға мүмкіндік береді. Мәселе мынада, мұндай өзгерістен кейінгі коэффициент JPEG форматындағы мәндердің статистикалық таралуына байланысты Хаффман кодтауынан кейін азырақ биттерді алады және жаңа нөлдер оларды RLE көмегімен кодтау кезінде пайда береді.
Қажетті модификациялар ресурстар мен орындау уақытын үнемдейтін құпиялылыққа жауапты бөлікті (парольді қайта реттеу) жоюға және бір уақытта бір файлдың орнына көптеген файлдармен жұмыс істеу механизмін қосуға дейін жетеді. Оқырманды өзгерту процесін толығырақ қызықтыруы екіталай, сондықтан енгізудің сипаттамасына көшейік.
Жоғары технологиялар
Бұл тәсілдің қалай жұмыс істейтінін көрсету үшін мен әдісті таза C тілінде енгіздім және орындау жылдамдығы мен жады бойынша бірқатар оңтайландыруларды орындадым (сіз бұл суреттердің салмағы DCT-ге дейін қысылмай қанша салмақ түсіретінін елестете алмайсыз). Кросс-платформаға кітапханалар тіркесімін қолдану арқылы қол жеткізілді
Іске асыру консольдік утилита және кітапхана түрінде қол жетімді. Қызығушылық танытқандар соңғыны пайдалану туралы қосымша ақпаратты Github репозиторийіндегі Readme бөлімінде біле алады, сілтемені мен посттың соңында қосамын.
Қалай пайдалануға болады?
Мұқият. Орау үшін пайдаланылатын кескіндер берілген түбірлік каталогта тұрақты өрнекті пайдаланып іздеу арқылы таңдалады. Аяқтағаннан кейін файлдарды оның шекаралары шегінде қалауы бойынша жылжытуға, атын өзгертуге және көшіруге, файлды және операциялық жүйелерді өзгертуге және т.б. болады. Дегенмен, өте сақ болу керек және тікелей мазмұнды ешбір жолмен өзгертпеу керек. Тіпті бір биттің мәнін жоғалту ақпаратты қалпына келтіруді мүмкін етпеуі мүмкін.
Аяқтағаннан кейін қызметтік бағдарлама орамнан шығаруға қажетті барлық ақпаратты, соның ішінде пайдаланылған кескіндер туралы деректерді қамтитын арнайы мұрағаттық файлды қалдырады. Өздігінен оның салмағы бірнеше килобайтты құрайды және дискідегі бос орынға айтарлықтай әсер етпейді.
Мүмкін сыйымдылықты '-a' жалауын пайдаланып талдауға болады: './f5ar -a [іздеу қалтасы] [Perl-үйлесімді тұрақты өрнек]'. Буып-түю './f5ar -p [қалтаны іздеу] [Perl-үйлесімді тұрақты өрнек] [бумаланған файл] [мұрағат атауы]' пәрменімен және './f5ar -u [архивтік файл] [қалпына келтірілген файл атауымен қаптамадан шығару» пәрменімен орындалады. ]' .
Жұмысты көрсету
Әдістің тиімділігін көрсету үшін мен сервистен иттердің 225 мүлдем тегін фотосуреттерінің жинағын жүктедім.
Жүйе өте қарапайым:
$ 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-ге келдік. Мұндай түбегейлі айырмашылық олардың мәніне әсер ететін коэффициенттер мәндерінің төмендеуімен түсіндіріледі. кейінгі шығынсыз қысу: бір-бірден қысқарту «соңғы файлдан бірнеше байтты оңай кесіп тастауға болады. Дегенмен, бұл өте аз болса да, әлі де деректердің жоғалуы, оған төтеп беруге тура келеді.
Бақытымызға орай, олар көзге мүлдем көрінбейді. Спойлер астында (габрастораж үлкен файлдарды өңдей алмайтындықтан) оқырман айырмашылықты көзбен де, түпнұсқадан өзгертілген компоненттің мәндерін шегеру арқылы алынған олардың қарқындылығын бағалай алады:
Орнына жасасу
Барлық осы қиындықтарды ескере отырып, қатты диск сатып алу немесе барлығын бұлтқа жүктеп салу мәселенің әлдеқайда қарапайым шешімі болып көрінуі мүмкін. Бірақ біз қазір осындай тамаша уақытта өмір сүріп жатқанымызға қарамастан, ертең Интернетке кіріп, барлық қосымша деректеріңізді бір жерге жүктеп салуға болатынына кепілдік жоқ. Немесе дүкенге барып, өзіңізге тағы бір мың терабайт қатты диск сатып алыңыз. Бірақ сіз әрқашан бар үйлерді пайдалана аласыз.
->
Ақпарат көзі: www.habr.com