كيف تثبت خادوم Bacula للنسخ الاحتياطي على Ubuntu 14.04


محمد أحمد العيل

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

bacula-ubuntu.thumb.png.14bf1741777c897f

سنشرح في هذا الدرس كيفية تثبيت عناصر الخادوم في 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.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن