النسخة الاحتياطية القابلة للاستعادة هي الفرق بين عصر مزعج وخسارة مشروع. يغطي دليل النسخ الاحتياطي الأساسي لـ VPS الفكرة. أما هذا الدليل فيتعمق أكثر مع restic وBorgBackup: أداتان تنشئان نسخاً احتياطية مشفّرة ومنزوعة التكرار إلى خادم ثانٍ أو إلى تخزين كائنات.
لماذا restic أو borg بدلاً من النسخ العادي
- إزالة التكرار. تُخزَّن البيانات المتغيرة فقط، فتبقى اللقطات اليومية صغيرة.
- التشفير. تُشفَّر البيانات قبل أن تغادر خادمك.
- اللقطات. يمكنك استعادة الحالة من أي يوم مضى.
- التحقق. يمكن لكلتا الأداتين فحص سلامة المستودع.
اختر واحدة. restic بسيطة وتعمل مع أنواع كثيرة من التخزين، بما فيها SFTP والتخزين المتوافق مع S3. أما borg فكفؤة جداً وتعمل عبر SSH مع خادم مثبّت عليه borg.
أين ترسل النسخ الاحتياطية
لا تخزّن النسخة الاحتياطية الوحيدة على الخادم نفسه أبداً. استخدم VPS ثانياً في موقع آخر، أو حاوية متوافقة مع S3، أو storage box. يشكّل VPS صغير بقرص كبير هدفاً رخيصاً للنسخ الاحتياطي. اطّلع على خطط VPS.
Restic: الإعداد
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
أنشئ ملف كلمة المرور بكلمة مرور عشوائية طويلة واحتفظ بنسخة منها دون اتصال. بدون كلمة المرور هذه لا يمكن استعادة النسخ الاحتياطية.
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: الإعداد
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
صدّر مفتاح المستودع واحتفظ به باستخدام borg key export.
قواعد البيانات تحتاج عناية
لا تنسخ ملفات قاعدة البيانات وهي قيد التشغيل. أنشئ لها تفريغاً أولاً وانسخ التفريغ احتياطياً:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
جدولها
شغّل النسخ الاحتياطي من مؤقّت systemd أو cron. سطر cron بسيط:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
نبّه نفسك عند الفشل، مثلاً بإرسال ping مراقبة في نهاية السكربت.
اختبر الاستعادة
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
اختبر استعادة حقيقية على جهاز احتياطي من وقت لآخر. النسخة الاحتياطية التي لم تختبرها مجرد أمل.