ハヌドディスク容量を節玄する奇劙な方法に぀いお

別のナヌザヌは、新しいデヌタをハヌド ドラむブに曞き蟌みたいず考えおいたすが、これを実行するのに十分な空き容量がありたせん。 たた、「すべおが非垞に重芁で必芁なもの」なので、䜕も削陀したくありたせん。 そしおそれをどうすればいいのでしょうか

この問題を抱えおいる人はいたせん。 私たちのハヌドドラむブにはテラバむト単䜍の情報があり、この量は枛少する傟向がありたせん。 しかし、それはどれほどナニヌクなのでしょうか 結局のずころ、すべおのファむルは特定の長さのビットのセットにすぎず、おそらく、新しいファむルはすでに保存されおいるファむルずそれほど倉わりたせん。

ハヌド ドラむブに既に保存されおいる情報を怜玢するこずは、倱敗ではないにしおも、少なくずも効率的な䜜業ではないこずは明らかです。 逆に、差が小さい堎合は、少し調敎するこずもできたす...

ハヌドディスク容量を節玄する奇劙な方法に぀いお

TL;DR - JPEG ファむルを䜿甚しおデヌタを最適化する奇劙な方法に぀いお説明する XNUMX 回目の詊みで、よりわかりやすい圢匏になりたした。

ビットず違いに぀いお

完党にランダムな 00 ぀のデヌタを取埗した堎合、平均しお、それらに含たれるビットの半分が䞀臎したす。 実際、各ペア ('01、10、11、XNUMX') の可胜なレむアりトのうち、ちょうど半分が同じ倀を持ち、ここではすべおが単玔です。

しかし、もちろん、XNUMX ぀のファむルを取り出しお XNUMX ぀を XNUMX 番目のファむルに圓おはめるず、そのうちの XNUMX ぀が倱われたす。 倉曎を保存すれば、単に再発明するだけです デルタ゚ンコヌディング、通垞は同じ目的で䜿甚されたせんが、私たちなしでも完党に正垞に存圚したす。 小さなシヌケンスを倧きなシヌケンスに埋め蟌むこずもできたすが、それでも無謀にあらゆるものに䜿甚するず、デヌタの重芁なセグメントが倱われる危険がありたす。

では、䜕ず䜕の間で差をなくすこずができるのでしょうか ぀たり、ナヌザヌが曞き蟌んだ新しいファむルは単なるビットのシヌケンスであり、それ自䜓では䜕も実行できたせん。 次に、差分を保存せずに倉曎できるビットをハヌドドラむブ䞊で芋぀ければ、重倧な結果を招くこずなく玛倱しおも生き残るこずができたす。 そしお、FS 䞊のファむル自䜓を倉曎するだけでなく、その䞭にある機密性の䜎い情報も倉曎するこずは理にかなっおいたす。 しかし、どれをどのようにしお

フィッティング方法

非可逆圧瞮ファむルが圹に立ちたす。 これらすべおの JPEG、MP3 などは非可逆圧瞮ではありたすが、安党に倉曎できるビットが倧量に含たれおいたす。 ゚ンコヌドのさたざたな段階で、コンポヌネントを気づかれないうちに倉曎する高床な技術を䜿甚するこずが可胜です。 埅っお。 高床なテクニック... 目に芋えない倉曎... 少しず぀別のものに... それはほずんどのようです ステガノグラフィヌ!

実際、ある情報を別の情報に埋め蟌むずいう手法は、他に類を芋ない圌女の手法を圷圿ずさせたす。 たた、私は人間の感芚に加えられた倉化が知芚できないこずにも感銘を受けたした。 パスがどこで分岐するかは秘密です。私たちの仕事は、ナヌザヌがハヌド ドラむブに远加情報を入力するこずになりたすが、それはナヌザヌに害を及がすだけです。 圌はたた忘れおしたうだろう。

したがっお、䜿甚するこずはできたすが、いく぀かの倉曎を加える必芁がありたす。 次に、既存の方法の XNUMX ぀ず䞀般的なファむル圢匏の䟋を䜿甚しお説明し、瀺したす。

ゞャッカルに぀いお

本圓に絞るず、䞖界で最も圧瞮しやすいものになりたす。 もちろん、JPEG ファむルに぀いお話しおいたす。 デヌタを埋め蟌むためのツヌルや既存の方法がたくさんあるだけでなく、これは地球䞊で最も人気のあるグラフィック圢匏です。

ハヌドディスク容量を節玄する奇劙な方法に぀いお

ただし、犬の繁殖に埓事しないためには、この圢匏のファむルでの掻動分野を制限する必芁がありたす。 過剰な圧瞮によっお衚瀺される癜黒の四角圢を奜む人はいないため、すでに圧瞮されたファむルを䜿甚するように制限する必芁がありたす。 再コヌディングの回避。 より具䜓的には、デヌタ損倱の原因ずなる操䜜 (DCT ず量子化) の埌に残る敎数係数を䜿甚したす。これは、゚ンコヌド スキヌムで完党に衚瀺されたす (バりマン囜立図曞通の wiki のおかげで)。
ハヌドディスク容量を節玄する奇劙な方法に぀いお

jpeg ファむルを最適化するには、さたざたな方法が考えられたす。 ロスレス最適化jpegtranあり、最適化あり」損倱は​​ありたせん」、実際には他のこずに貢献したすが、私たちはそれらを気にしたせん。 結局のずころ、ナヌザヌがディスクの空き容量を増やすためにある情報を別の情報に埋め蟌む準備ができおいる堎合は、ずっず前に画像を最適化したか、品質の䜎䞋を恐れおこれをたったく実行したくないかのどちらかです。

F5

アルゎリズムのファミリヌ党䜓がこれらの条件に適合するため、よく理解しおおくこずができたす。 この良いプレれンテヌションで。 その䞭で最も先進的なのがアルゎリズムです F5 アンドレアス・りェストフェルドによる、人間の目はその倉化に察しお最も鈍感であるため、明るさ成分の係数を操䜜したす。 さらに、マトリックス゚ンコヌディングに基づいた埋め蟌み技術を䜿甚しおいるため、同じ量の情報を埋め蟌む堎合、䜿甚するコンテナのサむズが倧きいほど、より少ない倉曎を加えるこずができたす。

倉曎自䜓は、芁玄するず、特定の条件䞋 (぀たり、垞にではありたせん) で係数の絶察倀を 5 枛らすこずであり、FXNUMX キヌを䜿甚しおハヌド ドラむブ䞊のデヌタ ストレヌゞを最適化できるようになりたす。 重芁なのは、JPEG の倀の統蚈的分垃により、そのような倉曎埌の係数がハフマン ゚ンコヌド埌に占有するビットが少なくなる可胜性が高く、RLE を䜿甚しお゚ンコヌドするずきに新しいれロがゲむンを䞎えるずいうこずです。

必芁な倉曎は、芁するに、機密性を担う郚分 (パスワヌドの再配眮) を削陀しおリ゜ヌスず実行時間を節玄し、䞀床に XNUMX ぀ず぀ではなく倚数のファむルを操䜜するためのメカニズムを远加するこずです。 読者は倉曎プロセスの詳现には興味がないず思われるので、実装の説明に移りたしょう。

ハむテク

このアプロヌチがどのように機胜するかを実蚌するために、このメ゜ッドを玔粋な C で実装し、実行速床ずメモリの䞡方の点で倚くの最適化を実行したした (DCT を䜿甚する前であっおも、圧瞮なしでこれらの画像の重さがどれほどになるか想像するこずもできたせん)。 ラむブラリを組み合わせおクロスプラットフォヌムを実珟 libjpeg, PCRE О 小さなディレクトリ、私たちは圌らに感謝しおいたす。 これらはすべお「make」によっおたずめられるため、Windows ナヌザヌは評䟡甚に自分甚に Cygwin をむンストヌルするか、Visual Studio ずラむブラリを自分で扱う必芁がありたす。

この実装は、コン゜ヌル ナヌティリティおよびラむブラリの圢匏で利甚できたす。 興味のある方は、Github のリポゞトリにある Readme で埌者の䜿甚方法の詳现を確認しおください。このリンクぞのリンクは投皿の最埌に添付したす。

どのように䜿甚する

気を぀けお。 パッケヌゞ化に䜿甚されるむメヌゞは、指定されたルヌト ディレクトリで正芏衚珟を䜿甚しお怜玢するこずによっお遞択されたす。 完了するず、ファむルはその境界内で自由に移動、名前倉曎、コピヌしたり、ファむルやオペレヌティング システムを倉曎したりするこずができたす。ただし、现心の泚意を払っお、盎接の内容を決しお倉曎しないでください。 XNUMX ビットでも倀が倱われるず、情報を埩元できなくなる可胜性がありたす。

完了するず、ナヌティリティは、䜿甚されたむメヌゞに関するデヌタなど、解凍に必芁なすべおの情報を含む特別なアヌカむブ ファむルを残したす。 それ自䜓の重さは玄数キロバむトで、占有されるディスク領域に重倧な圱響を䞎えるこずはありたせん。

「-a」フラグ「./f5ar -a [怜玢フォルダヌ] [Perl 互換の正芏衚珟]」を䜿甚しお、可胜な容量を分析できたす。 パッキングはコマンド「./f5ar -p [怜玢フォルダヌ] [Perl 互換の正芏衚珟] [パックされたファむル] [アヌカむブ名]」で行われ、アンパックは「./f5ar -u [アヌカむブ ファむル] [埩元されたファむル名]」で行われたす。 ]' 。

仕事のデモンストレヌション

この方法の有効性を瀺すために、このサヌビスから完党無料の犬の写真 225 枚のコレクションをアップロヌドしたした。 Unsplash そしお文曞の䞭に、第45巻のXNUMXメヌトルの倧きな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 に到達したした。このような根本的な違いは、係数の倀の枛少によっお説明され、係数の倀に圱響を䞎えたす。その埌の可逆圧瞮: XNUMX ぀ず぀枛らすず、最終ファむルから数バむトを簡単に切り取るこずができたす。 ただし、非垞に小さいずはいえ、これはデヌタ損倱であるこずに倉わりはなく、我慢する必芁がありたす。

幞いなこずに、それらは目にはたったく芋えたせん。 スポむラヌの䞋では (habrastorage は倧きなファむルを凊理できないため)、読者は、元のコンポヌネントから倉曎されたコンポヌネントの倀を枛算するこずによっお埗られる、目ずその匷床の䞡方で違いを評䟡できたす。 原䜜, 䞭に情報が入っおいる, 違い (色がくすむほど、ブロックの差は小さくなりたす)。

代わりに、結論の

これらすべおの困難を考慮するず、ハヌドドラむブを賌入するか、すべおをクラりドにアップロヌドする方が、問題に察するはるかに簡単な解決策のように思えるかもしれたせん。 しかし、今は玠晎らしい時代に生きおいるずはいえ、明日もオンラむンにアクセスしお远加デヌタをすべおどこかにアップロヌドできるずいう保蚌はありたせん。 あるいは、店に行っお、さらに XNUMX テラバむトのハヌド ドラむブを賌入したす。 ただし、既存の家をい぀でも䜿甚できたす。

-> GitHubの

出所 habr.com

コメントを远加したす