Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีใช้คำสั่ง dd ใน Linux

dd เป็นคำสั่งสำคัญที่สุดใน Linux หนึ่ง มักใช้สำหรับ backup ฮาร์ดดิสก์และพาร์ติชัน หากใช้ถูกต้อง dd จะเป็นเครื่องมือทรงพลังสำหรับเขียนข้อมูลจากพาร์ติชันหนึ่งไปอีกพาร์ติชัน และทำงานต่างๆ กับไฟล์ นี่คือวิธีใช้ประโยชน์จากคำสั่ง dd

เรื่องราวของ dd

คำสั่งนี้พัฒนาที่ AT&T Bell Laboratories ในทศวรรษ 1970 โดยนักวิทยาการคอมพิวเตอร์ Ken Thompson พัฒนาสำหรับระบบ Unix-based และตั้งชื่ออ้างอิงจากคำสั่งใน IBM Job Control Language ที่ชื่อ "DD" สังเกตได้ว่าไวยากรณ์คำสั่งคล้ายคำสั่งใน Job Control Language มาก

เดิมทีออกแบบมาเป็น utility แปลง ASCII เป็น EBCDIC และกลับกัน รวมเข้ากับ Unix ครั้งแรกในปี 1974 พร้อมปล่อย Unix Edition ที่ 5

dd ถูกเล่นๆ เรียกว่า "disk destroyer" ในชุมชน Unix เนื่องจากความสามารถทำลายข้อมูลบนฮาร์ดดิสก์หากใช้ผิดวิธี

Operand พื้นฐาน

รู้พื้นหลังและความอันตรายแล้ว มาเรียนรู้การใช้ประโยชน์จาก dd สำหรับผู้ใช้ Linux distro ต่างๆ

ก่อนอื่น ดู manual ด้วยแฟล็ก --help:

dd --help

มี operand หลัก 2 ตัวที่ใช้บ่อยสุด คือ if และ of ย่อมาจาก "input file" และ "output file" ตามลำดับ if แทนตำแหน่งแหล่งที่มา (source) ส่วน of แทนตำแหน่งที่จะบันทึกข้อมูลจาก input location

dd if= of=

ตำแหน่งแหล่งที่มาและปลายทางทั่วไป ได้แก่ ฮาร์ดดิสก์, พาร์ติชัน, และ disk images

ก่อนใช้คำสั่ง อาจช่วยดูพาร์ติชันในระบบด้วย utility fdisk แฟล็ก -l:

sudo fdisk -l

กรณีนี้ if แทน "/dev/sda" และ of แทน "/dev/sdb" ที่จะบันทึกข้อมูลจาก "/dev/sda":

dd if=/dev/sda of=/dev/sdb

สร้าง Disk Image

หนึ่งใน use case ดีที่สุดของคำสั่งนี้คือ สร้าง disk images ในรูปแบบไฟล์ ".img" เหมาะสำหรับ backup ข้อมูลบนระบบ Linux และอาจเป็นวิธีเร็วที่สุดและง่ายที่สุดสำหรับ backup ฮาร์ดดิสก์ทั้งเครื่อง

ตรรกะเหมือนเดิม if แทน "/dev/sda" และ of แทนไฟล์ ".img" ที่จะบันทึกข้อมูลจากฮาร์ดดิสก์:

dd if=/dev/sda of=example.img

บันทึก Disk Image ไปยังพาร์ติชัน

สร้าง disk image ด้วย dd ง่าย แต่วิธีย้อนกลับ (restore) ก็ง่ายเท่ากัน

ในสถานการณ์นี้ ไฟล์ disk image ทำหน้าที่ input file และพาร์ติชันใหม่เป็น output file utility บันทึกข้อมูลจาก disk image ไปที่พาร์ติชัน "/dev/sdb":

dd if=example.img of=/dev/sdb

สร้าง Compressed Disk Image

หากสร้าง disk image ของฮาร์ดดิสก์ขนาดเต็ม ขนาดไฟล์สุดท้ายอาจใหญ่มาก dd มีฟีเจอร์สร้าง compressed disk images

สร้าง compressed disk image ด้วย pipe | command ใช้รับเนื้อหาจาก input file ทำ gzip พร้อมแฟล็ก -c บรรจุเป็นไฟล์ ".gz":

dd if=/dev/sda | gzip -c > image.gz

ระบุ Block Size

สามารถปรับความเร็วการทำงานของ dd ได้ด้วย operand bs (block size) แทนจำนวนไบต์ที่ dd คัดลอกไปยัง output file ในครั้งเดียว แทนด้วยจำนวนเท่าของ 1024 ไบต์ ค่าเริ่มต้น 512 ไบต์ ยิ่ง block size สูง ยิ่งข้อมูลบันทึกเร็วขึ้น

ตัวอย่าง ตั้ง block size เป็น 2048:

dd if=/dev/sda of=example.img bs=2048

ระบุ block size เป็น kilobytes ได้:

dd if=/dev/sda of=example.img bs=2048K

ล้างฮาร์ดดิสก์ (Wipe Hard Disk)

dd สามารถ wipe ฮาร์ดดิสก์ได้ โดยอาศัยศูนย์ (zeroes) หรือตัวอักษรสุ่มจาก "/dev/zero" หรือ "/dev/urandom" บันทึกลงฮาร์ดดิสก์/พาร์ติชัน ทับข้อมูลเดิม เหมาะเมื่อต้องการให้ข้อมูลไม่อาจดึงคืนได้ง่ายหลังขายหรือทิ้งฮาร์ดดิสก์

ทับด้วยศูนย์:

dd if=/dev/zero of=/dev/sdb

ทับด้วยตัวอักษรสุ่ม:

dd if=/dev/urandom of=/dev/sdb

สร้าง Bootable USB Drive

สร้าง USB bootable จากไฟล์ ".iso" ด้วย dd ง่าย:

dd if=os.iso of=

สรุป

dd ถือได้ว่าเป็น "Swiss Army knife" เพราะประโยชน์ในหลายด้าน ทั้งฮาร์ดดิสก์ พาร์ติชัน และ disk image files ตราบใดที่คุณไม่ทำลายฮาร์ดดิสก์ มันเป็นเครื่องมือมีประสิทธิภาพและใช้ง่าย สำหรับทุกอย่างตั้งแต่ wipe ฮาร์ดดิสก์/USB ไปจนถึงสร้าง compressed backups