هذه أسوأ ساعة في المهنة، ويُنجى منها أكثر ممّا يبدو. اعمل من أحدث نسخة إلى الوراء، ولا تكتب فوق أي شيء وأنت تحاول.
أوّلًا: لا تلمس الأصل
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 للطلبات خيرٌ من لا شيء.
وبعد ذلك، كي لا يتكرّر
النسخة الاحتياطية إمّا مُتحقَّق منها وإمّا أمنية. افحص الأرشيف في كل تشغيلة واستعد واحدةً بجدول — انظر اختبار الاستعادة وقراءة سجلّ نسخةٍ فاشلة. واحتفظ بأكثر من واحدة في أكثر من مكان: لماذا نسخةٌ واحدة ليست نسخة.