dd


1. คำสั่ง dd คืออะไร และหน้าที่หลัก

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) โดยผู้ใช้ต้องระบุขนาดบล็อกของข้อมูลที่จะคัดลอกอย่างชัดเจน


2. ไวยากรณ์ (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): แสดงความคืบหน้าของการทำงานของคำสั่ง ทำให้ผู้ใช้ทราบว่าการคัดลอกดำเนินไปถึงส่วนใดแล้ว

  • 3. ตัวอย่างการใช้งานจริง (Code Examples & Use Cases)

    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
    

    4. ข้อควรระวังและ Best Practices

    • สิทธิ์ (Permissions): การเข้าถึงอุปกรณ์ดิสก์ (`/dev/*`) ต้องใช้สิทธิ์ root หรือ sudo เสมอ เพราะเป็นการจัดการข้อมูลระดับระบบ
    • ความเสี่ยงสูงสุด (Danger Zone): ห้ามระบุปลายทาง (Output File) เป็นอุปกรณ์ดิสก์ที่ผิดพลาดเด็ดขาด เช่น การรัน dd if=/dev/zero of=/dev/sda จะทำให้ข้อมูลทั้งหมดในดิสก์หายไปทันที
    • การทดสอบ (Testing): ก่อนใช้งานจริง ควรทำการทดลองกับอุปกรณ์หรือไฟล์ที่ไม่สำคัญก่อนเสมอ เพื่อป้องกันความเสียหายของระบบ
    • Best Practice: เมื่อใช้ dd ในงาน SysAdmin ควรระบุค่า bs (Block Size) ให้ใหญ่ที่สุดเท่าที่เหมาะสมกับอุปกรณ์นั้นๆ เพื่อเพิ่มประสิทธิภาพในการอ่าน/เขียนข้อมูล และควรตรวจสอบชื่ออุปกรณ์ต้นทางและปลายทางอย่างรอบคอบก่อนกดรันคำสั่งเสมอ