نظرة عامة
تُعدّ أداة blkdiscard وسيلة متقدمة وفعالة في بيئة لينكس لتفريغ قطاعات وسائط التخزين السريعة (SSD وNVMe) وإعادتها لحالتها الأولية عبر إرسال أوامر TRIM المباشرة لمستوى العتاد. يستعرض هذا الدليل التطبيقي كيفية توظيف هذه الأداة بأمان تام من خلال محاكاة قرص افتراضي عبر أجهزة التكرار الحلقي (Loopback Device)، مما يتيح لك استيعاب خياراتها الجوهرية وفهم آلية عملها دون أي مجازفة بالبيانات الفعلية. ستكتسب هنا المهارات الأساسية لتجهيز وسائط التخزين لإعادة الاستخدام واستعادة كفاءتها التشغيلية القصوى.
1. التحقق من دعم القرص لخاصية TRIM وتفقد وحدات التخزين
قبل الشروع في استخدام blkdiscard، يتعين على مدير النظام التأكد من جاهزية وحدة التخزين وقابليتها للتعامل مع عمليات التخلص من الكتل (Discard/TRIM)، وذلك بتنفيذ الأمر التالي: lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS.
عند فحص المخرجات، يشير ظهور قيم موجبة غير صفرية في حقول DISC-GRAN وDISC-MAX (مثل 512B و2T) إلى أن وحدة التخزين المعنية (nvme0n1) مهيأة بالكامل وتدعم وظيفة TRIM دون معوقات.

2. إعداد وحدة تخزين تجريبية عبر أجهزة التكرار الحلقي (Loopback)
لتفادي مخاطر العبث بالأقراص الحقيقية، نبدأ ببناء ملف صورة تجريبي بسعة 64 ميجابايت مشحون ببيانات عشوائية عبر أداة النسخ المنخفض: dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none.

لكي يعامل النواة هذا الملف كأنه وحدة تخزين مادية مستقلة، نقوم بربطه بأقرب مسار حلقي متاح بتشغيل: sudo losetup -fP /tmp/test_disk.img.

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

للتثبت من القيمة التي تم إسنادها للمتغير $LOOP_DEV، نطبع النتيجة على الشاشة بواسطة: echo "생성된 디바이스: $LOOP_DEV".
تُظهر استجابة الطرفية بوضوح أن الجهاز /dev/loop0 هو المعرف المرتبط بالعملية الحالية.

قبل تنفيذ عملية التصفير، نتحقق من وجود المحتوى العشوائي داخل أول 128 بايت من وحدة التخزين بعرض تمثيلها الست عشري: sudo hexdump -C -n 128 $LOOP_DEV.
تكشف البيانات المعروضة عن تسلسلات بايتية غير متكررة تبتعد تماماً عن قيم الأصفار، مما يثبت نجاح التهيئة الأولية بالبيانات العشوائية.

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

نقوم الآن بحذف كافة القطاعات عبر تشغيل تفريغ شامل مع تفعيل وضع التفاصيل (Verbose): sudo blkdiscard -v $LOOP_DEV.
يوضح التقرير الناتج أن العملية شملت المساحة الكلية ابتداءً من الإزاحة 0 وحتى 67,108,864 بايت (أي 64 ميجابايت كاملة)، مما يعني التخلص من كل الكتل التخزينية على الجهاز.

للتأكد القاطع من خلو القرص، نعيد فحص أول 128 بايت ست عشرياً: sudo hexdump -C -n 128 $LOOP_DEV.
تُثبت النتيجة إفراغ البيانات تماماً واختفاء الحشو العشوائي السابق، حيث لا يظهر أي محتوى أو تؤول جميع القيم إلى أصفار نقية.

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

لاختبار التخلص الجزئي من نطاق بعينه، نحقن نصاً تجريبياً في مستهل القرص الافتراضي على مدار 10 ميجابايت: echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none.

لحذف هذا القطاع المحدد دون المساس ببقية أجزاء القرص، نحدد نقطة البداية بالإزاحة 0 والطول بمقدار 10 ميجابايت عبر: sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV.
يؤكد السجل التشغيلي تفريغ نطاق يبلغ بدقة 10,485,760 بايت (10 ميجابايت) ابتداءً من البايت الأول.

للتحقق من إزالة البيانات المحقونة حديثاً في هذا النطاق، نقرأ أول 64 بايت: sudo hexdump -C -n 64 $LOOP_DEV.
تكشف المخرجات عن فراغ تام، مما يبرهن على نجاح الأداة في تصفير النطاق المعين بدقة متناهية.

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

نقوم بفك ارتباط وحدة التخزين الحلقية عن النظام بصورة سليمة: sudo losetup -d $LOOP_DEV.

نسترجع مساحة التخزين بحذف ملف الصورة المؤقت من الدليل /tmp: rm -f /tmp/test_disk.img.

للتثبت من عدم بقاء أي ارتباطات حلقية مهملة داخل النظام، نستطلع الأجهزة النشطة: losetup -a.
يؤكد غياب أي مخرجات خلو النظام تماماً من الأجهزة التجريبية واستعادة وضعه الأصلي.

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