skip to content

rsnapshot: من أفضل حلول النسخ الاحتياطي للسيرفر

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

لكن، هل واجه أحد منكم مشاكل مع كبر حجم النسخ الاحتياطية؟

لاحظوا السيناريو هذا:

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

4 قيقا * 7 أيام = 28 قيقا!

28 قيقا استهلكت بظرف أسبوع واحد، هذا غير ملفات الموقع الأساسية، التي حجمها 4 قيقا.

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

محور الموضوع سوف يكون عن البرنامج -الأكثر من رائع- rsnapshot، المختص بأخذ نسخ احتياطية دورية من ملفاتك بشكل “ذكي وبدون استهلاك مساحة عالية” من القرص الصلب.

أقسام التدوينة:

1- فكرة برنامج rsnapshot.

2- تركيب البرنامج على سيرفر لينكس.

3- تركيب البرنامج على سيرفر يونكس FreeBSD.

4- إعداد البرنامج لأخذ نسخ احتياطية تلقائية إلى مكان ثاني بداخل السيرفر.

5- إعداد البرنامج لأخذ نسخ احتياطية تلقائية إلى سيرفر خارجي بواسطة SSH:

5.1- إنشاء مفتاح SSH عام خاص بالسيرفر.

5.2- إعداد البرنامج للنسخ الاحتياطي البعيد عن طريق SSH.

6- توضيح كيفية النسخ بالساعات، اليومي، الأسبوعي، الشهري.

7- جدولة البرنامج لأخذ النسخ الاحتياطية تلقائياً بواسطة برنامج جدولة المهام Cron.

1- فكرة برنامج rsnapshot:

لأجل توضح لك فكرة البرنامج بشكل دقيق، تابع السيناريو الثاني هذا:

ملفات موقعي حجمها 500 ميقا و موجودة في المجلد

/home/jerais/public_html/

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

اليوم الأول: 500 ميقا تم نسخها إلى المجلد الاحتياطي.

اليوم الثاني: 500 ميقا ثانية تم نسختها إلى المجلد الإحباطي.

اليوم الثالث والرابع: نفس الكلام، ونفس السيناريو الأول في بداية الموضوع، المساحة تُستهلك باستمرار.

لكن في برنامج rsnapshot، سوف تصبح الفكرة بالشكل هذا:

اليوم الأول: 500 ميقا تم نسخها إلى المجلد الاحتياطي.

اليوم الثاني -هنا الفكرة والتميز-: راح يأخذ النسخة الاحتياطية المأخوذة في اليوم الأول ويقارنها مع ملفات الموقع الحالية، إذا كان هناك فرق بين الملفات سوف يتم تطبق الخطة هذه:

*
الملفات المتغيرة/الجديدة: أنسخها من الموقع إلى المجلد الاحتياطي.
*
الملفات الغير متغيرة: سوف يتم إنشاء ملف صغير من نوع Hard Link يأشر على مكان الملف المنسوخ احتياطيا في الهارديسك، وهذه تعني انه لن يقوم بنسخ الملف من جديد , إذا لم يكن المقصود واضح الرجاء كتابه سؤال لي.

لاحظت كيف متميز برنامج rsnapshot؟

هذي قائمة تحتوي على بعض مميزاته:

*
النسخ الاحتياطي الذكي، بمقارنة وأخذ الملفات المتغيرة -فقط- من المصدر -مثلاً الموقع- إلى مكان النسخ الاحتياطي.
*
صغر المساحة المستهلكة بالنسخ الاحتياطي حيث إنه لا يكرر نفس ملفات النسخ الاحتياطية السابقة، لكنه يستخدم تقنية Hard Links بدل من نسخ الملفات الغير متغيرة.
*
إمكانية النسخ إلى خارج السيرفر بواسطة SSH.
*
إمكانية النسخ الاحتياطي التلقائي.
*
النسخ الاحتياطي بفترات معينة، تستطيع تأخذ نسخ احتياطية يومية، أسبوعية، شهرية أو سنوية.

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

2- تركيب البرنامج على سيرفر لينكس:

طبعاً لسيرفرات لينكس ريدهات\سنتوس\فيدورا

yum -yv install rsnapshot

3- تركيب البرنامج على سيرفر يونكس FreeBSD:

التثبيت سوف يكون عن طريق البورتس Ports

cd /usr/ports/sysutils/rsnapshot

make install clean

4- إعداد البرنامج لأخذ نسخ احتياطية تلقائية إلى مكان ثاني بداخل السيرفر:

بعد تثبيت البرنامج، نبدأ الآن في إعداده لأجل أخذ نسخ احتياطية قبل الإعداد، هذه معلومات السيرفر:

ملفات الموقع موجودة على الامتداد هذا:

/home/website/

ومكان النسخ الاحتياطي سوف تكون هنا:

/backup/

الإعداد سوف تتم لسيرفر لينكس ريدهات\سنتوس\فيدروا، أدمن يونكس سوف يلاقون بعض الاختلافات الاعتيادية في أماكن الملفات وطريق التشغيل.

بعد التثبيت، نأخذ نسخة من الملف قبل التعديل للتراجع في حالة وجود أخطاء:

cp -v /etc/rsnapshot.conf /etc/rsnapshot.conf-default

ثم نفتح الملف للتعديل

vi /etc/rsnapshot.conf

في وسط الملف سوف نلاقي المكان الافتراضي للنسخ الاحتياطي:

# All snapshots will be stored under this root directory.

#

snapshot_root /.snapshots/

ونحرر خيار مكان مجلد النسخ الافتراضي في السيرفر الحالي إلى

snapshot_root /backup/

بعدها، انزل لأخر الملف،وسوف تجد الجزء هذا:

###############################

### BACKUP POINTS / SCRIPTS ###

###############################

# LOCALHOST

backup /home/ localhost/

backup /etc/ localhost/

backup /usr/local/ localhost/

ولأجل توضح الإعداد بالخيار السابق:

backup: أمر أخذ النسخة الاحتياطية

/home/: المجلد المراد أخذ نسخة احتياطية منه

localhost/: هذا اسم المجلد بعد أخذ نسخة احتياطية منه

نعدل عليهم، ويصبح تعديلنا هكذا:

backup /home/website/ website/

وضع علامة التعليقات “#” بعد الأسطر الثانية لأجل تتجاهلها، بمعنى انه سوف يصبح هكذا بعد تعديلنا:

# LOCALHOST

backup /home/website/ website/

#backup /etc/ localhost/

#backup /usr/local/ localhost/

انتهينا!

متبقي تنشئ مجلد النسخ الاحتياطية:

mkdir /backup

الآن تستطيع أخذ نسخ إحباطية للمواقع الموجودة على سيرفرك بعد تنفيذك للأمر:

#rsnapshot hourly

الآن يتم آخذ النسخة الاحتياطية سوف تجد أن النسخة محفوظة تحت الامتداد هذا:

/backup/hourly.0/website/

سوف أتطرق لفكرة Hourly -النسخ بالساعات- بخطوة رقم 6.

5- إعداد البرنامج لأخذ نسخ احتياطية تلقائية إلى سيرفر خارجي بواسطة SSH:

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

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

سوف أنفذ الطريقة بدون الدخول لتفاصيل المفاتيح العمومية والخاصة بالـ SSH، أرجع لموسوعة ويكيبيديا أو الصفحة هذي لتعرف فكرة المفاتيح

قبل أن أسترسل، هذي تفاصيل السيرفر الاحتياطي:

السيرفر الاحتياطي اسمه: server02.jerais.com

الاسم الخاص بالمستخدم الذي يستخدم بالنسخ الاحتياطي: backupuser

مجلد النسخ الاحتياطي في السيرفر المخصص للنسخ الاحتياطي: /home/backupuser/webbackup/

نبدأ بالتنفيذ:

5.1- إنشاء مفتاح SSH عام خاص بالسيرفر

$ssh-keygen -q

سوف يسألك:

Enter file in which to save the key (/home/userX/.ssh/id_rsa):

مكان حفظ المفتاح الخاص فيك، اضغط إنتر لحفظ المفتاح في مكانه الافتراضي -تحت مجلد .ssh في مجلد المستخدم-.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

السطرين الأخيرين لسؤالك عن كلمة مرور لفك تشفير المفاتيح عند الاستخدام أتركهم فارغين، وأرجع لنهاية الموضوع لتطرقي لخطورة استخدام مفاتيح SSH بدون كلمة مرور.

أنشئنا المفاتيح الخاصة بسيرفر المواقع، الآن ننقل المفتاح العام الخاص بسيرفرك إلى سيرفر النسخ الاحتياطية:

$scp .ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

تم، الآن جرب تدخل السيرفر الاحتياطي عن طريق SSH وبتلاقي إنك دخلت بدون كلمة مرور

$ ssh [email protected]

ملاحظة مهمة: اقرأ النقاط في نهاية الموضوع لتعرف المخاطر الأمنية الممكن تصير لك بدخولك للسيرفر بدون كلمة مرور.

5.2- إعداد البرنامج للنسخ الاحتياطي البعيد عن طريق SSH:

مثل ما عملنا في الخطوة 4، نعمله هنا مع وجود فرق بسيط.

حرر الملف

vi /etc/rsnapshot.conf

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

backup /home/website/ [email protected]:~/webbackup/

6- توضيح كيفية النسخ بالساعات، اليومي، الأسبوعي، الشهري:

في أحد الخطوات السابقة، وضحت إن النسخة الاحتياطية تم حفظها في مجلد اسمه hourly.0، هنا راح أوضح الفكرة بشكل مفصل.

برنامج rsnapshot يدعم النسخ الاحتياطي بالساعات، بالأيام، بالأسابيع أو بالشهور، كيف تتم؟

في ملف الإعدادات توجد الخيارات الافتراضية هذه:

interval hourly 6

interval daily 7

interval weekly 4

لتوضيحها:

*
interval: الفترة الزمنية
*
hourly: بالساعات
*
daily: يومي
*
weekly: أسبوعي
*
والأرقام مقصود فيها:
*
hourly 6:راح يتم أخذ نسخة احتياطية كل ساعة لمدة بعدد 6 نسخ احتياطية
*
daily 7: بالمثل، راح يتم أخذ نسخ احتياطية كل يوم لمدة 7 أيام
*
weekly 4: راح يتم أخذ نسخ احتياطية أسبوعية لمدة 4 أسابيع

لكن كيف تتم أخذ النسخ الاحتياطية بالساعات، الأيام أو الأسابيع؟

أول نسخة احتياطية راح يتم أخذها بالساعات بعد تنفيذ الأمر

$rsnapshot hourly

سوف يتم تسميتها:

hourly.0

وثاني نسخة يتم أخذها بالساعات، سوف يتم تسميتها

hourly.1

إلى أن تصل إلى آخر النسخة الاحتياطية بالساعات رقم hourly.5، تعتبر آخر نسخة احتياطية بالساعات مع إن ملف الإعداد موضح فيه hourly 6 لأنه بدأ الترقيم من الرقم صفر.

إذا وصل إلى hourly.5، ويبدأ عمل النسخ الاحتياطي اليومي بالأمر

$rsnapshot daily

سوف يأخذ المجلد hourly.5، ويعيد تسميته إلى daily.0، إلى أن يصل إلى daily.6.

وإذا تم تنفيذ أمر النسخ الاحتياطي الأسبوعي

$rsnapshot weekly

أيضاً يأخذ المجلد daily.7 ويعيد تسميته إلى weekly.0، إلى أن يصل إلى weekly.3.

7- جدولة البرنامج لأخذ النسخ الاحتياطية تلقائياً بواسطة برنامج جدولة المهام Cron:

حرر كرون:

$crontab -e

وأضف عليها أسطر النسخ الاحتياطي بالساعات، الأيام والأسابيع:

0 */4 * * * /usr/bin/rsnapshot hourly

30 23 * * * /usr/bin/rsnapshot daily

50 23 * * 1 /usr/bin/rsnapshot weekly

وبذلك أصبح عندنا نسخ احتياطي كل 6 ساعات يومياً، ونسخ احتياطي كل يوم الساعة 11.30 ليلاً، وأسبوعياً كل يوم أثنين الساعة 11.50 ليلاً.

نقاط:

1.
برنامج rsnapshotيعتمد اعتمادا كليا على rsync، سواء في النسخ الكلي Full Backup أو فقط في النسخ المتغير Incremental Backup
2.
ضرر استخدام SSH بدون كلمة مرور هو إن في حالة سرقة مفتاحك الخاص أو تم اختراق السيرفر، سوف يصل المخترق إلى سيرفر النسخ الاحتياطي بكل سهولة.
3.
تستطيع أن تأخذ نسخ دورية من قواعد البيانات وترسلها إلى مكان احتياطي عن طريق برنامجنا rsnapshot.
4.
الشرح طويل، لكن سوف تشاهده سهولة البرنامج مع أول استخدام وتنفيذ
5.
في حالة تغييرك لأوقات Cron، حاول ان لا يكون هناك تعارض بين وقت أوقات النسخ، إرجع للخطوة رقم 6 لأجل ان يتضح مقصدي.
6.
هذا اللي في بالي الوقت حالي من نقاط، والموضوع راح يتم تحديثه في حالة وجود شيء في بالي.
المصــــــــــــدر: http://www.tech-wd.com
التاريـــــــــــخ:9\8\2009
تاريخ زيارة الموقع9\8\2009
ويمكنك تصفحه من خلال:
http://www.tech-wd.com/wd/2009/08/09/rsnapshot/