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

أوّلًا: لا تلمس الأصل

cp backup.tar.gz /srv/work/backup-copy.tar.gz

كل محاولة إنقاذ أدناه مدمّرةٌ في موضعٍ ما. اعمل على نسخة دائمًا، فلا تكلّفك محاولةٌ فاشلة شيئًا.

إن رفض gzip

gzip -t backup.tar.gz                 # what is wrong
zcat backup.tar.gz > partial.tar 2>/dev/null || true
tar -xf partial.tar --ignore-zeros --warning=no-timestamp

ملفّ gzip مقطوعٌ ما زال يفكّ ضغط كل شيء حتى موضع العطب. وعلى أرشيف مرتّب أبجديًّا يكون ذلك غالبًا أغلب الموقع.

وإن رفضت نسخة SQL أن تُستورَد

zcat db.sql.gz | head -50            # is the header there
zcat db.sql.gz | tail -5            # does it end with "Dump completed"

# import ignoring the failures, then see what arrived
zcat db.sql.gz | mysql --force restore_test
mysql restore_test -e "SHOW TABLES"

الراية ‎--force‎ تواصل بعد جملةٍ معطوبة. والنسخة المقطوعة في منتصف جدولٍ تستعيد كل جدول قبله، وهو غالبًا الجدول الذي كنت تحتاجه.

ثم ابحث عن نسخ أخرى

  • لقطات المزوّد نفسه، وهي منفصلة عن لقطاتك.
  • وخادم تجربة، وهو نسخة أقدم قليلًا من الإنتاج.
  • وحاسوب مطوّرٍ عليه نسخة حديثة.
  • وتصديرات التطبيق نفسه — فملفّ CSV للطلبات خيرٌ من لا شيء.

وبعد ذلك، كي لا يتكرّر

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