نسخ احتياطية باستخدام rsync
كيف تُعدّ نسخ الملفات إلى خادم آخر عبر SSH، وتنشئ سجل إصدارات باستخدام الروابط الصلبة، وتتجنب الحذف المفرط بخيار --delete الخطير.
آخر تحديث 23 أغسطس 2026
يُعدّ rsync أبسط طريقة فعّالة لإنشاء النسخ: فهو متاح في كل مكان، وينقل الأجزاء المتغيّرة من الملفات فقط، ويعمل عبر SSH. بالنسبة لمجموعات البيانات الصغيرة، هذا كافٍ.
الأمر الأساسي
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key -p 22" \
/var/www/ backup@backup.example.com:/srv/backup/vds/www/
شرح الخيارات:
-a— الحفاظ على الأذونات والمالكين والأوقات والروابط؛-v— إظهار ما يجري؛-z— الضغط أثناء النقل (مفيد عند عرض النطاق حتى 500 Mbps إذا كانت كمية البيانات كبيرة)؛--delete— حذف ما لم يعد موجودًا على المصدر من المستقبِل.
تعني الشرطة المائلة في نهاية مسار المصدر «محتويات المجلد»؛ وبدونها يُنسخ المجلد نفسه. ينتج عن
/var/www/و/var/wwwنتيجتان مختلفتان، ومع--deleteيمحو هذا الفرق الشيء الخطأ. شغّل دائمًا مع--dry-runأولًا.
rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/
الخيار -n هو التشغيل التجريبي.
مفتاح وصول بدون كلمة مرور
يتطلب النسخ المجدول تسجيل الدخول دون إدخال كلمة مرور:
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com
على المستقبِل، قيّد هذا المفتاح بأمر واحد — عندئذٍ لن يمنح المفتاح المسروق وصولًا إلى صدفة. في ملف ~/.ssh/authorized_keys على المستقبِل:
command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup
سجل الإصدارات بالروابط الصلبة
يحتفظ rsync العادي بالحالة الحالية فقط: إذا حذفت ملفًا أمس ولاحظت ذلك اليوم، فلا يوجد مكان لاستعادته منه. يمنحك --link-dest سجلًا: لا تُنسخ الملفات غير المتغيّرة مرة أخرى بل تُربط، لذا لا تشغل ثلاثون نسخة أكثر بكثير من نسخة واحدة.
#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
--link-dest="$DEST/latest" \
/var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +
شغّل السكربت وفق جدول ليلًا، ودائمًا مع التسجيل.
الاستثناءات
rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log
نادرًا ما يكون نسخ الجذر بأكمله ضروريًا: الأجدى بناء قائمة دقيقة من مقالة ما الذي يجب نسخه احتياطيًا بالضبط.
متى لا يكون rsync مناسبًا
- إذا كنت بحاجة إلى تشفير التخزين وإزالة التكرار، فاستخدم Restic.
- إذا كانت البيانات تتغيّر باستمرار وكانت السلامة مهمة، فافرغ قاعدة البيانات أولًا، ثم انسخ الملف الناتج باستخدام rsync.
- إذا كان المستقبِل تخزينًا لشخص آخر لا تثق به: يكتب rsync الملفات كما هي، دون تشفير من جانب العميل.
أخطاء شائعة
--deleteمع مسار مصدر خاطئ. مجلد مصدر فارغ يمحو المستقبِل. التشغيل التجريبي إلزامي.- نسخة على القرص نفسه. هذه ليست نسخة احتياطية، بل هدف ثانٍ للعطل نفسه. راجع النسخ خارج الموقع.
- الضغط لبيانات مضغوطة أصلًا.
-zيبطئ الأرشيفات والصور فقط. - التشغيل الليلي يصطدم باختناق القرص. يعتمد حد إنتاجية الكتابة على المستوى: راجع سرعة القرص. يساعد
--bwlimit=20000والتشغيل في ساعات الذروة المنخفضة. - لا أحد يتحقق من النتيجة. سجّل رمز الإرجاع وراقبه:
rsync ... || echo "backup failed" | mail -s alert you@example.com.