النسخة المجدوَلة تحميك من الأمس. أمّا تحديثٌ يكسر الموقع فيكسره الآن، وقد يكون عمر آخر نسخة عشرين ساعة وبينهما يومٌ من الطلبات. النسخة التي تهمّ هي المأخوذة قبل التغيير مباشرة.

أمرٌ واحد

#!/usr/bin/env bash
# /usr/local/bin/snap
set -euo pipefail
SITE=/var/www/site
OUT=/srv/backup/pre-change/$(date +\%F-\%H\%M)
mkdir -p "$OUT"
tar -czf "$OUT/files.tar.gz" -C "$SITE" .
mysqldump --single-transaction --quick --routines --triggers dbname | gzip > "$OUT/db.sql.gz"
echo "$OUT"
sudo snap && sudo apt-get upgrade

واجعله تلقائيًّا حيثما سمحت الأدوات

  • سكربت النشر ينفّذه أوّل خطوة، قبل أن يُنسخ أي شيء.
  • تحديثات الحزم: خطّافات apt، أو غلافٌ تستعمله بدل apt.
  • تحديثات نظام إدارة المحتوى: لأغلبها إضافة تأخذ لقطة أوّلًا — استعملها، واحتفظ بنسختك أنت أيضًا.

اعرف كيف تعود قبل أن تتقدّم

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

# rollback
tar -xzf /srv/backup/pre-change/2026-09-05-0930/files.tar.gz -C /var/www/site
zcat /srv/backup/pre-change/2026-09-05-0930/db.sql.gz | mysql dbname
استعادة قاعدة البيانات تمحو كل طلب وكل تسجيل منذ اللقطة. على موقع مزدحم، استعد الملفّات أوّلًا ولا تمسّ قاعدة البيانات إلّا إن كان العطل في البيانات فعلًا.

ثم نظّفها

find /srv/backup/pre-change -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +
حدِّث شيئًا واحدًا في المرّة. خمس إضافات دفعةً واحدة تعني أن العطل قد يكون في أيّها، والرجوع يُضيّع التحسينات الخمسة كلّها ليجد عطلًا واحدًا.