Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.

أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

لقد قمت بأتمتة عمليات النسخ الاحتياطي لنظام Linux باستخدام برنامج نصي بسيط من نوع bash و cron (وهو أفضل من واجهة المستخدم الرسومية).

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

hand-holding-a-hard-drive-with-cloud-backup-icons-showing-error-alerts-and-an-active-backup-progress-bar أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

الاعتماد على برنامج نصي بسيط من نوع Bash مع جدولة دقيقة عبر cron يوفّر حلاً عمليًا ومستقرًا لأتمتة النسخ الاحتياطي بالكامل. هذا الأسلوب يمنحك تحكمًا كاملًا في ما يتم نسخه، ومتى يتم ذلك، وأين تُحفَظ البيانات، دون الاعتماد على واجهات رسومية ثقيلة أو محدودة.

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

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

ملخص

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

تُعد أداة مثل Déjà Dup طريقة رسومية سهلة وممتازة لأتمتة النسخ الاحتياطية على نظام Linux. مع ذلك، يُعد إنشاء سكربت نسخ احتياطي الطريقة الأمثل والأكثر فعالية لأتمتة النسخ الاحتياطية. فهو يوفر تحكمًا أكبر بكثير في نوع ومكان حفظ البيانات، وعدد مرات النسخ الاحتياطي. كما أنه يُعد مدخلاً ممتعًا لأساسيات البرمجة النصية. إليك كيفية إنشاء سكربت نسخ احتياطي بسيط واستخدام cron لأتمتة عمليات النسخ الاحتياطي.

إنشاء سكربت نسخ احتياطي بسيط وأتمتته

طالما أنك تُعدّل وتُحدّث السكربت بمساراتك المطلقة، يُمكن أن يكون موقع النسخ الاحتياطي مجلدًا محليًا، أو قسمًا جديدًا من القرص، أو قرصًا خارجيًا.

اقرأ أيضا:  حماية بياناتك: كيفية إعداد النسخ الاحتياطي التلقائي على Ubuntu باستخدام Deja Dup

اختيار وجهة النسخ الاحتياطي

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

تجهيز موقع النسخ الاحتياطي

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

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

بدأتُ المشروع بإنشاء مجلد جديد باسم “Backup” على ذاكرة فلاش USB المُحمّلة. يمكنك إنشاء هذا المجلد باستخدام واجهة سطر الأوامر بالانتقال إلى موقع النسخ الاحتياطي ثم استخدام اختصار لوحة المفاتيح Ctrl+SHIFT+N. اخترتُ استخدام سطر الأوامر واستخدمتُ أوامر lsblk وcd وmkdir.

lsblk
cd “/media/htg/DATA BACKUP”
mkdir backup
rsync --version
sudo apt update -y && sudo apt install rsync

using-the-lsblk-command-to-note-the-mount-point-of-the-usb-flash-drive أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية using-commands-to-create-a-backup-folder-in-a-usb-flash-drive أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية command-to-check-rsync-version-before-using-it-to-automate-linux-backups أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

تحديد ما يجب نسخه احتياطيًا وإنشاء سكربت backup.sh

لأغراض استعادة النظام، اخترتُ نسخ مجلد يحتوي على ملفاتي الشخصية المدمجة ومجلدات لينكس الأساسية مثل /home و/etc و/var و/usr/local و/root و/opt. تدعم معظم محررات النصوص الطرفية في لينكس كتابة البرامج النصية الأساسية. استخدمتُ nano لإنشاء وحفظ سكربت backup.sh بسيط باستخدام bash في المجلد الرئيسي. انسخ السكربت التالي والصقه في محرر النصوص الطرفي الذي تفضله:

#!/bin/bash
# This bash script backs up Linux recovery directories and personal files
# Preserves ownership, permissions, timestamps, ACLs, and xattrs

set -euo pipefail

#------------This is the CONFIG script-----------

HOSTNAME="$(hostname)"
DATE="$(date +%F)"
BACKUP_ROOT="/media/htg/DATA BACKUP/Backup"
DEST_DIR="$BACKUP_ROOT/archives/${HOSTNAME}_${DATE}"
LOG_FILE="BACKUP_ROOT/logs/backup_${HOSTNAME}_${DATE}.log"
TMP_DIR="$BACKUP_ROOT/tmp"

#Don't forget to edit the BACKUP_ROOT, DEST_DIR, LOG_FILE and TMP_DIR paths

#Customize  SOURCES=( to include the files and directories you want to back up

SOURCES=(
  "/home"
  "/etc"
  "/var"
  "/root"
  "/opt"
  "/usr/local"
  "/home/htg/Backup"
)

EXCLUDES=(
  "--exclude=/var/cache/"
  "--exclude=/var/tmp/"
  "--exclude=/var/lib/apt/lists/"
  "--exclude=/home/*/.cache/"
  "--exclude=/home/*/Downloads/"
  "--exclude=/var/lib/docker/"
  "--exclude=/var/lib/containers/"
)

# Add these flags for backup summary and progress:
# --info=progress2: Total progress line
# --info=name0: Hide individual filenames
# --stats: Final summary block
# --no-inc-recursive: Better progress accuracy

RSYNC_FLAGS=(-aAXH --numeric-ids --delete  --human-readable --inplace --partial --info=progress2 --info=name0 --stats --no-inc-recursive)

# ---------- PREPARATION ----------
# Create destination folders on the flash drive
mkdir -p "$DEST_DIR" "$TMP_DIR" "$(dirname "$LOG_FILE")"
touch "$LOG_FILE"

# ---------- BACKUP ----------
echo "[$(date)] Starting backup to $DEST_DIR" | tee -a "$LOG_FILE"

for SRC in "${SOURCES[@]}"; do
  echo "[$(date)] Backing up $SRC ..." | tee -a "$LOG_FILE"
  
  # Run rsync and log output
  rsync "${RSYNC_FLAGS[@]}" "${EXCLUDES[@]}" "$SRC" "$DEST_DIR" >>"$LOG_FILE" 2>&1
done

echo "[$(date)] Backup completed" | tee -a "$LOG_FILE"

# ---------- VERIFY ----------
echo "[$(date)] Listing destination sizes:" | tee -a "$LOG_FILE"
du -sh "$DEST_DIR"/* 2>/dev/null | tee -a "$LOG_FILE"

exit 0

عدّل البرنامج النصي باستبدال BACKUP_ROOT وDEST_DIR وLOG_FILE وTMP_DIR بمساراتك المطلقة، ثم احفظ التغييرات واخرج. في محرر النصوص nano، استخدم Ctrl+O+Enter وCtrl+X. الخطوة التالية هي استخدام الأمر chmod لجعل البرنامج النصي قابلاً للتنفيذ، والأمر ls للتأكد من صلاحية التنفيذ (ابحث عن -x).

nano ~/backup.sh
chmod +x ~/backup.sh
ls -l ~/backup.sh

using-chmod-and-ls-commands-to-make-the-backup-script-executable-and-confirm-execute-permission أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

اختبار برنامج النسخ الاحتياطي وأتمتته باستخدام مهام cron

على الرغم من أن جميع استراتيجيات النسخ الاحتياطي قد تفشل في نهاية المطاف، إلا أن اختبار أنظمة وبرامج النسخ الاحتياطي يقلل من احتمالية فقدان البيانات بشكل كارثي. فهو يكشف الأخطاء التي قد تتسبب في فشل العملية، ويُعد خطوة بسيطة ولكنها أساسية لضمان سلامة أي عملية نسخ احتياطي. في بعض الأنظمة، قد تحتاج إلى استخدام sudo لتشغيل البرنامج تجريبيًا.
~/backup.sh
sudo ~/backup.sh

the-correct-syntax-for-the-date-shell-variable أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية an-image-showing-what-to-expect-after-running-and-testing-backup-sh-3 أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية a-screenshot-showing-that-the-script-is-working-and-the-backup-progess-is-in-progress-2 أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

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

اقرأ أيضا:  أشهر توزيعات لينكس القديمة التي ما زالت تحافظ على وجودها حتى اليوم

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

بعد اختبار البرنامج النصي والتأكد من عمله، استخدمتُ أداة cron لجدولة تشغيله في الساعة 8:00 مساءً، والأمر ls للتأكد من مهمة النسخ الاحتياطي المُجدولة، والأمر systemctl للتحقق من حالة خدمة cron.

using-crontab-to-schedule-the-backup-sh-script أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية using-the-ls-command-to-confirm-a-scheduled-back-up-job أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية using-the-systemctl-command-to-check-cron-service-status أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

sudo crontab -e
0 20 * * * /usr/bin/bash /home/htg/backup.sh >> "/media/htg/DATA BACKUP/Backup/logs/cron_backup.log" 2>&1
sudo crontab -l
ls -l /home/htg/backup.sh
systemctl status cron

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

الدروس الثلاثة التي تعلمتها بصعوبة

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

اختبر برامج النسخ الاحتياطي دائمًا

لم أختبر برنامج النسخ الاحتياطي الأول. هل يمكنك تخمين ما حدث؟ صحيح: عندما شغّلتُ نسخة احتياطية تجريبية، فشل البرنامج. استغرق الأمر بعض الوقت لأكتشف أنني أخطأتُ في متغير shell؛ فقد كتبتُ DATE+”$(date +%F)” بدلًا من DATE=”$(date +%F)”، مما تسبب في ظهور خطأ “الأمر غير موجود” في السطر 10.

اقرأ أيضا:  Ghostty Terminal على لينكس يقدم تجربة جديدة للمستخدمين

a-screenshot-showing-a-command-not-found-error-because-of-messing-up-a-shell-variable-2 أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية the-correct-syntax-for-the-date-shell-variable أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية the-wrong-syntax-for-the-date-shell-variable أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

 

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

استخدم المسارات المطلقة

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

علّق على سكربتك

how-to-comment-when-using-nano-to-bash-script أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron أكثر كفاءة من الواجهات الرسومية

التعليق على سكربتك أشبه بترك ملاحظات لنفسك (ولغيرك) تشرح الغرض من جزء أو قسم معين من السكربت. في برمجة bash، يُعد رمز المربع (#) الطريقة الأكثر شيوعًا للتعليق. ربما لاحظتَ وجود عدة تعليقات على سكربت bash الخاص بي.

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

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

أتمتة النسخ الاحتياطي في لينكس باستخدام Bash و cron ليست مجرد خيار تقني متقدم، بل خطوة أساسية لضمان استمرارية البيانات وتقليل الأخطاء البشرية. هذا الأسلوب يجمع بين البساطة والاعتمادية والتحكم الكامل.

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

زر الذهاب إلى الأعلى