ซ่อมไฟล์เสียที่เกิดจาก bad sector ด้วยคำสั่ง dd

วันก่อนผมเพิ่งเจอเคสเกี่ยวกับไฟล์ Database ของ Mysql ที่เป็น innodb พอดีไม่ได้ทำ innodb per table ไฟล์มันก็รวมอยู่ขนาดใหญ่มากประมาณ 3 G กว่าๆ ได้

เรื่องมีอยู่ว่า ไฟล์ดังกล่าวมันมี bad sector ของ hdd ทำให้เวลาอ่านไฟล์ไปเจอจุดที่มัน bad มันก็จะขึ้น i/o Error ประมาณว่าไฟล์ก็ยังใช้ได้ปกตินั้นแหละ แต่ถ้าจะ coppy ทั้งไฟล์ หรือ Backup ด้วย Tar มันจะ Error ทุกครั้งเมื่ออ่านไปเจอจุดที่มันเสีย

ตอนแรกผมจะแก้ปัญหาด้วยการ dump database แต่ว่าถ้าเจอจุดที่มันเสีย mysql ผมมันก็จะ Down ในทันที ไฟล์นี้สำคัญมากเสียด้วยสิลูกค้าเองก็ไม่ได้ Backup

จึงค้นข้อมูลไปเรื่อยๆ ไปเจอมาคือการ coppy โดยไม่สนใจ Error ด้วยคำสั่ง dd ปกติคำสั่ง dd มักใช้กับเรื่อง Coppy HDD เช่น image disk เป็นต้น แต่เราจะมาทำการ Coppy ไฟล์ที่มีปัญหาโดยให้มองข้าม error

คำสั่ง
[COLOR=#2C2C29][FONT=Tahoma]dd if=ชื่อไฟล์ที่เสีย of=ชื่อไฟล์ใหม่ conv=noerror,sync

เพียงเท่านี้ไฟล์ใหม่ของเราก็จะเหมือนกับต้นฉบับแตกต่างกันที่ไฟล์ใหม่สามารถ coppy ได้ปกติครับ

หากใช้ในการ coppy ไฟล์ Database อย่าลืม Stop Database ก่อนนะครับ

ปล. ถึงแม้ไฟล์จะได้มาแต่บริเวณที่ Error ก็ยังเหมือนเดิม ต้องยอมรับว่าข้อมูลตรงส่วนนั้นต้องหายไปแน่นอนไม่สามารถกู้ได้ครับ[/FONT][/COLOR]

อีกตัวเลือกนึง ลองใช้ ddrescue ดูครับ มันออกแบบมาสำหรับอะไรแบบนี้โดยเฉพาะ