Login | thai-learning | Privacy Policy | About Us |

Thai Learning | ทฤษฎี IS ขั้นสูง | เว็บไทย | สารสนเทศวิทยานิพนธ์ | หนังสือรามคำแหงทั้งหมด | เกี่ยวกับผู้จัดทำ | บทกลอน |
วิชาที่เรียน 1/2555
   เมนูหลักวิชาเรียน 1/2555
   การโปรแกรมเว็บสารสนเทศ ฯ
   การโปรแกรมงานภูมิศาสตร์ ฯ
   โปรแกรมสำหรับงานสารสนเทศ
   อินเตอร์เน็ตและการบริการ สารสนเทศบนเว็บ
   บรรยากาศ เทอม 1-2555
โปรแกรมที่ผมพัฒนาครับ
   เมนูหลักโปรแกรมที่ผมพัฒนา
   ถอดรหัสผ่าน M$-Access
   ระบบการเข้าเรียนและให้คะแนน
   การทำงานของ Adder Logic
   ปรับระดับเสียงโวลุ่ม ด้วย CLI
   เกมส์เลื่อนภาพแสนสนุก vb6
บทความที่ผมเขียนครับ
   เมนูบทความ
   ภาษาซีสำหรับผู้เริ่มต้น
   ไมโครคอนโทรเลอร์เบื้องต้น
   ไมโครคอนโทรลเลอร์จำลอง
   การกำเนิดกระแสไฟฟ้าอย่างง่าย
   ควบคุมแรงดัน 0-220 โวลท์
   Graphics LCD ด้วย CCSC
   การออกแบบ PCB ด้วย Orcad
   การออกแบบ PCB ด้วย Protel
   ไพธอนส่งเมล์ด้วย GPRS
   ไพธอนควบคุม LCD ผ่าน LPT
   ควบคุม LPT ด้วย Labview
   อิมเมจโปรเซสซิ่ง ตอน 1/3
   อิมเมจโปรเซสซิ่ง ตอน 2/3
   อิมเมจโปรเซสซิ่ง ตอน 3/3
   ภาษาซีบนลินุกซ์สมองกลฝังตัว
   การใช้งาน MinGW เบื้องต้น
   ภาษาซี ARM-LPC2368
   ออกแบบ FPGA ด้วย Schematic
   ออกแบบ FPGA ด้วยภาษา VHDL
   ออกแบบ PCB เทคนิค Dryfilm
   เขียนโปรแกรม Python GUI
   การติดตั้ง NumPy 1.6.1
   เขียนไพธอนถอดรหัส MDB
   วิชวลเบสิค ควบคุมกล้อง
   สังเคราะห์ภาพกราฟิก pov-ray
   อิมพอร์ท MySQL ด้วย BigDump
   ติดตั้ง postgresql และ phppgadmin บน centos linux
   การใช้งานเธรดด้วยภาษา PHP
   การสังเคราะห์สีให้ไวยากรณ์ภาษา
   การสร้าง Search Engine
   เขียนไพธอน Client/Server
   การสร้างพาทิชั่นที่ใหญ่กว่า 3TB บนลินุกซ์ (Ubuntu)
   การรันสคริปต์ CGI ด้วยภาษาไพธอน
   การใช้งานคำสั่ง DD บน Ubuntu - Linux
   การใช้งาน Raspberry Pi
   การเอ็กซีคิวส์ + การจัดเรียงแอพฯในลินุกซ์
   X11 ด้วย Xming และ Putty
   TITAN5 บน Ubuntu - Linux
   รหัสจังหวัดทั่วโลก + เรดาร์
   การควบคุมเว็บบราวเซอร์ผ่าน SELENIUM ด้วยภาษาไพธอน
โปรแกรมภาษา
   เมนู VB-Classic
   ฟังก์ชั่น Visual Basic
   คำสั่ง Visual Basic
   ตัวแปรภาษาไพธอน (ขั้นสูง)
   โมดูลต่าง ๆ ภายในภาษาไพธอน
ข่าวสารไอที
   กูเกิ้ลเปิดตัว Tablet 7 นิ้ว
   อินเดีย IIT เปิดตัว Tablet
   RaspBerry PI สมองกลฝังตัว
   คอมพิวเตอร์จิ๋ว
บริการสารสนเทศ
   ไทยเว็บ 2012
   เว็บไทย
   ฐานข้อมูล วิทยานิพนธ์
   รวมคำศัพท์ภาษาไทย
   เคยฟังมั้ย - เพลงมาร์ช มมส
   ประวัติศาสตร์ชาติไทย หลวงปู่ฤาษีลิงดำ
   เพลงน้อมใจปล่อยวาง 1
   เพลงน้อมใจปล่อยวาง 2
   เพลงน้อมใจปล่อยวาง 3
เกี่ยวกับเรา
   เกี่ยวกับผู้ก่อตั้ง
   บทกลอนที่ผมแต่งครับ..
   แลกลิงค์กับเรา ที่นี่
   รายละเอียดแม่ข่าย
   ดาต้าเซนเตอร์ (Data Center)
   เงื่อนไขการใช้งาน

  
 
การใช้งานคำสั่ง DD บน Ubuntu - Linux
เขียนโดย อ.จักรกฤษณ์ แสงแก้ว สาขาสารสนเทศศาสตร์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยมหาสารคาม
เขียน 18:43 น. วันที่ 27 ธันวาคม 2555

บทนำ
คำสั่ง DD เป็นคำสั่งที่ทำงานในระดับ Low Level ที่มีประสิทธิภาพสูงมาก ในการคัดลอกไฟล์ พัฒนาโดยคุณ Paul Rubin, David MacKenzie และ Stuart Kemp เป็นคำสั่งที่มาพร้อมกับระบบปฏิบัติการยูนิกส์และลินุกซ์ ย่อจากคำว่า "Data Description"

วัตถุประสงค์
- อธิบายการใช้คำสั่ง DD เพื่อจัดการสำรองข้อมูลภายใน Partition ของ Harddisk ได้
- อธิบายการใช้คำสั่ง DD เพื่อสำรองข้อมูลภายใน Partition ของ USB Flash Drive ได้
- สามารถสร้าง ISO Image (การสำรองมาตรฐาน ISO) จากข้อมูลภายใน Harddisk ได้
- สามารถตรวจสอบสถานะปัจจุบันของการคัดลอกข้อมูลด้วยคำสั่ง watch ได้

รูปแบบการใช้งานของคำสั่ง DD
dd if=[INPUT] io=[OUTPUT] bs=[BYTE_SIZE] conv=[CONVERSION_TYPE]

เมื่อ
- if คือ input file
- of คือ output file
- bs คือ ขนาดของไบต์ สามารถกำหนดเป็น 1MB หากท่านให้ขนาดการัดลอก 1 ล้านตัวอักษรต่อการคัดลอก
- conv คือ ประเภทของการแปลง

ท่านสามารถใช้ไฟล์พื้นฐาน 3 แบบ คือ null, zero และ urandom ได้ดังนี้
/dev/null – เป็นการทำลายข้อมูล คล้ายหลุมดำ ข้อมูลสามารถไปอยู่ที่นั่นได้แต่ไม่มีอะไรเป็น output ออกมาเลย ใช้ในกรณีต้องการลบ standard output เพื่อไม่แสดงผลข้อความเตือนต่าง ๆ เป็นต้น ตัวอย่าง ถ้าใช้ /dev/null เป็น input ของไฟล์ ใด ๆ จะทำให้ไฟล์นั้นว่างเปล่าทันที

/dev/urandom และ /dev/random – เป็นการใช้ร่วมกับหมายเลขของ random number ที่สร้างและใช้ในไฟล์

/dev/zero – เป็นการไม่ดำเนินการใด ๆ แต่มีค่าเป็นศูนย์

ประเภทการใช้งานคำสั่ง dd

การเคลียส์ฮาร์ดดีสก์

dd if=/dev/zero of=/dev/sdb bs=1M

คำอธิบาย : การใช้คำสั่ง dd เพื่อแทนข้อมูลที่อยู่ในพาทิชั่น /dev/sdb ด้วยเลข 0 ขนาด 1MB ถ้าท่านต้องการขายฮาร์ดิส์เพื่อไม่ให้เห็นข้อมูลในอดีตสามารถใช้คำสั่งนี้ได้

การเคลียส์ฮาร์ดดีสก์แบบสุ่มเดาเพื่อความปลอดภัย

dd if=/dev/urandom of=/dev/sda bs=1M

คำอธิบาย : เหมือนตัวอย่างด้านบนแต่แทนข้อมูลทั้งหมดในฮาร์ดดีสก์ด้วยข้อมูลสุ่มจาก /dev/random ลบพาทิชั่นเดียวโดยการต่อพาทิชั่นด้วยอุปกรณ์อื่น

dd if=/dev/urandom of=/dev/sda2 bs=1M

คำอธิบาย : ใช้ในกรณีที่ท่านไม่ต้องการให้ใช้ Master Boot Record (MBR) เดิมได้ เพราะเขียนทับด้วยค่าสุ่ม

การลบ Master Boot Record (MBR)

dd if=/dev/zero of=/dev/sda bs=446 count=1

คำอธิบาย : ลบไบต์แรกจำนวน 443 bytes ของไดรว์ /dev/sda ซึ่งเป็นขนาดและตำแหน่งของ master boot record

การสร้างอิมเมจของ CD .iso จากพาทิชั่น

dd if=/dev/sdb1 of=/home/user/my-partition.iso bs=2048 conv=notrunc

คำอธิบาย : เซกเตอร์ของ CD sectors มีความยาว 2048 bytes ดังนั้นวิธีการนี้เป็นการคัดลอกเซกเตอร์/เซกเตอร์ของพาทิชั่น และท่านต้องใช้ โปรแกรม Brasero เพื่อเขียน ISO Image ลงในแผ่น CD

การกู้คืนไฟล์จาก ISO มาไปยังพาทิชั่น

dd if=/home/user/my-partition.iso of=/dev/sdb2 bs=2048 conv=notrunc

การคัดลอกข้อมูลใน RAM ไปยังไฟล์

dd if=/dev/mem of=/root/memory-dump.bin bs=1024

การทำให้ไฟล์ 1024 ไบต์แบบสุ่ม

dd if=/dev/urandom of=/home/user/random-bytes.bin bs=1 count=1024

การโคลนนิ่งพาทิชั่น

dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror

การบันทึกข้ัอมูลจากพาทิชั่นไปยังไฟล์

dd if=/dev/sdb1 of=/home/user/my-partition.img bs=4096 conv=notrunc,noerror

การกู้คืนพาทิชั่น จากไฟล์ที่สำรองไว้

dd if=/home/user/partition.img of=/dev/sdb1 bs=4096 conv=notrunc,noerror

การสร้าง ISO image สำหรับแผ่น CD

dd if=/dev/cdrom of=/home/user/my-music-CD.iso bs=2048 conv=sync

คำอธิบาย : นอกจากนั้นท่านสามารถใช้ dd สำหรับไฟล์ที่เป็นอุปกรณ์ชนิดอื่น ๆ ได้ด้วย เช่น /proc ซึ่งเป็น real-time interface ระหว่าง system kernel(ส่วนของระบบปฏิบัติการที่ติดต่อกับฮาร์ดแวร์)

การตรวจดูข้อมูลภายใน virtual memory

dd if=/proc/kcore | hexdump -C | less

คำอธิบาย : เป็นการใช้ if (input file) ที่ชื่อว่า /proc/kcore และแสดงผลลัพธ์เลขฐาน 16

การตรวจดูรายการ interrupt table

dd if=/proc/interrupts | hexdump -C | less

คำอธิบาย : เป็นการแสดงไฟล์อินเตอร์รัป และส่งต่อข้อมูลให้คำสั่ง hexdump และส่งต่อข้อมูลให้คำสั่ง less

การแปลงข้อมูลในไฟล์เป็นตัวพิมพ์ใหญ่ทั้งหมด

dd if=/home/user/data-lower.txt of=/home/user/data-uppper.txt conv=ucase

การตรวจสอบสถานะปัจจุบันของการคัดลอกข้อมูลของโปรแกรม DD ด้วยคำสั่ง watch
เนื่องจากการคัดลอกด้วยคำสั่ง dd จะไม่แสดงสถานะในขณะที่กำลังคัดลอก จนกว่าโปรแกรมจะดำเนินงานจนแล้วเสร็จ ดังนั้น ท่านสามารถใช้เทคนิคเพื่อกระตุ้นให้โปรแกรม dd แสดงปริมาณการคัดลอกข้อมูลได้ ด้วยขั้นตอน ดังนี้
1. เปิด Terminal ขึ้นมาใหม่ เพื่อตรวจสอบหมายเลข Process ID ของ คำสั่ง dd ที่กำลังทำงานด้วยคำสั่ง ps ดังนี้
$ ps -e | grep 'dd'
เมื่อคำสั่ง ps สำหรับตรวจสอบหมายเลข process ที่กำลังทำงานในปัจจุบัน
เมื่อคำสั่ง grep คือ คำสั่งที่ตรวจจับรูปแบบอักษร ในตัวอย่างนี้ให้จับหาบรรทัดที่มีคำว่า 'dd' (ปกติคำสั่ง ps มีผลลัพธ์หลายบรรทัด แต่เราใช้ grep เพื่อกรองเอาเฉพาะบรรทัดที่มีคำว่า 'dd' ออกมาเท่านั้น เพื่อตรวจสอบดูหมายเลข Process ID)

2. เรียกใช้คำสั่ง watch เพื่อกระตุ้นให้โปรแกรม dd แสดงสถานะปัจจุบันการคัดลอกข้อมูล ดังนี้
$ sudo watch -n 20 kill -USR1 [PROCESSID]
เมื่อเลข 20 คือ จำนวนวินาที ที่ส่งสัญญาณไปกระตุ้นคำสั่ง dd ซึ่งกำหนดจากหมายเลข Process ID

3. ที่หน้า Terminal ที่ท่านใช้คำสั่ง dd จะแสดงสถานะปริมาณการคัดลอกให้ท่านเห็น

การสร้าง Image และเพิ่มลบไฟล์/ไดเร็คทอรี่ภายใน Image
ขั้นที่ 1 : สร้าง Image ไฟล์เปล่า
$ dd if=/dev/zero of=test.img bs=1M count=2

ขั้น 2 : กำหนด Image เป็น DOS File System
$ mkdosfs test.img

ขั้น 3 : แสดงรายชื่อไฟล์ใน Image
$ mdir -i test.img
เมื่อ -i คือ image file

ขั้น 4 : คัดลอกไฟล์ใส่ลงไปใน Image
$ mcopy -i test.img filename.zip ::/newfilename.zip
ปล.ตัวอย่างนี้ใช้ไฟล์ชื่อ filename.zip

ขั้น 5 : สร้างไดเร็คทอรี่ใน Image
$ mmd -i test.img newdir

ขั้น 6 : คัดลอกไฟล์จาก Image มายังเครื่องคอมพิวเตอร์
$ mcopy -i test.img ::/filename.zip filename.zip

สรุป
ในบทความนี้ ท่านได้เห็นถึงความสามารถของคำสั่ง dd และหวังว่าจะช่วยให้ท่านได้แนวความคิดสำหรับสคริตป์ภาษาต่าง ๆ โดยเฉพาะ Bash Script เพื่อติดต่อ IO และส่งต่อข้อมูลยังคำสั่งอื่น ๆ เพื่อประมวลผลตามที่ท่านต้องการได้อย่างมีประสิทธิภาพ พบกันใหม่โอกาสหน้า สำหรับวันนี้.. สวัสดีครับ..

20.19 น. วันที่ 27 ธันวาคม 2555





All trademarks and trade names are the property of their respective owners and used here for identification purposes only.
Privacy Policy | Terms of service | Report a Policy Violation (0.0052 sec)