Bacula هو برنامج مفتوح المصدر للنسخ الاحتياطي في الشبكة؛ يمكّن من إنشاء نسخ احتياطية Backups من نظام التشغيل واستعادة البيانات في حال حصول مشكل. يتميز Bacula بالمرونة والمتانة، الأمر الذي يجعل منه مناسبا للنسخ الاحتياطي في حالات كثيرة؛ على الرغم من أن إعداده مرهق قليلا. يعد نظام النسخ الاحتياطي جزءا مهما في أغلب البنى التحتية للخواديم؛ نظرا لكون إعادة البيانات (إرجاعها) عنصرا أساسيا في أغلب خطط استعادة الأنظمة.
سنشرح في هذا الدرس كيفية تثبيت عناصر الخادوم في Bacula على خادوم Ubuntu 14.04 وضبطها. سنعد Bacula لإنشاء شغل أسبوعي job ينشئ نسخة احتياطية محلية (أي على المضيف Host الذي يعمل عليه Bacula). لا يفرض Bacula نسخ البيانات محليَّا، إلا أننا بهذه الطريقة نوفر نقطة انطلاق جيدة لإنشاء نسخ احتياطية من خواديم أخرى يثبَّت عليها عميل Client لـ Bacula ويُضبط الاتصال بينه والخادوم.
المتطلبات
تتطلب خطوات المقال صلاحيات وصول المستخدم الأعلى (sudo
) على خادوم Ubuntu 14.04. سيحتاج الخادوم أيضا لمساحة قرص صلب كافية لتخزين جميع النسخ الاحتياطية التي تخطط للإبقاء عليها ضمن حيز زمني محدَّد.
سنعد Bacula لاستخدام اسم نطاق معرَّف بالكامل Fully Qualified Domain Name, FQDN (راجع مقال مقدّمة إلى مُصطَلحات وعناصر ومفاهيم نظام أسماء النطاقات للمزيد عن اسم النطاق المعرَّف بالكامل)، على سبيل المثال bacula.private.example.com
. استخدم عناوين IP المناسبة إن لم يكن لديك نظام لإدارة النطاقات. أبدل معلومات الاتصال بالشبكة الموجودة في هذا الدرس بعناوين شبكة يمكن لخواديمك الوصول إليها (عناوين IP أو أنفاق شبكات خاصة افتراضية)
نبدأ بعرض عام للعناصر المكوِّنة لـ Bacula.
نظرة عامة على عناصر Bacula
يتبع Bacula نموذج خادوم-عميل Server-client في النسخ الاحتياطي، ويتكون من عناصر برمجية مختلفة. سنركز في ما يلي على جزأيْ الخادوم والعميل بدلا من الحديث عن كل عنصر لوحده. إلا أنه يبقى من الأهمية بمكان أخذ معرفة سطحية بالعناصر المكونة للتطبيق.
يتكون خادوم Bacula (نشير إليه في بعض الأحيان بـ”خادوم النسخ الاحتياطي”) من العناصر التالية:
- مدير Bacula (يُشار إليه بـDIR): وهو البرنامج الذي يتحكم في عمليات النسخ الاحتياطي والإعادة التي تنفذها خدمتا File وStorage.
- خدمة التخزين Storage (يُشار إليها بـSD): برنامج يقرأ من أجهزة التخزين المستخدمة للنسخ الاحتياطي ويكتب فيها.
- برنامج الفهرس Catalog: خدمات تحتفظ بقاعدة بيانات للملفات المنسوخة احتياطا. تُستخدم قاعدة بيانات مثل MySQL أو PostgreSQL لهذا الغرض.
- وحدة تحكم Bacula: واجهة بسطر أوامر يتفاعل بواسطتها مسؤول النسخ الاحتياطي مع مدير Bacula ويتحكم فيه.
ملحوظة: ليس مفروضا تواجدُ جميع العناصر المكونة لخادوم Bacula على نفس الخادوم الحسي؛ إلا أنها جميعها تعمل معا لتوفير وظيفة خادوم النسخ الاحتياطي.
يشغِّل عميلُ Bacula (أي الخادوم الذي نريد أخذ نسخ احتياطية منه) خدمة File (يُشار إليها بـFD). هذا العنصر عبارة عن برنامج يتيح لخادوم Bacula (مدير Bacula تحديدا) الوصول إلى البيانات التي ستُنسَخ. نسمي الخواديم التي نريد أخذ نسخ منها “عملاء النسخ الاحتياطي” أو “العملاء”.
سنعدّ مثل ما أشرنا في المقدمة، خادوم النسخ الاحتياطي لإنشاء نسخة احتياطية من نظام ملفاته الخاص؛ وهو ما يعني أن خادوم النسخ الاحتياطي سيكون أيضا عميل نسخ احتياطي وبالتالي سيشغل خدمة File.
نبدأ بالتثبيت.
تثبيت MySQL
يستخدم Bacula قاعدة بيانات SQL مثل MySQL وPostgreSQL لإدارة الفهرس. سنستخدم MySQL في هذا الدرس.
نبدأ بتحديث الحزم:
$ sudo apt-get update
ثم نثبت خادوم MySQL:
$ sudo apt-get install mysql-server
سيُطلَب منك إدخال كلمة سر خاصة بالحساب الإداري root
لـMySQL. أدخل كلمة سر ثم أكدها. ستحتاج لكلمة السر هذه أثناء تثبيت Bacula.
تثبيت Bacula
ننفذ الأمر التالي لتثبيت العناصر المكونة لخادوم Bacula وعميله:
$ sudo apt-get install bacula-server bacula-client
سيُطلب منك إدخال معلومات ستُستخدم لإعداد Postfix الذي يستخدمه Bacula:
- النوع العام لإعداد البريد General Type of Mail Configuration: اختر
Internet Site
. - اسم نظام البريد: أدخل اسم النطاق الكامل لخادومك أو اسم المضيف.
في الخطوة الموالية تُطلب معلومات تستخدم لإعداد قاعدة بيانات Bacula:
- اختر
Yes
بالنسبة لخيارConfigure database for bacula-director-mysql with dbconfig-common
. - أدخل كلمة سر الحساب الإداري لـMySQL ثم أكدها (خيار
Password of the database's administrative user
). - أدخل كلمة سر جديدة وأكدها عند خيار
MySQL application password for bacula-director-mysql
أو اتركها فارغة لتوليد كلمة سر عشوائية.
الخطوة الأخيرة في عملية التثبيت هي تحديث أذون السكربت الذي يستخدمه Bacula أثناء شغل فهرس النسخ الاحتياطي:
$ sudo chmod 755 /etc/bacula/scripts/delete_catalog_backup
ننتقل الآن، بعد تثبيت الخادوم والعميل الخاصين بـBacula إلى إنشاء مجلدات النسخ الاحتياطي والإعادة.
إنشاء مجلدات النسخ الاحتياطي والإعادة
يحتاج Bacula إلى مجلد للنسخ الاحتياطي يخزِّن فيه الأرشيف، ومجلد للإعادة يضع فيه الملفات المُعادة. تأكد من إنشاء هذه المجلدات على تجزئة بمساحة كافية. ننشئ مجلدين جديدين:
$ sudo mkdir -p /bacula/backup /bacula/restore
نعدّل أذون الملف لكي يقتصر إذن الوصول للمجلدات على عمليّة bacula (والمستخدم الأعلى):
$ sudo chown -R bacula:bacula /bacula $ sudo chmod -R 700 /bacula
بهذا نكون جاهزين لإعداد مدير Bacula.
إعداد مدير Bacula
يتكون Bacula من عناصر عدة يجب إعداد كل واحد منها على حدة ليعمل بطريقة صحيحة. توجد جميع ملفات الإعداد في المجلَّد etc/bacula/
.
نبدأ بمدير Bacula.
افتح ملف إعداد المدير لتحريره:
$ sudo nano /etc/bacula/bacula-dir.conf
إعداد الأشغال المحلية
يُستخدَم شغل Bacula لـتنفيذ إجراءات النسخ الاحتياطي والإعادة. تعرِّف موارد الشغل تفاصيل ما يفعله شغلٌ مّا. تتضمن تفاصيل الشغل اسم العميل، مجموعة الملفات FileSet المُراد نسخها أو إعادتها وأمورا أخرى.
سنعد هنا الأشغال التي سنستخدمها لنسخ نظام الملفات المحلي.
ابحث في ملف bacula-dir.conf
عن مورد الشغل ذي الاسم BackupClient1
. غير قيمة Name
لتصبح BackupLocalFiles
:
Job { Name = "BackupLocalFiles" JobDefs = "DefaultJob" }
ابحث الآن عن مورد الشغل RestoreFiles
. يجب أن تعدِّل قيمتين في هذا المورد: غير قيمة Name
لتصبح RestoreLocalFiles
وقيمة Where
لتصبح bacula/restore/
. يبدو الملف بعد التعديل على النحو التالي:
Job { Name = "RestoreLocalFiles" Type = Restore Client=BackupServer-fd FileSet="Full Set" Storage = File Pool = Default Messages = Standard Where = /bacula/restore }
تعد هذه التعليمات شغل RestoreLocalFiles
لإعادة الملفات إلى المجلَّد bacula/restore/
الذي أنشأناه سابقا.
إعداد مجموعة الملفات
تعيّن مجموعة ملفات Bacula - كما يشير الاسم - مجموعة ملفات أو مجلدات للتضمين أو الإبعاد من النسخ الاحتياطية.
ابحث عن مجموعة ملفات FileSet
باسم Full Set
(توجد تحت التعليق # List of files to be backed up
أي قائمة جميع الملفات المراد نسخها). سنجري ثلاثة تعديلات:(1) إضافة خيار استخدام gzip
لضغط النسخ الاحتياطية، (2) تغيير الملفات المضمّنة من usr/sbin/
إلى /
و(3) تغيير الملفات المبعدة وإضافة المسار bacula/
. يبدو المورد بعد نزع التعليقات على النحو التالي:
FileSet { Name = "Full Set" Include { Options { signature = MD5 compression = GZIP } File = / } Exclude { File = /var/lib/bacula File = /bacula File = /proc File = /tmp File = /.journal File = /.fsck } }
أولا، تفعِّل التعليمات استخدام gzip
لضغط الملفات أثناء إنشاء النسخ الاحتياطية؛ ثم تضيف الجذر /
إلى الملفات المُراد نسخها (أي جميع ملفات التجزئة). وأخيرا تبعد المجلّد bacula/
من النسخة الاحتياطية لكي لا نعيد نسخ النسخ الاحتياطية السابقة والملفات المُعادة.
ملحوظة: إن رغبت في إضافة تجزئات مركَّبة Mounted partitions في /
إلى مجموعة الملفات فيجب إضافة تعليمة File
لكل واحدة منها.
تذكر أن النسخ الاحتياطية ستحتاج، عند استخدام مجموعات ملفات كبيرة مثل Full Set
في أشغال النسخ الاحتياطي، مساحة أكبر على القرص الصلب مما لو كان اختيار ملفات النسخ أكثر تحديدا. على سبيل المثال، إن كان لديك مخطّط إعادة Recovery plan يحدد الحزم البرمجية الواجب تثبيتها والأماكن التي يجب وضع الملفات المعادة فيها؛ فإن مجموعة ملفات لا تتضمن سوى ملفات الإعداد المخصَّص وقواعد البيانات تكفي لاحتياجاتك ولا تستخدم سوى جزء يسير من القرص الصلب لتخزين أرشيف النسخ الاحتياطية.
إعداد الاتصال الخاص بخدمة التخزين Storage
يعرّف مورد Storage في ملف إعداد المدير خدمة التخزين التي يجب على مدير Bacula الاتصال بها. سنضبُط خدمة التخزين في ما بعد.
اعثُر على مورد Storage وأبدل قيمة Address
(أي localhost
) باسم النطاق الكامل FQDN المحلي (أو عنوان IP المحلي) لخادوم النسخ الاحتياطي. يبدو الملف بعد التعديل كالتالي (أبدل :
Storage { Name = File # Do not use "localhost" here Address = backup_server_private_FQDN # N.B. Use a fully qualified name here SDPort = 9103 Password = "ITXAsuVLi1LZaSfihQ6Q6yUCYMUssdmu_" Device = FileStorage Media Type = File }
سنعد خدمة التخزين للإنصات لواجهة الشبكة المحلية حتى يتسنى للعملاء الاتصال بها، لذا من المهم إعداد المورد لاستخدام العنوان المحلي لخادوم النسخ الاحتياطي.
إعداد مجمع تخزين Storage pool
يعرف مورد Pool وسائط التخزين التي سيخزن عليها Bacula النسخ الاحتياطية. سنتعامل مع ملفات كما لو كانت تجزئات للتخزين ثم نحدث اللصيقة Label لتوصيف النسخ الاحتياطية المحلية.
ابحث عن مورد Pool
باسم File
(توجد تحت التعليق # File Pool definition
) وأضف سطرا لتحديد صيغة اللصيقة. يبدو المورد، بعد التعديل، على النحو التالي:
# File Pool definition Pool { Name = File Pool Type = Backup Label Format = Local- Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool }
احفظ الملف ثم أغلقه. بهذا يكتمل إعداد مدير Bacula.
التحقق من إعدادات مدير Bacula
نتحقق من عدم وجود أخطاء صياغة في ملف إعداد المدير DIR:
$ sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
إن لم تظهر رسائل خطأ فملف الإعداد نظيف من أخطاء الصياغة.
ننتقل لإعداد خدمة التخزين SD.
إعداد خدمة التخزين
نحتاج لإعداد خدمة التخزين حتى يعرف خادوم Bacula أين يخزّن النسخ الاحتياطية.
افتح ملف إعداد التخزين لتحريره:
$ sudo nano /etc/bacula/bacula-sd.conf
إعداد مورد Storage
اعثر على مورد Storage في ملف الإعداد الذي فتحته للتو. يعرّف هذا المورد العنوان الذي تنصت خدمة التخزين للاتصالات القادمة منه. أضف معطى SDAddress وحدد قيمته بالنطاق الكامل (أو عنوان IP) المحلي لخادوم النسخ الاحتياطي:
Storage { # definition of myself Name = BackupServer-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 SDAddress = backup_server_private_FQDN }
إعداد وسيط التخزين
اعثر على مورد Device
باسم FileStorage
وحدث قيمة Archive Device
لتوافق مجلد النسخ الاحتياطي لديك:
Device { Name = FileStorage Media Type = File Archive Device = /bacula/backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; }
احفظ الملف ثم أغلقه.
التحقق من إعداد خدمة التخزين
ننفذ الأمر التالي للتحقق من عدم وجود أخطاء صياغة في ملف الإعداد الخاص بخدمة التخزين:
$ sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
إن لم تظهر رسائل خطأ فملف الإعداد نظيف من أخطاء الصياغة.
أكملنا إعداد Bacula وأصبحنا جاهزين لإعادة تشغيل عناصر خادوم Bacula.
إعادة تشغيل مدير Bacula وخدمة التخزين
نعيد تشغيل مدير Bacula وخدمة التخزين لاعتماد تعديلات الإعدادات:
$ sudo service bacula-director restart $ sudo service bacula-sd restart
نجرب، بعد إعادة تشغيل الخدمتين، عمل خادوم Bacula بإنشاء شغل نسخ احتياطي.
اختبار شغل للنسخ الاحتياطي
نستخدم وحدة تحكم Bacula لتشغيل أول شغل للنسخ الاحتياطي؛ إن عمل دون مشاكل فسنتأكد أن Bacula مضبوط بطريقة صحيحة.
ادخل إلى وحدة التحكم بتنفيذ الأمر التالي:
$ sudo bconsole
ستُنقَل إلى محثّ Prompt وحدة تحكم Bacula المُشار إليه ب*
.
إنشاء لصيقة
ابدأ بتنفيذ أمر label
:
* label
سيُطلب منك إدخال اسم للتجزئة:
Enter new Volume name: MyVolume
ثم اختر مجمع التخزين الذي تريد أن يستخدم للنسخ الاحتياطية. سنختار File
الذي أعددناه سابقا بإدخال الرقم 2:
Select the Pool (1-3): 2
التشغيل اليدوي لشغل نسخ احتياطي
أعطينا Bacula المعلومات الكافية ليعرف كيف يخزن بيانات النسخ الاحتياطية، ويمكن بالتالي تشغيل النسخ الاحتياطي لمعرفة ما إذا كان يعمل بطريقة صحيحة:
* run
سيطلب منك اختيار الشغل الذي تريد تشغيله. نريد تشغيل BackupLocalFiles
لذا سنختار 1
:
Select Job resource (1-3): 1
راجع التفاصيل في محث التأكيد Run Backup job
ثم اختر Yes
للتشغيل:
* yes
فحص الرسائل والحالة
سيخبرك Bacula بعد تشغيل شغل للنسخ الاحتياطي أن لديك رسائل، وهي مخرجات ولّدتها الأشغال الجارية. افحص الرسائل بتنفيذ الأمر:
* messages
يجب أن تظهر رسالة No prior Full backup Job record found
(أي لم يُعثر على سجل لنسخة احتياطية كاملة سابقة) وأخرى تخبرك ببدء الشغل. ستظهر رسائل خطأ في حال وجود مشاكل مع تلميحات لأسبابها، لماذا لم ينفَّذ الشغل مثلا.
توجد طريقة أخرى لمعرفة حالة الشغل وهي فحص حالة المدير. لاستعمال هذه الطريقة أدخل اﻷمر التالي في محث وحدة التحكم bconsole
:
* status director
إن كان كل شيء جرى على ما يرام فسترى أن الشغل يعمل. ستظهر مخرجات تشبه التالي:
Running Jobs: Console connected at 09-Apr-15 12:16 JobId Level Name Status ====================================================================== 3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running ====
ستنتقل وحدة التحكم إلى فقرة Terminated Jobs
(أشغال مكتملة) من تقرير الحالة عند انتهاء تنفيذ الشغل. تظهر المخرجات بما يشبه التالي:
Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles
تشير الحالة OK
إلى أن شغل النسخ الاحتياطي عمل دون مشاكل.
الخطوة التالية هي اختبار شغل الإعادة.
اختبار شغل الإعادة
من المهم بعد إنشاء النسخ الاحتياطية اختبار إمكانية إعادتها على نحو سليم. يمكن أمر restore
من إعادة الملفات التي نسخناها احتياطا.
تنفيذ الشغل Restore All
سنعيد جميع الملفات الموجودة في آخر نسخة احتياطية، لذا نستخدم الأمر:
* restore all
ستظهر قائمة بها خيارات متعددة تستخدم لتعريف أي مجموعة نسخ احتياطية نعيد الملفات منها. بما أنه لا توجد لدينا سوى نسخة واحدة فسنحدد الخيار 5 Select the most recent backup
(اختر النسخة الاحتياطية الأحدث):
Select item (1-13): 5
بما أنه لا يوجد سوى عميل واحد وهو خادوم Bacula فسيُختار.
المحث التالي يسأل عن مجموعة الملفات التي تريد استخدامها. اختر Full Set
أي الرقم 2:
Select FileSet resource (1-2): 2
سيُحيلك الخيار إلى شجرة افتراضية للملفات يوجد بها تخطيط كامل للمجلد الذي نسخته احتياطا. تسمح هذه الواجهة التي تشبه Shell
بتحديد الملفات المرادة إعادتها أو نزع تحديدها.
بما أننا نفذنا أمر restore all
(إعادة الجميع) فإن كل ملف في المخطّط الشجري محدَّد لإعادته. تسبق علامة *
الملفات المحدّدة.
إن أردت تخصيص الاختيار فيمكن التنقل في قائمة الملفات باستخدام الأمرين ls
وcd
، تحديد الملفات بmark
ونزع تحديدها بunmark
. تحصل على قائمة بجميع الأوامر المتاحة عند تنفيذ الأمر help
(مساعدة) في وحدة التحكم.
لبدء عملية الإعادة، بعد الانتهاء من تحديد الملفات، نفذ الأمر:
* done
أكد رغبتك في تنفيذ شغل الإعادة:
OK to run? (yes/mod/no): yes
فحص الرسائل والحالة
ندقق، مثل ما فعلنا مع شغل النسخ الاحتياطي، في رسائل مدير Bacula وحالته بعد تنفيذ شغل الإعادة. افحص الرسائل بتنفيذ:
* messages
يجب أن تظهر رسالة تفيد ببدء شغل الإعادة أو أنه اكتمل مع حالة OK
دلالةً على نجاح العملية. ستظهر رسائل خطأ في حال وجود مشاكل مع تلميحات لأسبابها. يمكن أيضا فحص حالة المدير:
* status director
نفذ الأمر exit
للخروج من وحدة تحكم Bacula بعد الانتهاء من إعادة الملفات:
* exit
التحقق من إعادة الملفات
يمكن بالنظر إلى المجلد bacula/restore/
(عرّفناه ضمن شغل RestoreLocalFiles
في إعداد مدير Bacula) التحقق من أن شغل الإعادة أرجع فعلا الملفات المحدَّدة:
$ sudo ls -la /bacula/restore
يجب أن تظهر الملفات المُعادة في جذر نظام الملفات مع إبعاد الملفات والمجلدات الموجودة في فقرة Exclude
من شغل RestoreLocalFiles
. يجب أن تنسخ الملفات المعادة من النسخ الاحتياطية، عند إرجاع بيانات مفقودة، إلى أماكنها المناسبة (وضع ملفات الإعداد مثلا في المجلد المناسب حسب البرنامج أو التطبيق).
حذف الملفات المعادة
نفذ الأمر التالي إن أردت حذف الملفات المعادة، لإخلاء مساحة في القرص الصلب:
$ sudo -u root bash -c "rm -rf /bacula/restore/*"
يجب تنفيذ أمر rm
بصلاحيات root
إذ أن الكثير من الملفات المعادة يمتلكها المستخدم الأعلى.
خاتمة
يكون لديك باتباع الخطوات المشروحة في هذا المقال إعداد أساسي لـBacula يمكن من نسخ نظام الملفات المحلي وإعادته. الخطوة الموالية هي إضافة خواديم عميلة لتتمكن من إرجاع بياناتها في حال فقدان ملفات من النظام.
ترجمة -وبتصرف- للمقال How To Install Bacula Server on Ubuntu 14.04 لصاحبه Mitchell Anicas.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.