تقليل النسخ الاحتياطية بنسبة 99.5٪ باستخدام التجزئة

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

هذه مقالة عامة لوصف الميزات. تم وصف الاستخدام الفعلي للهاشتاج (بسيط جدًا) في README مشروع و وثائق ويكي.

مقارنة

وفقًا لقانون هذا النوع، سأبدأ على الفور بالمكائد - بمقارنة النتائج:

عينة البيانات
حجم غير معبأ
.tar.gz
hashget.tar.gz

ووردبريس-5.1.1
43 ميغابايت
11 ميجابايت (26%)
155 كيلو بايت ( 0.3% )

Linux kernel 5.0.4
934 ميغابايت
161 ميجابايت (20%)
4.7 ميجا بايت ( 0.5% )

ديبيان 9 (LAMP) LXC VM
724 ميغابايت
165 ميجابايت (23%)
4.1 ميجا بايت ( 0.5% )

خلفية عما يجب أن تكون عليه النسخة الاحتياطية المثالية والفعالة

في كل مرة أقوم فيها بعمل نسخة احتياطية من جهاز افتراضي تم إنشاؤه حديثًا، كان يطاردني الشعور بأنني أفعل شيئًا خاطئًا. لماذا أحصل على نسخة احتياطية ضخمة من النظام، حيث إبداعاتي التي لا تقدر بثمن والتي لا تقدر بثمن عبارة عن ملف Index.html من سطر واحد مع النص "Hello World"؟

لماذا يوجد 16 ميجابايت /usr/sbin/mysqld في النسخة الاحتياطية الخاصة بي؟ هل من الممكن حقاً أن يكون لي في هذا العالم شرف الاحتفاظ بهذا الملف المهم، وإذا فشلت سيضيع من البشرية؟ على الأرجح لا. يتم تخزينه على خوادم دبيان الموثوقة للغاية (لا يمكن مقارنة موثوقيتها واستمراريتها بما يمكنني تقديمه)، وكذلك في النسخ الاحتياطية (الملايين منها) للمسؤولين الآخرين. هل نحتاج حقًا إلى إنشاء أكثر من 10 نسخة أولى من هذا الملف المهم لتحسين الموثوقية؟

عمومًا hashget ويحل هذه المشكلة. عندما يتم تعبئتها، فإنها تقوم بإنشاء نسخة احتياطية صغيرة جدًا. عند التفريغ - نظام مفكك تمامًا، مشابه لما سيكون عليه الأمر لو tar -c / tar -x. (وبعبارة أخرى، هذا هو التغليف الذي لا يمكن فقدانه)

طريقة عمل الهاشتاج

يحتوي hashget على مفهومي Package وHashPackage، وبمساعدتهما يقوم بإلغاء البيانات المكررة.

فئة الإشتراك (حقيبة بلاستيكية). ملف (عادةً ما يكون أرشيفًا بتنسيق .deb أو .tar.gz) يمكن تنزيله بشكل آمن من الإنترنت، ويمكن الحصول منه على ملف واحد أو أكثر.

HashPackage - ملف JSON صغير يمثل حزمة، بما في ذلك عنوان URL للحزمة ومجموع التجزئة (sha256) للملفات منه. على سبيل المثال، بالنسبة لحزمة mariadb-server-core التي تبلغ سعتها 5 ميجابايت، يبلغ حجم حزمة التجزئة 6 كيلو بايت فقط. أقل بنحو ألف مرة.

إلغاء البيانات المكررة — إنشاء أرشيف بدون ملفات مكررة (إذا كانت أداة إلغاء البيانات المكررة تعرف أين يمكن تنزيل الحزمة الأصلية، فإنها تقلل من التكرارات من الأرشيف).

التعبئة والتغليف

عند التعبئة، يتم فحص جميع الملفات من الدليل الذي يتم تعبئته، وحساب مجموع التجزئة الخاص بها، وإذا تم العثور على المجموع في إحدى حزم HashPackages المعروفة، فسيتم حفظ البيانات الوصفية حول الملف (الاسم، التجزئة، حقوق الوصول، إلخ). في ملف خاص .hashget-restore.json، والذي سيتم تضمينه أيضًا في الأرشيف.

في أبسط الحالات، لا تبدو العبوة نفسها أكثر تعقيدًا من القطران:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

تفريغ

يتم التفريغ على مرحلتين. أولاً تفريغ القطران المعتاد:

tar -xf mybackup.tar.gz -C /path/to/data

ثم قم بالاستعادة من الشبكة:

hashget -u /path/to/data

عند الاستعادة، يقوم hashget بقراءة ملف .hashget-restore.json، وتنزيل الحزم اللازمة، وفك ضغطها، واستخراج الملفات الضرورية، وتثبيتها في المسارات المطلوبة، مع المالك/المجموعة/الأذونات المطلوبة.

أشياء أكثر صعوبة

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

الفهرسة

إذا لم يكن لدى hashget حزمة HashPackage واحدة على الإطلاق، فلن يتمكن ببساطة من إلغاء تكرار أي شيء.

يمكنك أيضًا إنشاء HashPackage يدويًا (ببساطة: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my)، ولكن هناك طريقة أكثر ملاءمة.

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

على سبيل المثال، يحب استدلال دبيان الملف /var/lib/dpkg/status ويكتشف حزم دبيان المثبتة، وإذا لم تتم فهرستها (لم يتم إنشاء HashPackage لها)، يقوم بتنزيلها وفهرستها. والنتيجة هي تأثير جميل جدًا - ستعمل علامة التجزئة دائمًا على إلغاء تكرار أنظمة تشغيل دبيان بشكل فعال، حتى لو كانت تحتوي على أحدث الحزم.

ملفات تلميح

إذا كانت شبكتك تستخدم بعض الحزم الخاصة بك أو حزمة عامة غير مضمنة في استدلالات الهاشتاج، فيمكنك إضافة ملف تلميح hashget-hint.json بسيط إليها على النحو التالي:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

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

إذا تم تحديث بعض الحزم الخاصة بك بشكل دوري، ولكن التغييرات ليست كبيرة جدًا، فيمكنك التلميح فقط للإصدارات الرئيسية. على سبيل المثال، في الإصدار 1.0، قدموا تلميحًا يشير إلى mypackage-1.0.tar.gz، وسيتم إلغاء تكراره تمامًا، ثم أطلقوا الإصدار 1.1، وهو مختلف قليلاً، ولكن لم يتم تحديث التلميح. لا بأس. يتم إلغاء تكرار الملفات المتطابقة (التي يمكن استعادتها) فقط مع الإصدار 1.0.

يعد الاستدلال الذي يعالج ملف التلميح مثالًا جيدًا لفهم الآلية الداخلية لكيفية عمل الاستدلال. فهو يعالج فقط ملفات hashget-hint.json (أو .hashget-hint.json بنقطة) ويتجاهل جميع الملفات الأخرى. من هذا الملف، يحدد عنوان URL للحزمة التي يجب فهرستها، ويقوم hashget بفهرستها (إذا لم تكن قد فعلت ذلك بالفعل)

HashServer

سيكون إجراء الفهرسة الكاملة عند إنشاء النسخ الاحتياطية أمرًا كثيف العمالة. للقيام بذلك، تحتاج إلى تنزيل كل حزمة، وفك ضغطها، وفهرستها. لذلك يستخدم hashget مخططًا مع HashServer. عندما يتم اكتشاف حزمة دبيان مثبتة، إذا لم يتم العثور عليها في HashPackage المحلي، يتم إجراء محاولة أولاً لتنزيل HashPackage من خادم التجزئة. وفقط إذا لم ينجح ذلك، يقوم hashget بنفسه بتنزيل الحزمة وتجزئتها (ويحملها إلى hashserver، بحيث يوفرها hashserver في المستقبل).

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

النسخ الاحتياطية التزايدية والتفاضلية، والتقادم المخطط له

hashget يجعل من السهل جدًا عمل رسم تخطيطي النسخ الاحتياطي التزايدي والتفاضلي. لماذا لا نقوم بفهرسة النسخة الاحتياطية الخاصة بنا نفسها (مع جميع ملفاتنا الفريدة)؟ فريق واحد --submit إنتهيت! لن تتضمن النسخة الاحتياطية التالية التي ينشئها hashget ملفات من هذا الأرشيف.

ولكن هذا ليس نهجا جيدا للغاية، لأنه قد يتبين أنه عند الاستعادة سيتعين علينا سحب جميع النسخ الاحتياطية للهاشتاج في السجل بأكمله (إذا كان كل منها يحتوي على ملف فريد واحد على الأقل). هناك آلية لهذا التقادم المخطط للنسخ الاحتياطية. عند الفهرسة، يمكنك تحديد تاريخ انتهاء صلاحية HashPackage --expires 2019-06-01، وبعد هذا التاريخ (من الساعة 00:00)، لن يتم استخدامه. لا يمكن حذف الأرشيف نفسه بعد هذا التاريخ (على الرغم من أن علامة التجزئة يمكنها أن تعرض بسهولة عناوين URL لجميع النسخ الاحتياطية التي/سوف تفسد في الوقت الحالي أو في أي تاريخ).

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

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

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

إذا لم نثق لسبب ما في موثوقية موارد دبيان (https://snapshot.debian.org/) أو نستخدم توزيعة أخرى، يمكننا ببساطة عمل نسخة احتياطية كاملة مرة واحدة لجميع الحزم، ثم الاعتماد عليها (عن طريق تعطيل الاستدلال). الآن، إذا تبين أن جميع خوادم توزيعاتنا غير متاحة لنا (على شبكة الإنترنت التذكارية أو أثناء نهاية العالم من الزومبي)، ولكن النسخ الاحتياطية لدينا سليمة، فيمكننا التعافي من أي نسخ احتياطي قصير يعتمد فقط على النسخ الاحتياطية السابقة لدينا .

تعتمد Hashget فقط على مصادر الاسترداد الموثوقة وفقًا لتقديرك. سيتم استخدام تلك التي تعتبرها موثوقة.

FilePool والنهر الجليدي

تقنية FilePool يسمح لك بعدم الاتصال باستمرار بخوادم خارجية لتنزيل الحزم، ولكن استخدم الحزم من دليل محلي أو خادم شركة، على سبيل المثال:

$ hashget -u . --pool /tmp/pool

أو

$ hashget -u . --pool http://myhashdb.example.com/

لإنشاء تجمع في دليل محلي، ما عليك سوى إنشاء دليل ورمي الملفات فيه، وستجد علامة التجزئة نفسها ما تحتاجه باستخدام التجزئة. لتمكين الوصول إلى التجمع عبر HTTP، تحتاج إلى إنشاء روابط رمزية بطريقة خاصة؛ ويتم ذلك باستخدام أمر واحد (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool نفسه عبارة عن ملفات ثابتة، لذا يمكن لأي خادم ويب بسيط أن يخدمها، والتحميل على الخادم يكون صفرًا تقريبًا.

بفضل FilePool، لا يمكنك فقط استخدام موارد http(s) كموارد أساسية، ولكن أيضًا على سبيل المثال، نهر الأمازون الجليدي.

بعد تحميل النسخة الاحتياطية إلى النهر الجليدي، نحصل على معرف التحميل الخاص به ونستخدمه كعنوان URL. على سبيل المثال:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

الآن ستعتمد النسخ الاحتياطية (التفاضلية) الجديدة على هذه النسخة الاحتياطية وستكون أقصر. بعد تفريغ tar لنسخة diffbackup، يمكننا معرفة الموارد التي تعتمد عليها:

hashget --info /tmp/unpacked/ list

واستخدم فقط برنامج نصي Shell لتنزيل كل هذه الملفات من Glacier إلى المجمع وتشغيل الاسترداد المعتاد: hashget -u /tmp/unpacked —pool /tmp/pool

هل اللعبة تستحق كل هذا العناء؟

في أبسط الحالات، ستدفع ببساطة مبلغًا أقل مقابل النسخ الاحتياطية (إذا قمت بتخزينها في مكان ما في السحابة مقابل المال). ربما أقل من ذلك بكثير.

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

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

كيفية محاولة والبدء في استخدام؟

انتقل إلى صفحة جيتلاب https://gitlab.com/yaroslaff/hashget، التثبيت بأمر واحد (pip3 install hashget[plugins]) ومجرد قراءة وتنفيذ البدء السريع. أعتقد أن الأمر سيستغرق من 10 إلى 15 دقيقة للقيام بكل الأشياء البسيطة. بعد ذلك، يمكنك محاولة ضغط أجهزتك الافتراضية، وإنشاء ملفات تلميحات إذا لزم الأمر لجعل الضغط أقوى، واللعب بالمجموعات، وقاعدة بيانات التجزئة المحلية وخادم التجزئة إذا كنت مهتمًا، وفي اليوم التالي تعرف على حجم النسخة الاحتياطية المتزايدة سيكون على رأس الأمس.

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

إضافة تعليق