การกู้ไฟล์ในระบบ UNIX และ LINUX

Linux

การกู้ไฟล์ในระบบ UNIX และ LINUX

เกือบ 9 ปีที่ผ่านมา

2 min read

บทความนี้มีต้นฉบับมาจากเว็บ linuxthailand.org ซึ่งตอนนี้เข้าไม่ได้ ผมเห็นว่าบทความนี้เป็นประโยชน์เลยขอนำมาอัพไว้ที่เว็บนี้ เผื่อท่านใดสนใจที่จะอ่านมัน ซึ่งหากทีมงานหรือเจ้าของบทความเห็นว่าไม่เหมาะสม ผมยินดีนำบทความนี้ออกให้ครับ

คำนำ

คุณเคยลบไฟล์ /etc/passwd หรือไม่ ? คุณเคยใช้คำสั่งนี้หรือไม่ # perl updateDB.pl > ./updateDB.pl ? คุณเคยใช้คำสั่ง rm จนเคยตัวทำให้ลบไฟล์ หรือ ไดเรกทรอรี่ใน Home ของตนเองหรือไม่ คาดว่าผู้ใช้หรือผู้ดูแลระบบ UNIX หรือ LINUX ไม่มากก็น้อยย่อมเจอปัญหานี้ คุณจะทำอย่างไรหละ ?? ถ้าในระบบ windows คุณคงจะไปคลิกที่ไอคอล recycle bin แล้วใช้คำสั่ง restore เพื่อเรียกไฟล์พวกนั้นกลับมา หรือ แม้ใช้โปรแกรม Norton Utility เพื่อกู้คืนไฟล์กับมา แล้วใน UNIX หรือ LINUX จะทำอย่างไรดี ?? ในของระบบโครงสร้างไฟล์ใน UNIX หรือ LINUX จะประกอบด้วย inode ที่เก็บข้อมูลต่างๆ เกี่ยวกับไฟล์ เข่น ตำแหน่งของข้อมูลในดิสก์, ข้อมูลความเป็นเจ้าของ ,สิทธิ ,ขนาดของไฟล์ เป็นต้น เมื่อมีการลบไฟล์ระบบจะไม่มีการลบค่าของ inode ทิ้งแต่จะสร้างสัญลักษณ์ให้เป็นช้อมูลที่ว่างเปล่าแทน ดังนั้นข้อมูลที่ลบไปยังคงอยู่ในระบบ ในบทความนี้จะกล่าวถึงวิธีการของการกู้ไฟล์ในระบบ UNIX และ LINUX

การกู้ข้อมูลในระบบ UNIX

ในระบบ UNIX หรือ LINUX จะใช้ระบบของ device file system ในการติดต่อใช้งานข้อมูลระหว่างระบบและ ดิสก์ [1] เข่น ใน /dev/hda ดังนั้นระบบไฟล์จะทำงานใน device ดังกล่าวจะสามารถมองเป็นรูปแบบของ text ไฟล์ได้ ซึ่งการค้นหาและกู้ไฟล์สามารถใช้คำสั่งที่เกียวกับการค้นหาข้อความได้ เช่น grep, seekcat เป็นต้น รูปแบบทั่วไปของคำสั่งที่ใช้ในการเรียกไฟล์ในระบบ UNIX มีดังนี้ grep -a -B[size before] -A[size after] 'text' /dev/[your_partition]

  • grep ต้องเป็นเวอร์ชั่นของ GNU
  • size before ขนาดของข้อมูลที่ต้องการตัดก่อนหน้าข้อความ ‘text’
  • size after ขนาดของข้อมูลที่ต้องการตัดหลังข้อความ ‘text’
  • your_partition ไฟล์ device ของดิสก์

ในบางครั้งโครงสร้างของไฟล์อาจจะไม่ต่อเนื่องกัน ส่งผลทำให้ข้อมูลที่ได้รับเข้ามาอาจจะไม่ถูกต้องตามความต้องการ ดังนั้นเมื่อได้รับผลมาควรใช้ script perl ในการตัดเอาส่วนที่ไม่ต้องการออก แต่อย่างไรก็ตามข้อมูลในส่วนของ CVS และ RCS ที่เป็นข้อมูลเกี่ยวกับไฟล์ที่ต้องการกู้ยังสามารถนำมาส่วนในการค้นหาได้

การกู้ข้อมูลในระบบ LINUX

ระบบ LINUX จะมีโปรแกรมช่วยในการดีบัก device file system ที่เรียกว่า debugfs ในโปรแกรมจะมีคำสั่ง lsdel เพื่อเรียกดูไฟล์ต่างๆ ที่ถูกลบออกจากระบบ เช่น

# debugfs /dev/hda6
 
debugfs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
debugfs: lsdel
1844 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
749300 1000 100664 27018 2/ 7 Tue May 9 19:08:17 2000
749301 1000 100444 1671 1/ 1 Tue May 9 19:08:17 2000
...... .... ...... .... .. ..........................
944887 1037 100600 597 1/ 1 Sat May 26 18:00:00 2001
717281 1000 100400 1 1/ 1 Sat May 26 18:08:13 2001
32605 1000 100644 15 1/ 1 Sat May 26 18:09:06 2001

จากตัวอย่างโปรแกรมจะแสดงค่าต่างๆ ของ inode หากต้องการนำ output แสดงลงไฟล์ทำได้โดยใช้คำสั่ง

# echo lsdel | debugfs /dev/hda6 > /tmp/lsdel-output

ใช้คำสั่ง dump -p เพื่อนำกู้ข้อมูลตามหมายเลข inode เช่น

debugfs: dump -p <32605> /tmp/recovered_file

ดังนั้นในการใช้งานโปรแกรม debugfs เพื่อกู้ไฟล์คืน นั้นจำเป็นต้องมีข้อมูลของไฟล์ดังนี้

  • เจ้าของไฟล์เป็นของใคร
  • เมื่อไรที่ไฟล์ถูกลบ
  • ค่าประมาณของขนาดของไฟล์ หากไฟล์ที่ต้องการค้นหามีจำนวนมากแล้วผู้ใช้ต้องทำการเขียน script เพื่อช่วยค้นหา และ กู้ไฟล์ที่ต้องการ Recover [3] เป็นโปรแกรมแบบ shell script ที่ช่วยในการค้นหาและกู้ไฟล์ ในระบบ LINUX ให้ง่ายในการใช้งาน โปรแกรมจะอาศัยหลักการทำงานของ โปรแกรม debugfs ผ่านคำถามที่เป็นลำดับขั้นเพื่อการค้นหา ไฟล์ที่ผู้ใช้ต้องการ ซึ่งคำถามคร่าวๆ มีดังนี้
  • ชื่อของ Device ของดิสก์
  • วัน/เดือน/ปี โดยอาจจะบอกเป็นช่วงได้
  • ขนาดสูงสุด และต่ำสุดของไฟล์
  • ไอดีของผู้ใช้ (User ID)
  • ตัวอักษรที่อยู่ในไฟล์ โปรแกรมจะทำการสรุป ค่าของ inode และรายละเอียดของไฟล์ที่ต้องการกู้และข้อมูลที่กู้มาได้

สรุป

เอกสารนี้เป็นจะกล่าวถึงการกู้ไฟล์ในระบบ UNIX และ LINUX รวมทั้งการแนะนำโปรแกรม recover ที่ช่วยในการกู้ไฟล์ในระบบ LINUX ซึ่งในเอกสารนี้จะเป็นแนวทางแก้ผู้ดูแลระบบในการพัฒนาคำสั่ง หรือ script ย่อยเพื่อช่วยในการสร้าง โปรแกรมในการอำนวยความสะดวกของการกู้ไฟล์ที่สำคัญที่ถูกลบไปได้

Tags:

linuxthailand