dd ย่อมาจาก “disk dump” เป็นคำสั่งพื้นฐานและทรงพลังในระบบปฏิบัติการ Unix/Linux ที่ใช้สำหรับการคัดลอกข้อมูลระดับบล็อก (Block-level) หรือไบต์ต่อไบต์ (Byte-by-byte) โดยไม่สนใจโครงสร้างของระบบไฟล์ (File System Structure) ต่าง ๆ
หน้าที่หลักของ dd คือการทำหน้าที่เป็นเครื่องมือในการถ่ายโอนข้อมูลดิบ (Raw Data Transfer) ซึ่งแตกต่างจากการคัดลอกไฟล์ทั่วไปด้วยคำสั่ง cp เพราะ dd จะอ่านและเขียนข้อมูลตามขนาดบล็อกที่กำหนดอย่างแม่นยำ ทำให้เหมาะสำหรับการสร้างอิมเมจของอุปกรณ์จัดเก็บข้อมูลทั้งหมด เช่น การสำรองระบบปฏิบัติการทั้งดิสก์ (Disk Imaging) หรือการดึงพาร์ติชันออกมาใช้งาน
หลักการทำงาน
dd จะรับอินพุตจากแหล่งที่มา (Input File/Source Device) และเขียนออกไปยังปลายทาง (Output File/Destination Device) โดยผู้ใช้ต้องระบุขนาดบล็อกของข้อมูลที่จะคัดลอกอย่างชัดเจน
ไวยากรณ์ (Syntax) และพารามิเตอร์สำคัญ
dd [OPTION]... [FILE]...
- -o (output)
ระบุไฟล์หรืออุปกรณ์ปลายทางที่จะเขียนข้อมูลออกไป (Output File). หากไม่ระบุ ข้อมูลจะถูกส่งไปยัง Standard Output (stdout). - -i (input)
ระบุไฟล์หรืออุปกรณ์ต้นทางที่ต้องการอ่านข้อมูลเข้ามา (Input File). - -b (bs – block size)
กำหนดขนาดบล็อกของข้อมูลที่จะคัดลอก (Block Size) เป็นไบต์ การกำหนดค่านี้มีความสำคัญอย่างยิ่งต่อประสิทธิภาพและความแม่นยำในการสำรองข้อมูล - -c (count)
กำหนดจำนวนบล็อกที่ต้องการคัดลอก (Count) โดยใช้ร่วมกับbsเพื่อระบุปริมาณข้อมูลทั้งหมด - -v (verbose)
แสดงความคืบหน้าของการทำงานของคำสั่ง ทำให้ผู้ใช้ทราบว่าการคัดลอกดำเนินไปถึงส่วนใดแล้ว
dd ถูกใช้ในสถานการณ์ที่ต้องการความแม่นยำระดับไบต์ เช่น การสร้างอิมเมจของดิสก์ทั้งหมด, การกู้คืนข้อมูล, หรือการแปลงรูปแบบพาร์ติชัน
Use Case 1: การสำรองระบบปฏิบัติการทั้งดิสก์ (Disk Imaging)
สมมติว่าต้องการสร้างอิมเมจของอุปกรณ์ `/dev/sda` ทั้งหมดเพื่อเก็บไว้ในไฟล์ชื่อ disk_image.img
sudo dd if=/dev/sda of=./disk_image.img bs=4M status=progress
Use Case 2: การคัดลอกพาร์ติชันเฉพาะ (Partition Copy)
หากต้องการสำรองข้อมูลของพาร์ติชันแรก (`/dev/sda1`) ไปยังไฟล์อิมเมจ
sudo dd if=/dev/sda1 of=./partition_sda1.img bs=4M
ข้อควรระวัง
- สิทธิ์ (Permissions)
การเข้าถึงอุปกรณ์ดิสก์ (`/dev/*`) ต้องใช้สิทธิ์ root หรือ sudo เสมอ เพราะเป็นการจัดการข้อมูลระดับระบบ - ความเสี่ยงสูงสุด (Danger Zone)
ห้ามระบุปลายทาง (Output File) เป็นอุปกรณ์ดิสก์ที่ผิดพลาดเด็ดขาด เช่น การรันdd if=/dev/zero of=/dev/sda
จะทำให้ข้อมูลทั้งหมดในดิสก์หายไปทันที - การทดสอบ (Testing)
ก่อนใช้งานจริง ควรทำการทดลองกับอุปกรณ์หรือไฟล์ที่ไม่สำคัญก่อนเสมอ เพื่อป้องกันความเสียหายของระบบ
Best Practice
เมื่อใช้ dd ในงาน SysAdmin ควรระบุค่า bs (Block Size) ให้ใหญ่ที่สุดเท่าที่เหมาะสมกับอุปกรณ์นั้น ๆ เพื่อเพิ่มประสิทธิภาพในการอ่าน/เขียนข้อมูล และควรตรวจสอบชื่ออุปกรณ์ต้นทางและปลายทางอย่างรอบคอบก่อนกดรันคำสั่งเสมอ