4.4 · نسخ المجلدات (volumes) احتياطيا واستعادتها

المستوى 4 · السجلات (registres)، والموثوقية (fiabilité) و CI

4.4نسخ المجلدات (volumes) احتياطيا واستعادتها

الهدف: وضع نسخ احتياطي مختبَر لبيانات Docker.
الوقت المقدّر: 12 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • تفريغ منطقي + لقطة مجلد، متكاملان : التفريغ (dump) (تصدير محمول) قبل الترحيل، واللقطة (snapshot) (أرشيف خام لكل الحالة) قبل التغيير — وعمليا : تفريغ منتظم + لقطة قبل كل عملية.
  • ننسخ دون إيقاف : حاوية مؤقتة تركب المجلد في قراءة فقط وتكتب الأرشيف خارج المجلد — ويستمر الإنتاج أثناء النسخ.
  • منعكس إدير : نسخة غير مختبَرة لا وجود لها — نستعيد على مجلد جديد، ونشغل قاعدة عليه، ونتحقق من البيانات.

حالة مصغرة متواصلة — إدير يثبت أن النسخ يشتغل قبل التحديث

إدير، مهندس devops مبتدئ في الجزائر، عليه تحديث قاعدة الإنتاج : فقبل مس أي شيء، يفرغ القاعدة نحو مجلد مؤرخ ويلتقط لقطة للمجلد عبر حاوية مؤقتة بقراءة فقط، دون إيقاف الإنتاج. ثم يستعيد على مجلد اختبار، ويشغل قاعدة عليه ويتحقق من الجداول. رابع محطة في الخيط الرابط : البيانات منسوخة وقابلة للاستعادة، بالدليل.

تتمة حالات 4.1-4.3 — يحمي إدير الآن بيانات الخدمات المعروضة.

1. مدرستان : تفريغ أم لقطة

التفريغ المنطقي (dump logique) (تصدير عبر exec) يعطي ملفا محمولا، مثاليا قبل الترحيل. ولقطة المجلد (snapshot du volume) (حاوية خدمية تؤرشف المجلد) تلتقط كل الحالة. وعمليا : تفريغ منتظم + لقطة قبل التغيير — مثل إدير قبل تحديثه.

يكمل الاثنان بعضهما : التفريغ يُقرأ ويُرحَّل بسهولة، واللقطة تستعيد الكل identically. وواحد منهما وحده، نصف نسخة.

2. النسخ دون إيقاف

لا نوقف القاعدة : نطلق حاوية مؤقتة تركب المجلد نفسه في قراءة وتكتب الأرشيف خارج المجلد (مجلد محلي أو تخزين بعيد). ويستمر الإنتاج أثناء النسخ — فلا يوقف إدير أي خدمة.

أتمتوا وأرخوا : نسخ مجدول، وأرشيفات مؤرخة، ومدة احتفاظ معرفة (يوميات + أسبوعيات). فالأرشفة داخل المجلد نفسه تعني فقد النسخة معه.

3. نسخة غير مختبَرة لا وجود لها

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

الاختبار إثبات : أرشيف أُعيد تشغيله، وجداول متحقق منها، ثم حذف مجلد الاختبار. ولا تُعتمد نسخة إدير إلا بعد هذا الطقس.

خطأ شائع في الفهم: « نسخت ملفا، إذن هو منسوخ — وأخزن الأرشيف داخل المجلد، في الدفء ». لا. فأرشيف لم يُعَد تشغيله قد يكون فارغا أو غير مقروء، ومخزنا داخل المجلد يختفي معه. حاوية مؤقتة بقراءة فقط، وأرشيف خارج المجلد وفي مكان آخر غير الآلة، واستعادة مختبَرة على مجلد جديد : هذا الطقس هو ما يصنع نسخة حقيقية.
النسخ ثم الإثبات دون إيقاف، وخارج المجلد، ومستعاد في اختبار تفريغ ولقطة محمول +حالة كاملةحاوية مؤقتة قراءة فقط،والإنتاج لا يتوقفأرشيف خارج المجلد مجلدمؤرخ، ودعامة أخرىاستعادة مختبَرة مجلدجديد + تحقق
دون إيقاف، وخارج المجلد، ومستعاد في اختبار
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) يفرغ إدير القاعدة نحو مجلد مؤرخ ويلتقط لقطة للمجلد عبر حاوية مؤقتة بقراءة فقط، دون إيقاف الإنتاج. 2) يخزن الأرشيفات خارج المجلد، على دعامة أخرى. 3) يستعيد على مجلد جديد، ويشغل قاعدة اختبار ويتحقق من الجداول. 4) يجدول الروتين (يومي + قبل كل تغيير) مع مدة احتفاظ. الدرس : فرغ دون إيقاف، وأرشف خارج المجلد، واستعد للإثبات.

🔎 مثال ملموس — 🔎 مثال ملموس — نسخ Postgres دون إيقاف

طقس إدير : تفريغ + لقطة، واستعادة على مجلد جديد.

docker compose exec bdd pg_dump -U app appdb > backups/appdb-$(date +%F).sql
# لقطة المجلد :
docker run --rm -v projet_pgdata:/data:ro -v ./backups:/backup ubuntu:24.04 tar czf /backup/pgdata-$(date +%F).tgz -C /data .
# استعادة اختبار :
docker volume create pgdata_test
docker run --rm -v pgdata_test:/data -v ./backups:/backup ubuntu:24.04 tar xzf /backup/pgdata-2026-09-22.tgz -C /data

القراءة : تفريغ SQL + لقطة مجلد، واستعادة على مجلد جديد.

الدرس : لا نستعيد أبدا « للتجربة » على مجلد الإنتاج.

مفردات القسم

التفريغ (Dump)
تصدير منطقي محمول (ملف قابل لإعادة التشغيل) للقاعدة، مثالي قبل الترحيل.

مثال بسيط: يصدر إدير قاعدته نحو ملف مؤرخ قبل التحديث.

ما ليس كذلك: أرشيف خام للقرص.

رد فعل: قبل الترحيل : فكروا في تفريغ محمول.

اللقطة (Snapshot)
أرشيف خام لكل حالة المجلد، يستعيد identically.

مثال بسيط: يؤرشف إدير المجلد كله قبل التغيير الخطر.

ما ليس كذلك: تصدير جزئي يُقرأ باليد.

رد فعل: قبل التغيير : التقطوا لقطة لكل الحالة.

تركيب ro
مجلد مركب بقراءة فقط للنسخ : نقرأ دون خطر الكتابة.

مثال بسيط: تقرأ حاوية إدير المؤقتة المجلد دون أن تستطيع تعديله.

ما ليس كذلك: تركيب قابل للكتابة يعرض المجلد.

رد فعل: للنسخ : اركبوا دائما بقراءة فقط.

استعادة مختبَرة
إعادة تشغيل الأرشيف على مجلد جديد + التحقق من البيانات : الدليل الوحيد.

مثال بسيط: يشغل إدير قاعدة اختبار ويتحقق من الجداول قبل الاعتماد.

ما ليس كذلك: أرشيف لم يُعَد تشغيله أبدا.

رد فعل: بعد النسخ : استعيدوا وتحققوا قبل الظن بأنكم محميون.

في التطبيق — عمليا — أول نسخة مختبَرة

  1. افرغوا قاعدتكم نحو ./backups مع التاريخ.
  2. التقطوا لقطة للمجلد عبر حاوية --rm بقراءة فقط.
  3. استعيدوا على pgdata_test وشغلوا قاعدة اختبار.
  4. تحققوا من الجداول، ثم احذفوا مجلد الاختبار.
بياناتكم منسوخة وقابلة للاستعادة، بالدليل.

نص جاهز للقول — إعلان النسخ قبل التحديث (30 ثانية)

« معكم إدير : قبل التحديث، فرغت القاعدة والتقطت لقطة للمجلد دون إيقاف الإنتاج، وأعدت تشغيل الأرشيف على مجلد اختبار مع جداول متحقق منها. وإذا فشل التحديث، نستعيد في دقائق. »

يُقال قبل كل عملية خطرة : اعرضوا التحقق على مجلد الاختبار.

نموذج للنسخ واللصق — تفريغ + لقطة + استعادة اختبار

docker compose exec bdd pg_dump -U app appdb > backups/appdb-$(date +%F).sql
docker run --rm -v projet_pgdata:/data:ro -v ./backups:/backup ubuntu:24.04 tar czf /backup/pgdata-$(date +%F).tgz -C /data .
docker volume create pgdata_test
docker run --rm -v pgdata_test:/data -v ./backups:/backup ubuntu:24.04 tar xzf /backup/pgdata-2026-09-22.tgz -C /data

قبل كل تحديث

مثل إدير : تفريغ + لقطة قبله مباشرة، واستعادة مختبَرة — شبكة أمان العملية.

روتين يومي

تفريغ مجدول مؤرخ كل يوم، وأسبوعيات محفوظة : فالتواتر يتبع كلفة الفقد.

أرشيفات خارج الآلة

نسخة على قرص خارجي أو تخزين بعيد مشفر : فنسخة على القرص نفسه ليست نسخة.

استعادة تفشل في الاختبار

خبر سار يُكتشف مبكرا : صححوا الإجراء الآن بدلا من يوم الكارثة.

✓ ممارسات جيدة

  • أتمتوا الأرشيفات وأرخوها.
  • أرشفوا خارج المجلد، على دعامة أخرى.
  • اختبروا كل استعادة على مجلد جديد.

✗ أخطاء شائعة

  • النسخ داخل المجلد (يُفقَد معه).
  • إيقاف الإنتاج للتفريغ (لا لزوم له).
  • عدم الاستعادة للاختبار أبدا.

النقاط الأساسية

  • تفريغ SQL + لقطة مجلد : متكاملان.
  • مؤقتة --rm بقراءة فقط، والإنتاج لا يتوقف.
  • استعادة اختبار على مجلد جديد.
  • الاحتفاظ + الأتمتة = روتين.

تحدي 48 ساعة — طبّق غدا

على قاعدتكم الحقيقية : افرغوا + التقطوا لقطة دون إيقاف، واستعيدوا على مجلد جديد وتحققوا من البيانات.

قائمة الخروج من القسم
  • أستطيع التفريغ والتقاط اللقطة دون إيقاف الإنتاج.
  • أستطيع الأرشفة خارج المجلد مع احتفاظ.
  • أستطيع الاستعادة على مجلد جديد والتحقق.
تقييم ذاتي 1-5 : هل أُعيد تشغيل نسختي الأخيرة والتحقق منها ؟هل تنجو أرشيفاتي من فقد الآلة ؟

أسئلة شائعة

أي تواتر ؟

يوميا على الأقل لقاعدة حية، وقبل كل ترحيل أو تحديث، مع احتفاظ (يوميات + أسبوعيات). كيّفوا حسب كلفة فقد البيانات.

أين نخزن الأرشيفات ؟

في مكان آخر غير الآلة : قرص خارجي، وتخزين بعيد مشفر. فنسخة على القرص نفسه ليست نسخة.

تحقّق من فهمك

أي نسخة صالحة ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 4أسئلة جديدة وأصعب للتحقق من مكتسباتك