دليل أداة blockdev في لينكس: فحص وضبط أجهزة التخزين

نظرة عامة

تُعد أداة blockdev من الأدوات الأساسية منخفضة المستوى التي يعتمد عليها مسؤولو الأنظمة للتخاطب المباشر مع وحدات التخزين الكتلية (Block Devices) وإدارتها في بيئات لينكس. نناقش في هذا الدليل التطبيقي خطوات استعراض المعلمات البنيوية للقطاعات، وتفعيل قيود الحماية لمنع الكتابة غير المصرح بها، بالإضافة إلى معايرة ذاكرة القراءة الاستباقية (Read-ahead) للارتقاء بكفاءة عمليات الإدخال والإخراج عبر تدريبات عملية متدرجة.

إنشاء جهاز حلقي (Loop Device) للتطبيق العملي واستكشاف خصائصه

تجنبًا للمخاطرة ببيانات الأقراص الحقيقية وتوفيرًا لبيئة اختبار آمنة، نبدأ بتجهيز ملف صورة قرص افتراضي بحجم 100 ميجابايت عبر تشغيل الأمر fallocate -l 100M /tmp/test_disk.img.

إنشاء ملف افتراضي عبر fallocate

ولكي تتعامل النواة (Kernel) مع هذا الملف كأنه وحدة تخزين مادية مستقلة، نقوم بإسناده إلى أول جهاز حلقي متاح في النظام مع قراءة جدول التقسيم تلقائيًا بواسطة sudo losetup -fP /tmp/test_disk.img.

ربط ملف التخزين بجهاز حلقي عبر losetup

لتيسير التعامل مع مسار الجهاز الجديد داخل سطر الأوامر وتفادي إدخاله يدويًا في كل مرحلة، نستخرج المسار ونحفظه داخل متغير بيئي بتنفيذ LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

تخزين مسار الجهاز في متغير بيئي

تعتمد أداة blockdev على استدعاءات تحكم الإدخال والإخراج (ioctl) لاستخراج معايير ضبط العتاد وتعديلها مباشرة في طبقة النواة.
وعند تشغيل الأمر sudo blockdev --report ${LOOP_DEV}، نحصل على جدول بياني شامل يلخص المعلمات الحيوية للقرص مثل حالة القراءة فقط (RO)، وحجم ذاكرة القراءة المسبقة (RA)، وحجم القطاع (SSZ)، وحجم الكتلة (BSZ)، وإجمالي السعة التخزينية (Size).
⚙️ [أبرز خيارات الأداة]

--report : عرض ملخص جدولي يضم جميع المعلمات الأساسية لوحدة التخزين المحددة (مثل RO وRA وSSZ وBSZ والسعة الإجمالية).
--getro : التحقق من حالة حماية القرص (يُرجع القيمة 1 إذا كان للقراءة فقط، و0 إذا كانت الكتابة مسموحة).
--setro : فرض وضع القراءة فقط وحظر أي عمليات تعديل أو كتابة على الجهاز.
--setrw : استعادة صلاحيات القراءة والكتابة وإلغاء القفل.
--getra : الاستعلام عن عدد قطاعات القراءة المسبقة (Read-Ahead) المضبوطة حاليًا.
--setra [عدد القطاعات] : تخصيص عدد قطاعات القراءة الاستباقية لتحسين سرعة القراءة المتتابعة للبيانات.
--getss : جلب الحجم المنطقي للقطاع (Logical Sector Size) بوحدة البايت.
--getbsz : عرض حجم الكتلة (Block Size) المعتمد في عمليات النظام بالبايت.
--getsize64 : استخراج السعة التخزينية الكلية بدقة متناهية بوحدة البايت.
--flushbufs : إجبار النظام على تفريغ البيانات المعلقة في الذاكرة الوسيطة وكتابتها فورًا على التخزين.

تقرير شامل لخصائص الجهاز عبر blockdev –report

الاستعلام المفصل عن سعة الجهاز وأحجام القطاعات والكتل

نؤكد الإشارة إلى مسار الجهاز الحلقي المستخدم في التجربة بحفظ قيمته مجددًا في المتغير البيئي عبر الأمر LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

تأكيد تعيين مسار الجهاز الحلقي في المتغير

يُمكننا استخراج الحجم الإجمالي الدقيق لمساحة التخزين بوحدة البايت عبر تشغيل sudo blockdev --getsize64 ${LOOP_DEV}.
وتعكس القيمة الناتجة 104857600 بايت مطابقة كاملة لحجم 100 ميجابايت الذي تم تحديده مسبقًا للملف الافتراضي.

الاستعلام عن الحجم الإجمالي بالبايت عبر blockdev –getsize64

يقوم الأمر sudo blockdev --getss ${LOOP_DEV} بالتحقق من الحجم المنطقي للقطاع (Logical Sector Size)، وهو أصغر كتلة بيانات يعتمد عليها نظام التشغيل في عمليات العنونة.
وتدل القيمة المعروضة 512 على اعتماد الحجم القياسي الشائع البالغ 512 بايت لكل قطاع منطقي.

فحص حجم القطاع المنطقي عبر blockdev –getss

للتعرف على الأبعاد الفيزيائية الحقيقية على مستوى عتاد وسيط التخزين، نتحقق من حجم القطاع الفعلي بواسطة sudo blockdev --getpbsz ${LOOP_DEV}.
وتشير النتيجة 512 إلى أن القطاع المادي يبلغ 512 بايت، وتطابقه مع القطاع المنطقي يضمن العمل بكفاءة عالية دون التسبب في أعباء إضافية ناجمة عن مشاكل عدم محاذاة القطاعات.

التحقق من حجم القطاع الفعلي عبر blockdev –getpbsz

التحكم في حماية البيانات: تفعيل وضع القراءة فقط وإلغاؤه

نعيد تعيين مسار الجهاز الحلقي في المتغير البيئي لضمان دقة تنفيذ الخطوات التالية عبر الأمر LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

إعادة ضبط المتغير البيئي لمسار الجهاز

لحماية وسائط التخزين من الحذف العرضي أو التعديلات غير المصرح بها، يتيح الأمر sudo blockdev --setro ${LOOP_DEV} تأمين القرص وتحويله بالكامل إلى وضع القراءة فقط (Read-Only).

تفعيل وضع القراءة فقط عبر blockdev –setro

للتثبت من نجاح تطبيق وضع الحماية، نتحقق من المؤشر التنفيذي للأداة باستخدام sudo blockdev --getro ${LOOP_DEV}.
وتعني القيمة المرجعة 1 تفعيل الحظر الصارم ضد الكتابة على هذا القرص بنجاح.

التأكد من حالة القراءة فقط عبر blockdev –getro

عند انتهاء الحاجة إلى الحظر والرغبة في استئناف عمليات التعديل والحفظ المعتادة، ننفذ الأمر sudo blockdev --setrw ${LOOP_DEV} لإعادة الجهاز إلى نمط القراءة والكتابة (Read-Write).

إلغاء وضع القراءة فقط وتمكين الكتابة عبر blockdev –setrw

نعاود فحص حالة القرص من جديد عبر الأمر sudo blockdev --getro ${LOOP_DEV}.
وظهور القيمة 0 يؤكد رفع قيود القراءة فقط وجاهزية وحدة التخزين لاستقبال البيانات مجددًا.

تأكيد عودة الجهاز إلى وضع القراءة والكتابة عبر blockdev –getro

تحسين أداء الإدخال والإخراج عبر ضبط ميزة القراءة المسبقة وتنظيف البيئة

نبدأ المرحلة بتحديث مرجع الجهاز في متغير البيئة كالمعتاد بواسطة LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

استدعاء مسار الجهاز الحلقي في المتغير

يتيح الأمر sudo blockdev --getra ${LOOP_DEV} استعراض عدد قطاعات القراءة الاستباقية (Read-Ahead) المضبوطة حاليًا في الذاكرة المخبأة للنواة.
وتوضح النتيجة 256 أن النواة تقرأ استباقيًا 256 قطاعًا (قرابة 128 كيلوبايت) عند رصد طلبات قراءة متسلسلة لتقليص أوقات الانتظار.

معاينة سعة القراءة الاستباقية عبر blockdev –getra

عند التعامل مع سيناريوهات قراءة متسلسلة لملفات كبيرة، يمكن تحسين الإنتاجية عبر مضاعفة هذا التخزين المؤقت، وذلك بتنفيذ الأمر sudo blockdev --setra 1024 ${LOOP_DEV} لرفع السعة إلى 1024 قطاعًا (حوالي 512 كيلوبايت).

تعديل قيمة القراءة المسبقة عبر blockdev –setra 1024

للتأكد من اعتماد التعديل الجديد في طبقة النواة، نعيد استدعاء الأمر sudo blockdev --getra ${LOOP_DEV}.
وتشير القيمة المحدثة 1024 إلى سريان مفعول التخصيص الجديد بنجاح.

التحقق من اعتماد القيمة الجديدة للقراءة المسبقة

بعد اختتام خطوات التطبيق العملي، نسترجع موارد النظام بفصل الجهاز الحلقي وإزالة ملف صورة التخزين المؤقت دفعة واحدة بواسطة الأمر sudo losetup -d ${LOOP_DEV} && rm -f /tmp/test_disk.img.

فصل الجهاز الحلقي وحذف الملف المؤقت لتنظيف النظام

قدم هذا الدليل استعراضًا شاملاً لأبرز استخدامات أداة blockdev في نظام لينكس، بدءًا من فحص بنية القطاعات وانتهاءً بضبط آليات القراءة الاستباقية وتأمين وسائط التخزين. ونظرًا للحساسية العالية لعمليات تعديل وسائط التخزين وتأثيرها المباشر على النظام، احرص دائمًا على اختبار هذه التهيئات في بيئات معزولة قبل تطبيقها على الخوادم الإنتاجية.