دليل تصفير أقراص SSD في أوبونتو بأداة blkdiscard

نظرة عامة

تُعدّ أداة 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 دون معوقات.

التحقق من إمكانيات TRIM عبر أمر lsblk

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 لتنظيف أقراص الحالة الثابتة وتفريغ قطاعاتها في أوبونتو بسرعة فائقة.
نظراً لأن تنفيذ هذا الإجراء يؤدي إلى محو فوري وغير قابل للاسترجاع، فمن الضروري دائماً مضاعفة التدقيق في معرفات الأقراص المستهدفة قبل التنفيذ لتجنب فقدان البيانات الحساسة.