ป้ายกำกับ: Unix

Unix (ยูนิกซ์)
คือระบบปฏิบัติการคอมพิวเตอร์แบบหลายผู้ใช้ (multi-user) และทำงานหลายอย่างพร้อมกัน (multi-tasking) ที่มีชื่อเสียงด้านความเสถียร ความยืดหยุ่น และการเป็น Open System ที่สามารถทำงานบนฮาร์ดแวร์ได้หลากหลาย. พัฒนาขึ้นที่ Bell Labs โดยนักพัฒนารวมถึง Ken Thompson และ Dennis Ritchie ในช่วงทศวรรษ 1970 และมีอิทธิพลอย่างมากต่อระบบปฏิบัติการอื่นๆ เช่น Linux และ macOS

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