PlusMagi's Blog By Pitt Phunsanit Backend,computer science,Cybersecurity,Database,Hardware,Operating Systems คำสั่ง dd คืออะไร และหน้าที่หลัก

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


ไวยากรณ์ (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) ให้ใหญ่ที่สุดเท่าที่เหมาะสมกับอุปกรณ์นั้น ๆ เพื่อเพิ่มประสิทธิภาพในการอ่าน/เขียนข้อมูล และควรตรวจสอบชื่ออุปกรณ์ต้นทางและปลายทางอย่างรอบคอบก่อนกดรันคำสั่งเสมอ


Exit mobile version