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