نظرة عامة
يُعدّ الأمر dd أحد أقوى الأدوات المتاحة في بيئة لينكس للتعامل المباشر مع وسائط التخزين، سواء لإنشاء ملفات اختبار وهمية، أو أخذ نسخ احتياطية متكاملة، أو استنساخ الأقراص بدقة فائقة. نستعرض في هذا الدليل التطبيقي أهم المعاملات البرمجية الشائعة مثل bs وcount وstatus=progress وconv وoflag، مع تحليل وظائفها عملياً عبر تجارب مباشرة من سطر أوامر أوبونتو.
1. أساسيات استخدام dd: ضبط مسارات الدخل والخرج والتحكم في حجم الكتلة (bs وcount)
لتفادي أي تأثير غير مقصود على الملفات الأساسية أثناء التجربة، نبدأ بإنشاء بيئة عمل مؤقتة ومعزولة ثم الدخول إليها عبر تشغيل الأمر mkdir -p /tmp/dd_demo && cd /tmp/dd_demo.

تعتمد آلية dd على قراءة تدفقات البيانات وكتابتها على هيئة كتل محددة الحجم بين الملفات أو الأجهزة الفيزيائية مع إمكانية تحويلها أثناء النقل. على سبيل المثال، يمكن توليد ملف تجريبي باسم sample_10m.img بحجم إجمالي قدره 10 ميغابايت عن طريق سحب أصفار خام من /dev/zero وتكرار عملية كتابة كتلة بحجم 1 ميغابايت 10 مرات متتالية.
⚙️ [أهم الخيارات والمعاملات]
if=FILE : يحدد مسار المصدر (ملف أو قرص تخزين) المراد قراءة سيل البيانات منه.of=FILE : يحدد مسار الوجهة المستهدفة لكتابة البيانات الناتجة إليها.bs=BYTES : يعين حجم الكتلة الواحدة المنقولة في دورة القراءة والكتابة بالبايت.count=N : يضبط العدد الإجمالي للكتل المطلوب استخراجها من المصدر.status=LEVEL : يتحكم في مدى ظهور معلومات التقدم والبيانات الإحصائية في الطرفية (مثل progress).conv=CONVS : يحدد عمليات التحويل أو معايير المزامنة المراد تطبيقها أثناء النسخ (مثل sync أو fdatasync).

للتحقق من سلامة بناء الملف الجديد ومطابقة حجمه على وسيط التخزين للقيمة المطلوبة، ننفذ الأمر ls -lh sample_10m.img.

2. متابعة معدل الإنجاز أثناء معالجة البيانات الكبيرة: خيار status=progress
لضمان التواجد داخل مسار التدريب السابق، نقوم بتنفيذ الأمر cd /tmp/dd_demo.

عند التعامل مع مهام نقل ضخمة قد يستغرق الأمر زمناً ملحوظاً دون ردود فعل بصرية؛ لذا يوفر status=progress حلاً مثالياً بإظهار شريط لحظي يوضح كمية البيانات المكتوبة وسرعة النقل الحالية أثناء توليد ملف sample_100m.img بسعة 100 ميغابايت، وهي ميزة أساسية عند استنساخ محركات الأقراص بأكملها.

للتأكد من استقرار الملف sample_100m.img واكتمال كتابته بالحجم المطلوب بدقة، نستعرض بياناته عبر الأمر ls -lh sample_100m.img.

3. معالجة بنية البيانات وضمان النقل الآمن: توظيف خيار conv
لإتمام التدريبات البرمجية، نتأكد من التواجد في مجلد العمل بتنفيذ cd /tmp/dd_demo.

يتعدى دور dd مجرد النسخ المباشر؛ إذ يمكنه تحويل صيغ النصوص والمحتويات أثناء تدفقها. ننشئ ملفاً نصياً تجريبياً input.txt يحتوي على جملة باللغة الإنجليزية بحروف صغيرة عبر الأمر echo 'hello linux ubuntu dd command tutorial' > input.txt.

بتعيين المعامل conv=ucase، يقوم dd بتحويل الحروف اللاتينية الصغيرة تلقائياً إلى حروف كبيرة أثناء حفظها في الملف output_upper.txt. كما ندمج الخيار status=none لإخفاء الإحصائيات التلقائية والحصول على تنفيذ صامت دون تشويش.

للتأكد من نجاح عملية التحويل وصحة النص النهائي المكتوب بأحرف كبيرة كلياً، نستعرض محتوى الملف عبر الأمر cat output_upper.txt.

4. قياس سرعة الكتابة المباشرة على الأقراص: خيار oflag=direct ومسح المخلفات
للبدء في قياس معدل الإدخال والإخراج لوحدة التخزين، ننتقل إلى مجلد العمل عبر cd /tmp/dd_demo.

غالباً ما تتدخل الذاكرة المخبأة للنظام (Buffer Cache) فتعطي قراءات مضللة لسرعة التخزين الحقيقية. لتجاوز ذلك، نستعين بالمعامل oflag=direct لفرض كتابة البيانات مباشرة على وسيط التخزين الفيزيائي لإنشاء ملف بحجم 50 ميغابايت باسم bench_test.img. يتيح إرفاق هذا الخيار مع status=progress قياس معدل الكتابة الفعلي لوحدة التخزين دون أي تداخل من الذاكرة العشوائية.

بعد الانتهاء من كافة الاختبارات، نقوم بحذف مجلد التجارب المؤقت وجميع الملفات المنشأة لتوفير المساحة وتنظيف النظام عبر الأمر rm -rf /tmp/dd_demo.

تناول هذا الدليل استعراضاً عملياً لأبرز استخدامات أداة dd في نظام أوبونتو، شمل ذلك التحكم بأحجام الكتل، ومتابعة النقل اللحظي، وتحويل المحتوى، واختبار سرعة وحدات التخزين. وبالنظر إلى الطبيعة الحساسة لهذه الأداة وقدرتها على التعامل منخفض المستوى مع الأقراص، نؤكد دائماً على ضرورة التدقيق التام في مسار وسيط الخرج (of) قبل التنفيذ لتفادي الكتابة فوق أقراص أخرى بطريق الخطأ.