التخزين: الأقراص والأقسام وأنظمة الملفات
التخزين: الأقراص والأقسام وأنظمة الملفات
كل خادم إنتاجي ستتعامل معه يخزّن بياناته على أجهزة كتلة — تسلسلات خام من القطاعات ذات الحجم الثابت يكشفها النواة كـ /dev/sda أو /dev/nvme0n1 أو /dev/xvdb وما شابهها. قبل أن يكون جهاز الكتلة قابلاً للاستخدام يجب تقسيمه وتهيئته. فهم هذه الطبقات أمر لا غنى عنه لمهندس DevOps: التقسيم الخاطئ يعني فقدان بيانات لا رجعة فيه، وسطر خاطئ في /etc/fstab قد يمنع الخادم من الإقلاع تماماً.
فحص أجهزة الكتلة باستخدام lsblk
lsblk (عرض قائمة أجهزة الكتلة) هو دائماً أداتك الأولى. يقرأ شجرة sysfs الخاصة بالنواة ويعرض كل قرص وأقسامه ونقاط توصيله — دون الحاجة إلى صلاحيات root.
الحقول الأساسية: NAME اسم جهاز النواة؛ FSTYPE نوع نظام الملفات (فارغ يعني غير مهيَّأ)؛ MOUNTPOINTS يُظهر مكان إمكانية الوصول في شجرة المجلدات. الجهاز الذي لا يحمل FSTYPE ولا نقطة توصيل هو تخزين خام — مساحة قرص غير مخصصة.
إنشاء الأقسام باستخدام fdisk
fdisk هو محرر الأقسام التفاعلي المعياري للأقراص MBR وGPT. على أي قرص أكبر من 2 تيرابايت، أو على أي نظام يستخدم UEFI، أنشئ دائماً جدول أقسام من نوع GPT — فـ MBR لا يستطيع التعامل مع أكثر من 2 تيرابايت ولا يدعم إلا أربعة أقسام رئيسية.
/dev/sda هو قرص النظام الجذري. تشغيل fdisk على الجهاز الخطأ يعني فقدان بيانات فورياً لا يمكن إصلاحه. تحقق دائماً بـ lsblk وراجع الحجم وحالة التوصيل الحالية أولاً. نمط شائع في Google وAmazon: ضع تسمية على أقراص البيانات (mkfs -L data-vol-1) وأشِر إليها بالتسمية لا بمسار الجهاز الذي قد يتغير عند الإقلاع.
التهيئة: mkfs
بعد التقسيم يجب تهيئة القسم بنظام ملفات. mkfs هو الأمر الشامل؛ الأداة الفعلية هي متغيّر mkfs.النوع. اختر نظام ملفاتك حسب حالة الاستخدام:
- ext4 — الافتراضي لمعظم أحمال عمل Linux. ناضج ومزود بسجل وسلوك fsck معروف. مفضل لأحجام الجذر وأقراص البيانات للأغراض العامة.
- xfs — مفضل في RHEL/Amazon Linux للملفات الكبيرة وأحمال العمل عالية الإنتاجية (قواعد البيانات، تجميع السجلات). يتوسع بشكل أفضل عند أحجام متعددة التيرابايت؛ كتابة ملفات كبيرة أسرع.
- tmpfs — مدعوم بالذاكرة العشوائية RAM، يُستخدم للمجلدات المؤقتة (
/run،/tmp). يُحجَّم تلقائياً بجزء من الذاكرة العشوائية؛ يُمسح عند إعادة التشغيل. - btrfs / ZFS — أنظمة ملفات copy-on-write مدمجة مع اللقطات والمجاميع الاختبارية. شائعة في NAS وبرامج تشغيل Kubernetes CSI؛ التشغيل أكثر تعقيداً.
التوصيل: mount و /etc/fstab
يُوصَّل نظام الملفات المُهيَّأ بمسار مجلد (نقطة التوصيل). التوصيلات المؤقتة تعيش حتى إعادة التشغيل؛ /etc/fstab يجعل التوصيلات دائمة عبر عمليات إعادة التشغيل.
nofail للأحجام غير الجذرية في VMs السحابية. إذا وصلت حجم EBS وأخذت لقطة منه ثم استعدت إلى نسخة جديدة دون إعادة توصيل الحجم، سيتوقف الإقلاع إلى أجل غير مسمى عند "A start job is running for..." بدون nofail. فقد مهندسو الاستجابة للحوادث ساعات في هذا. استخدم nofail لكل توصيل ثانوي في fstab.
LVM: مدير الأحجام المنطقية
الأقسام الخام لها قيد رئيسي: تغيير الحجم يتطلب إلغاء التوصيل (أو إعادة التشغيل). يحل LVM هذا بإدراج طبقة مرنة بين التخزين المادي وأنظمة الملفات. إنه الطبقة المعيارية للتخزين في أنظمة Linux المؤسسية وواجهات الأحجام الدائمة في Kubernetes وأي حمل عمل يحتاج نمو القرص بشكل ديناميكي دون توقف.
الثلاث تجريدات في LVM:
- الحجم المادي (PV) — قرص خام أو قسم يُهيَّأ بـ
pvcreate. يكتب LVM بيانات وصفه في بداية الـ PV. - مجموعة الأحجام (VG) — واحد أو أكثر من الـ PVs تُجمَّع معاً بـ
vgcreate. فكّر في الـ VG كحوض تخزين واحد كبير. - الحجم المنطقي (LV) — شريحة مُسمّاة من الـ VG تُنشأ بـ
lvcreate. يظهر كـ/dev/vg-name/lv-name. هيّئه وصِله تماماً مثل القسم العادي.
sudo lvcreate -L 10G -s -n lv-app-snap /dev/vg-data/lv-app. صِل اللقطة للقراءة فقط وشغّل النسخة الاحتياطية عليها، ثم احذفها. الحجم الحي لا يُقفَل أبداً، ولديك نسخة متسقة في نقطة زمنية محددة. هذه هي الطريقة التي تنفّذ بها خدمات قواعد البيانات المدارة (RDS، AlloyDB) واجهات برمجة اللقطات تحت الغطاء.
أنماط الفشل الشائعة في الإنتاج
فهم أنماط الفشل يُميّز المهندسين القادرين على التعافي من الحوادث عن أولئك الذين يُصعّدونها. أكثر إخفاقات التخزين شيوعاً التي ستواجهها:
- امتلاء حجم الجذر: تتوقف التطبيقات عن كتابة السجلات، تتعطل قواعد البيانات، قد يعمل SSH لكن تقريباً لا شيء آخر يعمل. شخّص المشكلة بـ
df -hT. راحة فورية:journalctl --vacuum-size=200M(انظر الدرس 2)، ثم ابحث عن الملفات الكبيرة واحذفها أو أرشفها بـdu -sh /* 2>/dev/null | sort -rh | head. - جهاز خاطئ في fstab: النظام لا يستطيع إيجاد UUID عند الإقلاع، ينتهي بصدفة الاسترداد الطارئ. صحّح من وحدة تحكم الاسترداد بتعديل
/etc/fstabوتصحيح UUID. شغّل دائماًsudo mount -aبعد تعديل fstab لاكتشاف الأخطاء قبل إعادة التشغيل. - فساد نظام الملفات: بعد انقطاع مفاجئ للتيار، يعالج سجل ext4 عادةً نفسه عند التوصيل التالي. إن لم يفعل:
sudo fsck -n /dev/nvme1n1p1(فحص للقراءة فقط أولاً)، ثمsudo fsck -y /dev/nvme1n1p1(الإصلاح). لا تشغّل fsck أبداً على نظام ملفات موصول. - عدم تطابق بيانات LVM الوصفية بعد إساءة استخدام اللقطات: الإزالة غير المكتملة للقطة قد تُفسد بيانات الـ VG الوصفية. احذف اللقطات دائماً بـ
lvremoveصراحةً؛ لا تدعها تمتلئ (اللقطة الممتلئة تصبح غير صالحة).