Skip to content
VDS · النسخ الاحتياطية والقرص

Restic: نسخ احتياطية مع التشفير والسجل

كيف تُعدّ نسخًا احتياطية بتشفير من الطرف إلى الطرف، وإزالة التكرار، ولقطات حسب التاريخ، وتؤتمتها، وتتحقق من سلامتها.

آخر تحديث 23 أغسطس 2026

Restic يحل ما لا يستطيع rsync حله: فهو يشفّر البيانات قبل إرسالها، ويحتفظ بسجل للقطات، ولا ينسخ الكتل نفسها مرتين، ويمكنه تخزين النسخ الاحتياطية في تخزين متوافق مع S3. برنامج واحد بلا اعتماديات.

التثبيت وأول مستودع لك

sudo apt install -y restic
restic version

المستودع هو المكان الذي تُحفظ فيه نسخك الاحتياطية. يمكن أن يكون مجلدًا، أو جهازًا عبر SFTP، أو تخزينًا كائنيًا:

export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init

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

إنشاء نسخة احتياطية

restic backup /var/www /etc/nginx /opt/myapp \
  --exclude-file=/root/restic-exclude.txt \
  --tag daily
restic snapshots
restic ls latest
restic stats

التشغيل الثاني وما يليه سريع: لا تُنقل سوى كتل البيانات الجديدة.

الاستعادة

restic restore latest --target /restore
restic restore <snapshot-id> --target /restore --include /var/www/uploads

الأكثر راحة هو عرض المحتويات دون فك كل شيء:

mkdir /mnt/snapshots
restic mount /mnt/snapshots

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

الجدولة والتنظيف

سكربت /usr/local/bin/backup.sh:

#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

docker compose -f /opt/myapp/compose.yaml exec -T db \
  pg_dump -U postgres app | gzip > /var/backups/db.sql.gz

restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh

يأتي بعد ذلك مؤقت systemd، انظر المهام المجدولة. يزيل forget --prune اللقطات الزائدة ويحرر المساحة؛ وبدون --prune تختفي اللقطات من القائمة لكن البيانات تبقى.

فحوصات السلامة

restic check
restic check --read-data-subset=5%

يتحقق الأمر الأول من البنية، ويقرأ الثاني جزءًا من البيانات ويتحقق من مجاميع التحقق. شغّل الثاني مرة شهريًا: فهو يُحمّل القرص والنطاق الترددي، لكنه ما يكتشف التلف الصامت.

فحص البنية لا يغني عن استعادة حقيقية — انظر تمرين الاستعادة.

الموارد

يحتفظ Restic بفهرس في الذاكرة: على مجموعات البيانات الكبيرة يبلغ ذلك مئات الميغابايت. على VDS-1 بذاكرة 2 GB، قد لا تكفي النسخ الاحتياطي لعشرات الغيغابايت — حدّ من التوازي أو انقل النسخ الاحتياطية الثقيلة مستوى واحدًا للأعلى. حمل القرص ملحوظ، لذا جدولها ليلًا: انظر سرعة القرص.

أخطاء شائعة

  • كلمة المرور محفوظة فقط على الجهاز الذي يُنسخ احتياطيًا. الحالة الكلاسيكية: يُفقد الجهاز مع مفتاح النسخ الاحتياطية.
  • forget بدون --prune. لا تُحرر المساحة ويستمر المستودع في النمو.
  • نسخة احتياطية في المجلد نفسه على القرص نفسه. لن يكون لديك مكان تستعيد منه — انظر النسخ الاحتياطية في موقع آخر.
  • عدم استثناء الذاكنات و/var/lib/docker. تتضخم النسخة الاحتياطية أربعة أضعاف بلا فائدة؛ وقائمة ما يجب تضمينه في مقالة ما يجب نسخه احتياطيًا.
  • التشغيلات المتوازية. سيصطدم التشغيل الثاني بقفل المستودع. غلّف الاستدعاء بـ flock.