لقطات EBS
ما هي اللقطة؟
اللقطة snapshot هي نسخة لحظية (point-in-time) من حجم EBS. إنها آلية النسخ الاحتياطي الرئيسية لـ EBS.
┌─────────────────────────────────────────────────────────────┐
│ لقطة EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ حجم EBS لقطة │
│ (100 GB) (في S3) │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ █████████████ │ ─────────► │ ░░░░░░░░░░░░░ │ │
│ │ █████████████ │ create- │ نسخة من │ │
│ │ █████████████ │ snapshot │ البيانات │ │
│ │ ░░░░░░░░░░░░░ │ │ (مضغوط) │ │
│ └─────────────────┘ └─────────────────┘ │
│ مستخدم: 60 GB مخزن: ~60 GB │
│ مساحة فارغة: 40 GB (بيانات فعلية) │
│ │
│ الخصائص: │
│ • مخزن في S3 (مدار من قبل AWS) │
│ • تزايدي بعد الأول │
│ • يمكن نسخه بين المناطق │
│ • قاعدة لإنشاء الأحجام أو AMI │
│ │
└─────────────────────────────────────────────────────────────┘
اللقطات التزايدية
┌─────────────────────────────────────────────────────────────┐
│ اللقطات التزايدية │
├─────────────────────────────────────────────────────────────┤
│ │
│ اللقطة الأولى: كاملة │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ حجم: 100 GB │ │
│ │ بيانات: 60 GB │ │
│ │ │ │
│ │ لقطة 1: 60 GB منسوخة │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ اللقطات التالية: تزايدية │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ منذ لقطة 1: │ │
│ │ • 5 GB من البيانات قد تغيرت │ │
│ │ • 2 GB من البيانات الجديدة │ │
│ │ │ │
│ │ لقطة 2: فقط 7 GB منسوخة! │ │
│ │ (ليس 60 GB كاملة) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ الفوائد: │
│ ✅ أسرع │
│ ✅ أقل تخزين │
│ ✅ أقل تكلفة │
│ │
│ الحذف: إذا قمت بحذف لقطة 1، │
│ تبقى لقطة 2 وظيفية (AWS تدير التبعيات) │
│ │
└─────────────────────────────────────────────────────────────┘
إنشاء لقطة
عبر وحدة التحكم
1. EC2 → Elastic Block Store → Volumes
2. حدد الحجم
3. Actions → Create snapshot
4. الوصف: "backup-avant-mise-a-jour"
5. إضافة علامات (موصى به)
6. Create snapshot
عبر CLI
# إنشاء لقطة
aws ec2 create-snapshot \
--volume-id vol-0123456789abcdef0 \
--description "Backup quotidien - 2024-12-18" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=daily-backup},{Key=Environment,Value=prod}]'
# عرض اللقطات
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[*].[SnapshotId,VolumeId,State,StartTime,Description]' \
--output table
الاستعادة من لقطة
إنشاء حجم جديد
# إنشاء حجم من لقطة
aws ec2 create-volume \
--snapshot-id snap-0123456789abcdef0 \
--availability-zone us-east-1a \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=restored-volume}]'
الاستعادة في AZ/منطقة أخرى
┌─────────────────────────────────────────────────────────────┐
│ الاستعادة عبر AZ / عبر المنطقة │
├─────────────────────────────────────────────────────────────┤
│ │
│ حجم us-east-1a ──► لقطة ──► حجم us-east-1b │
│ │ │
│ │ (نسخ اللقطة) │
│ ▼ │
│ لقطة ──► حجم eu-west-1a │
│ (eu-west-1) │
│ │
│ # نسخ لقطة إلى منطقة أخرى │
│ aws ec2 copy-snapshot \ │
│ --source-region us-east-1 \ │
│ --source-snapshot-id snap-xxx \ │
│ --region eu-west-1 \ │
│ --description "DR copy" │
│ │
└─────────────────────────────────────────────────────────────┘
أفضل ممارسات النسخ الاحتياطي
استراتيجية الاحتفاظ
┌─────────────────────────────────────────────────────────────┐
│ استراتيجية الاحتفاظ │
├─────────────────────────────────────────────────────────────┤
│ │
│ مثال: استراتيجية "Grandfather-Father-Son" │
│ │
│ يومي (Son): │
│ • لقطة كل ليلة │
│ • الاحتفاظ لمدة 7 أيام │
│ │
│ أسبوعي (Father): │
│ • لقطة كل يوم أحد │
│ • الاحتفاظ لمدة 4 أسابيع │
│ │
│ شهري (Grandfather): │
│ • لقطة في اليوم الأول من الشهر │
│ • الاحتفاظ لمدة 12 شهر │
│ │
│ النتيجة: │
│ • 7 + 4 + 12 = 23 لقطة كحد أقصى │
│ • تغطية لمدة عام │
│ • تكلفة محكومة │
│ │
└─────────────────────────────────────────────────────────────┘
الأتمتة مع AWS Backup
┌─────────────────────────────────────────────────────────────┐
│ AWS BACKUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ خدمة AWS لأتمتة النسخ الاحتياطي │
│ │
│ التكوين: │
│ 1. إنشاء خطة نسخ احتياطي │
│ 2. تحديد القواعد (التكرار، الاحتفاظ) │
│ 3. تخصيص الموارد (الأحجام، بواسطة العلامات) │
│ 4. AWS تنشئ اللقطات تلقائيًا │
│ │
│ الفوائد: │
│ ✅ لا حاجة لصيانة السكربتات │
│ ✅ إدارة مركزية │
│ ✅ الامتثال والتقارير │
│ ✅ عبر المنطقة تلقائيًا │
│ │
│ البديل: Data Lifecycle Manager (DLM) │
│ أبسط ولكن بميزات أقل │
│ │
└─────────────────────────────────────────────────────────────┘
تكلفة اللقطات
┌─────────────────────────────────────────────────────────────┐
│ تكلفة اللقطات │
├─────────────────────────────────────────────────────────────┤
│ │
│ السعر: ~$0.05 لكل GB-شهر │
│ │
│ مثال: │
│ • حجم 100 GB │
│ • 60 GB من البيانات الفعلية │
│ • 7 لقطات (أسبوع يومي) │
│ │
│ اللقطة الأولى: 60 GB │
│ التالية: ~5 GB لكل منها (تزايدي) │
│ الإجمالي المخزن: 60 + (6 × 5) = 90 GB │
│ │
│ التكلفة الشهرية: 90 × $0.05 = $4.50 │
│ │
│ ⚠️ اللقطات المنسية تكلف! │
│ قم بالتدقيق بانتظام واحذف غير الضروري │
│ │
└─────────────────────────────────────────────────────────────┘
اللقطة مقابل AMI
┌─────────────────────────────────────────────────────────────┐
│ اللقطة مقابل AMI │
├─────────────────────────────────────────────────────────────┤
│ │
│ اللقطة AMI │
│ ──────── ─── │
│ • نسخ احتياطي لحجم واحد • صورة كاملة │
│ • بيانات فقط • نظام تشغيل + تكوين + بيانات │
│ • لاستعادة البيانات • لتشغيل المثيلات │
│ • مستوى الكتلة • مستوى المثيل │
│ │
│ العلاقة: │
│ AMI = بيانات وصفية + لقطات الأحجام │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ AMI │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ بيانات وصفية (اسم، معمارية، إلخ.) │ │ │
│ │ └──────────────────────────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ لقطة │ │ لقطة │ │ │
│ │ │ حجم الجذر │ │ حجم البيانات │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
الأوامر المفيدة
# سرد جميع اللقطات
aws ec2 describe-snapshots --owner-ids self
# حذف لقطة
aws ec2 delete-snapshot --snapshot-id snap-xxx
# النسخ إلى منطقة أخرى
aws ec2 copy-snapshot \
--source-region us-east-1 \
--source-snapshot-id snap-xxx \
--region eu-west-1
# مشاركة لقطة مع حساب آخر
aws ec2 modify-snapshot-attribute \
--snapshot-id snap-xxx \
--attribute createVolumePermission \
--operation-type add \
--user-ids 123456789012
# العثور على اللقطات اليتيمة (بدون حجم مصدر)
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[?!VolumeId]'
اختبار التحقق
- ما هي اللقطة التزايدية؟
- أين تُخزن اللقطات؟
- هل يمكن إنشاء حجم في AZ مختلفة من لقطة؟
- ما هي العلاقة بين AMI واللقطة؟
- كيف يمكن أتمتة اللقطات؟
القسم التالي: مختبر: تخزين EBS