حول طريقة غريبة لتوفير مساحة القرص الصلب

يريد مستخدم آخر كتابة جزء جديد من البيانات على القرص الصلب، لكن ليس لديه مساحة كافية للقيام بذلك. كما أنني لا أريد حذف أي شيء، لأن "كل شيء مهم وضروري للغاية". وماذا يجب أن نفعل به؟

لا أحد لديه هذه المشكلة. هناك تيرابايت من المعلومات على محركات الأقراص الثابتة لدينا، وهذا المبلغ لا يميل إلى الانخفاض. ولكن كم هو فريد من نوعه؟ في النهاية، جميع الملفات هي مجرد مجموعات من البتات ذات طول معين، وعلى الأرجح، لا يختلف الملف الجديد كثيرًا عن الملف المخزن بالفعل.

من الواضح أن البحث عن أجزاء من المعلومات المخزنة بالفعل على القرص الصلب يعد، إن لم يكن فشلاً، فهو على الأقل ليس مهمة فعالة. ومن ناحية أخرى، إذا كان الفرق صغيرا، فيمكنك تعديله قليلا ...

حول طريقة غريبة لتوفير مساحة القرص الصلب

TL;DR - المحاولة الثانية للحديث عن طريقة غريبة لتحسين البيانات باستخدام ملفات JPEG، والآن في شكل أكثر قابلية للفهم.

حول البتات والفرق

إذا أخذت قطعتين عشوائيتين تمامًا من البيانات، فإن نصف البتات التي تحتوي عليهما تتطابق في المتوسط. في الواقع، من بين التخطيطات المحتملة لكل زوج ('00، 01، 10، 11')، نصفها بالضبط لها نفس القيم، كل شيء بسيط هنا.

لكن بالطبع، إذا أخذنا ملفين فقط وقمنا بتركيب أحدهما في الثاني، فسنفقد أحدهما. إذا قمنا بحفظ التغييرات، فسنقوم ببساطة بإعادة الابتكار ترميز دلتا، والتي توجد بشكل جيد بدوننا، على الرغم من أنها لا تستخدم عادة لنفس الأغراض. يمكننا أن نحاول دمج تسلسل أصغر في تسلسل أكبر، ولكن مع ذلك فإننا نخاطر بفقدان أجزاء مهمة من البيانات إذا استخدمناها بتهور في كل شيء.

بين ماذا وماذا ثم يمكن القضاء على الفرق؟ حسنًا، أي أن الملف الجديد الذي يكتبه المستخدم هو مجرد سلسلة من البتات، والتي لا يمكننا فعل أي شيء بها بمفردها. بعد ذلك، كل ما عليك فعله هو العثور على هذه البتات على القرص الصلب بحيث يمكن تغييرها دون الحاجة إلى تخزين الفرق، بحيث يمكنك النجاة من فقدانها دون عواقب وخيمة. ومن المنطقي تغيير ليس فقط الملف الموجود على FS نفسه، ولكن أيضًا بعض المعلومات الأقل حساسية بداخله. ولكن أي واحد وكيف؟

طرق التركيب

تأتي الملفات المضغوطة المفقودة للإنقاذ. تحتوي كل ملفات jpegs وmp3 وغيرها، على الرغم من فقدان الضغط، على مجموعة من البتات التي يمكن تغييرها بأمان. من الممكن استخدام تقنيات متقدمة تقوم بتعديل مكوناتها بشكل غير محسوس في مراحل مختلفة من التشفير. انتظر. تقنيات متقدمة... تعديل غير محسوس... جزء إلى آخر... إنه تقريبًا مثل ذلك إخفاء المعلومات!

وفي الواقع، فإن دمج معلومة في أخرى يذكرنا بأساليبها التي لا مثيل لها. أنا أيضًا معجب بعدم القدرة على إدراك التغييرات التي تم إجراؤها على الحواس البشرية. عندما تتباعد المسارات، تكون السرية: مهمتنا تتمثل في قيام المستخدم بإدخال معلومات إضافية على محرك الأقراص الثابتة الخاص به، وهذا لن يؤدي إلا إلى الإضرار به. سوف ينسى مرة أخرى.

لذلك، على الرغم من أنه يمكننا استخدامها، إلا أننا نحتاج إلى إجراء بعض التعديلات. وبعد ذلك سأخبرهم وأظهر لهم باستخدام مثال إحدى الطرق الحالية وتنسيق ملف شائع.

عن ابن آوى

إذا ضغطت عليه حقًا، فهو الشيء الأكثر قابلية للضغط في العالم. نحن نتحدث بالطبع عن ملفات JPEG. لا يقتصر الأمر على وجود الكثير من الأدوات والأساليب الموجودة لتضمين البيانات فيه فحسب، بل إنه تنسيق الرسومات الأكثر شيوعًا على هذا الكوكب.

حول طريقة غريبة لتوفير مساحة القرص الصلب

ومع ذلك، من أجل عدم الانخراط في تربية الكلاب، تحتاج إلى الحد من مجال نشاطك في ملفات هذا التنسيق. لا أحد يحب المربعات أحادية اللون التي تظهر بسبب الضغط المفرط، لذلك عليك أن تقتصر على العمل مع ملف مضغوط بالفعل، تجنب إعادة الترميز. وبشكل أكثر تحديدًا، مع معاملات الأعداد الصحيحة، التي تظل بعد العمليات مسؤولة عن فقدان البيانات - DCT والتكميم، والتي يتم عرضها بشكل مثالي في نظام التشفير (بفضل ويكي مكتبة باومان الوطنية):
حول طريقة غريبة لتوفير مساحة القرص الصلب

هناك العديد من الطرق الممكنة لتحسين ملفات jpeg. هناك تحسين بدون فقدان (jpegtran)، وهناك تحسين "لا خسارة"، والتي تساهم في الواقع بشيء آخر، لكننا لا نهتم بها. بعد كل شيء، إذا كان المستخدم مستعدا لتضمين معلومات واحدة في أخرى من أجل زيادة مساحة القرص الحرة، فقد قام بتحسين صوره لفترة طويلة، أو لا يريد القيام بذلك على الإطلاق خوفا من فقدان الجودة.

F5

مجموعة كاملة من الخوارزميات تناسب هذه الشروط، والتي يمكنك التعرف عليها بنفسك في هذا العرض الجيد. الأكثر تقدما منهم هو الخوارزمية F5 لأندرياس فيستفيلد، يعمل على معاملات عنصر السطوع، حيث أن العين البشرية هي الأقل حساسية لتغيراتها. علاوة على ذلك، فهو يستخدم تقنية التضمين القائمة على تشفير المصفوفة، مما يجعل من الممكن إجراء تغييرات أقل عند تضمين نفس الكمية من المعلومات، كلما زاد حجم الحاوية المستخدمة.

تتلخص التغييرات نفسها في تقليل القيمة المطلقة للمعاملات بمقدار واحد في ظل ظروف معينة (أي ليس دائمًا)، مما يسمح لك باستخدام F5 لتحسين تخزين البيانات على محرك الأقراص الثابتة لديك. والحقيقة هي أن المعامل بعد هذا التغيير سيشغل على الأرجح عددًا أقل من البتات بعد تشفير هوفمان بسبب التوزيع الإحصائي للقيم في JPEG، وستعطي الأصفار الجديدة ربحًا عند تشفيرها باستخدام RLE.

وتتلخص التعديلات الضرورية في إزالة الجزء المسؤول عن السرية (إعادة ترتيب كلمة المرور)، مما يوفر الموارد ووقت التنفيذ، وإضافة آلية للعمل مع العديد من الملفات بدلاً من ملف واحد في كل مرة. من غير المرجح أن يهتم القارئ بعملية التغيير بمزيد من التفاصيل، لذلك دعونا ننتقل إلى وصف التنفيذ.

التكنولوجيا العالية

لتوضيح كيفية عمل هذا النهج، قمت بتطبيق الطريقة بلغة C النقية وقمت بتنفيذ عدد من التحسينات من حيث سرعة التنفيذ والذاكرة (لا يمكنك تخيل مقدار وزن هذه الصور بدون ضغط، حتى قبل DCT). تم تحقيق منصة مشتركة باستخدام مجموعة من المكتبات libjpeg, PCRE и com.tinydir، والذي نشكرهم عليه. يتم تجميع كل هذا معًا بواسطة "make"، لذلك يرغب مستخدمو Windows في تثبيت بعض Cygwin لأنفسهم للتقييم، أو التعامل مع Visual Studio والمكتبات بأنفسهم.

التنفيذ متاح في شكل أداة مساعدة ومكتبة لوحدة التحكم. يمكن للمهتمين معرفة المزيد حول استخدام هذا الأخير في الملف التمهيدي في المستودع الموجود على Github، وهو الرابط الذي سأرفقه في نهاية المنشور.

كيف تستعمل؟

بحرص. يتم تحديد الصور المستخدمة للتغليف من خلال البحث باستخدام تعبير عادي في الدليل الجذر المحدد. عند الانتهاء، يمكن نقل الملفات وإعادة تسميتها ونسخها حسب الرغبة ضمن حدودها، وتغيير الملفات وأنظمة التشغيل، وما إلى ذلك. ومع ذلك، يجب أن تكون حذرًا للغاية ولا تغير المحتوى الفوري بأي شكل من الأشكال. إن فقدان قيمة ولو بت واحد قد يجعل من المستحيل استعادة المعلومات.

عند الانتهاء، تترك الأداة المساعدة ملف أرشيف خاص يحتوي على جميع المعلومات اللازمة للتفريغ، بما في ذلك البيانات المتعلقة بالصور المستخدمة. يزن في حد ذاته حوالي بضعة كيلو بايت وليس له أي تأثير كبير على مساحة القرص المشغولة.

يمكنك تحليل السعة المحتملة باستخدام العلامة "-a": "./f5ar -a [مجلد البحث] [تعبير عادي متوافق مع Perl]". تتم التعبئة باستخدام الأمر "./f5ar -p [مجلد البحث] [تعبير عادي متوافق مع Perl] [ملف معبأ] [اسم الأرشيف]"، ويتم التفريغ باستخدام "./f5ar -u [ملف أرشيف] [اسم الملف المسترد" ]' .

مظاهرة العمل

ولإظهار فعالية الطريقة، قمت بتحميل مجموعة من 225 صورة مجانية تمامًا للكلاب من الخدمة Unsplash ووجدت في الوثائق ملف pdf كبير بحجم 45 مترًا من المجلد الثاني فن البرمجة كنوتا.

التسلسل بسيط للغاية:

$ 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 أكثر متعة. ويفسر هذا الاختلاف الجذري بانخفاض قيم المعاملات، مما يؤثر على الضغط اللاحق بدون فقدان: يمكن أن يؤدي تقليل ملف واحد تلو الآخر بسهولة إلى قطع بضع بايت من الملف النهائي. ومع ذلك، لا يزال هذا يمثل فقدانًا للبيانات، وإن كان صغيرًا للغاية، وسيتعين عليك تحمله.

لحسن الحظ، فهي غير مرئية تماما للعين. تحت المفسد (بما أن habrastorage لا يمكنه التعامل مع الملفات الكبيرة)، يمكن للقارئ تقييم الفرق بالعين وكثافتها، والذي يتم الحصول عليه عن طريق طرح قيم المكون الذي تم تغييره من الأصل: оригинал, مع المعلومات في الداخل, فرق (كلما كان اللون باهتًا، قل الفرق في الكتلة).

بدلا من خاتمة

بالنظر إلى كل هذه الصعوبات، قد يبدو شراء محرك أقراص ثابتة أو تحميل كل شيء على السحابة بمثابة حل أبسط بكثير للمشكلة. ولكن على الرغم من أننا نعيش الآن في مثل هذا الوقت الرائع، ليس هناك ما يضمن أنه سيكون من الممكن غدًا الاتصال بالإنترنت وتحميل جميع بياناتك الإضافية في مكان ما. أو اذهب إلى المتجر واشتري لنفسك قرصًا صلبًا آخر بسعة ألف تيرابايت. ولكن يمكنك دائمًا استخدام المنازل الموجودة.

-> GitHub جيثب:

المصدر: www.habr.com

إضافة تعليق