หากคุณใช้ระบบไฟล์ ext3 ให้ลองติดตามHOWTO ของ Carlo Wood
ในไม่กี่คำ
- ใช้ ext3grep $ IMAGE --ls --inode 2 | grep your_file เพื่อค้นหาไฟล์ที่คุณกำลังมองหา (โดยที่ $ IMAGE คือพาร์ติชันของคุณเช่น / dev / sda2)
- ค้นหาบล็อกระบบไฟล์ที่มีเจอร์นัลของพื้นที่ที่ไม่ได้ถูกจัดสรร
- ค้นหาบล็อกอ้างอิงวารสารทั้งหมดที่พบก่อนหน้านี้
- คัดลอกบล็อกด้วย dd
- แก้ไขไฟล์เพื่อลบเลขศูนย์ต่อท้าย
- แมวไฟล์ทุกที่ที่คุณต้องการ
จากแหล่งที่มา:
"บทที่ตัวอย่างการกู้คืนด้วยตนเอง
ในตัวอย่างต่อไปนี้เราจะกู้คืนไฟล์ขนาดเล็กด้วยตนเอง เอาต์พุตบางส่วนเท่านั้นที่ได้รับเพื่อประหยัดพื้นที่และเพื่อให้ตัวอย่างอ่านง่ายขึ้น
ใช้ ext3grep $ IMAGE --ls - inode เราค้นหาชื่อของไฟล์ที่เราต้องการกู้คืน:
$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 พฤ 7 ก.พ. 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $' | head -n 1 34 35 d 309540 D 1202352104 พฤ 7 ก.พ. 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 พฤ 7 ก.พ. 03:24:53 2008 rrwxr-xr-x start_azureus
เห็นได้ชัดว่า inode 309631 ถูกลบและเราไม่มีหมายเลขบล็อกสำหรับไฟล์นี้:
$ ext3grep $ IMAGE --print - inode 309631 [... ] Inode ไม่ได้ถูกจัดสรรกลุ่ม: 19 รหัสการสร้าง: 2771183319 uid / gid: โหมด 1000/1000: rrwxr-xr-x ขนาด: 0 จำนวนลิงค์: 0 0 (-> 0 บล็อกทางอ้อม)
เวลาของ Inode: เข้าถึงแล้ว: 1202350961 = พฤ. 7 ก.พ. 2222:41 2008 แก้ไขไฟล์: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008 ปรับเปลี่ยน Inode: 1202351093 = พฤ 7 กพ. 03:24:53 2008 เวลาลบ: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008
บล็อกโดยตรง:
ดังนั้นเราจะพยายามค้นหาสำเนาที่เก่ากว่าในสมุดรายวัน ก่อนอื่นเราจะพบบล็อกระบบไฟล์ที่มี inode นี้:
$ ext3grep $ IMAGE - inode-to-block 309631 | grep อยู่ Inode 309631 อยู่ในบล็อก 622598 ที่ offset 0xf00
จากนั้นเราจะพบกับตัวอธิบายวารสารทั้งหมดที่อ้างอิงบล็อก 622598:
$ ext3grep $ IMAGE --journal --block 622598 [... ] ตัวอธิบายวารสารอ้างอิงบล็อก 622598: 4381294 26582 4381338 438134 4 438134 28384 4381348 30676 4381348 30676 4381348 30676 4381348 4382137 6672 4382138 7536 4382139 7984 4382140 8931
ซึ่งหมายความว่าธุรกรรมที่มีหมายเลขลำดับ 4381294 มีสำเนาของบล็อก 622598 ในบล็อก 26582 และอื่น ๆ หมายเลขลำดับที่ใหญ่ที่สุดที่ด้านล่างควรเป็นข้อมูลล่าสุดที่เขียนลงดิสก์ดังนั้นบล็อก 8931 ควรเหมือนกับบล็อกปัจจุบัน 622598 เพื่อค้นหาสำเนาที่ไม่ถูกลบล่าสุดควรเริ่มที่ด้านล่างและทำงาน สูงกว่า
หากคุณพยายามพิมพ์บล็อกดังกล่าว ext3grep จะรับรู้ว่าเป็นบล็อกจากตาราง inode และจะพิมพ์เนื้อหาของ inodes ทั้ง 32 ตัวที่อยู่ในนั้น เราต้องการเห็น inode 309631 เท่านั้น ดังนั้นเราจึงใช้ grep สมาร์ท:
$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- รหัสการสร้าง: 2771183319 uid / gid: โหมด 1000/1000: ขนาด rrwxr-xr-x: 0 จำนวนลิงก์: 0 ภาค: 0 (-> 0 บล็อกทางอ้อม)
เวลาของ Inode: เข้าถึงแล้ว: 1202350961 = พฤ. 7 ก.พ. 2222:41 2008 แก้ไขไฟล์: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008 ปรับเปลี่ยน Inode: 1202351093 = พฤ 7 กพ. 03:24:53 2008 เวลาลบ: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008
บล็อกโดยตรง:
นี่เป็นสิ่งเดียวกับที่เราเห็นในบล็อก 622598 ถัดไปเราจะดูหมายเลขลำดับที่น้อยกว่าจนกว่าเราจะพบหมายเลขที่มีเวลา 0 ลบ คนแรกที่เราพบ (ล่างขึ้นบน) คือบล็อก 6073:
$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- รหัสการสร้าง: 2771183319 uid / gid: โหมด 1000/1000: ขนาด rrwxr-xr-x: 40 ลิงก์จำนวน: 1 ภาค: 8 (-> 0 บล็อกทางอ้อม)
เวลาอินode: เข้าถึง: 1202350961 = พฤ 7 ก.พ. 03:22:41 2008 แก้ไขไฟล์: 1189688692 = พฤ 13 ก.ย. 15:04:52 2550 เวลาแก้ไข: 1189688692 = พฤ 13 ก.ย. 15:04:52 2550 เวลาลบ: 0
บล็อกโดยตรง: 645627
ด้านบนเป็นไปโดยอัตโนมัติและสามารถทำได้เร็วกว่ามากด้วยตัวเลือกบรรทัดคำสั่ง --show-journal-inodes ตัวเลือกนี้จะค้นหาบล็อกที่มี inode อยู่จากนั้นค้นหาสำเนาทั้งหมดของบล็อกนั้นในเจอร์นัลแล้วพิมพ์เฉพาะ inode ที่ร้องขอจากแต่ละบล็อกเหล่านี้ (แต่ละอันมี 32 inodes ดังที่คุณทราบ) กำจัดการซ้ำซ้อน :
$ ext3grep $ IMAGE --show-journal-inodes 309631 จำนวนกลุ่ม: 75 บล็อกวารสารขั้นต่ำ / สูงสุด: 1115/35026 กำลังโหลด journal descriptors ... เสร็จสิ้นการทำรายการบันทึกรายวัน 4381435 รายการข้อมูลบางส่วนอาจสูญหายไปจากธุรกรรมนี้ จำนวนตัวอธิบายในวารสาร: 30258; หมายเลขลำดับต่ำสุด / สูงสุด: 4379495/4382264 สำเนาของ inode 309631 ที่พบในวารสาร:
-------------- Inode 309631 ----------------------- Id Generation: 2771183319 uid / gid: 1000 / 1,000 โหมด: ขนาด rrwxr-xr-x: 0 จำนวนลิงก์: 0 ส่วน: 0 (-> 0 บล็อกทางอ้อม)
เวลาของ Inode: เข้าถึงแล้ว: 1202350961 = พฤ. 7 ก.พ. 2222:41 2008 แก้ไขไฟล์: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008 ปรับเปลี่ยน Inode: 1202351093 = พฤ 7 กพ. 03:24:53 2008 เวลาลบ: 1202351093 = พฤ 7 ก.พ. 03:24:53 2008
บล็อกโดยตรง:
-------------- Inode 309631 ----------------------- Id Generation: 2771183319 uid / gid: 1000 / 1,000 โหมด: ขนาด rrwxr-xr-x: 40 ลิงก์จำนวน: 1 ภาค: 8 (-> 0 บล็อกทางอ้อม)
เวลาอินode: เข้าถึง: 1202350961 = พฤ 7 ก.พ. 03:22:41 2008 แก้ไขไฟล์: 1189688692 = พฤ 13 ก.ย. 15:04:52 2550 เวลาแก้ไข: 1189688692 = พฤ 13 ก.ย. 15:04:52 2550 เวลาลบ: 0
บล็อกโดยตรง: 645627
ไฟล์มีขนาดเล็กมาก: เพียงหนึ่งบล็อก เราคัดลอกบล็อกนี้ด้วย dd ดังที่แสดงก่อนหน้า:
$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 จาก = block.645627 1 + 0 บันทึกใน 1 + 0 บันทึก 4096 ไบต์ (4.1 kB) คัดลอก 0.0166104 วินาที 247 kB / s
จากนั้นแก้ไขไฟล์เพื่อลบศูนย์ต่อท้ายหรือคัดลอก 40 ไบต์แรก (ขนาดที่กำหนดของไฟล์):
$ dd if = block.645627 bs = 1 จำนวน = 40 of = start_azureus 40 + 0 บันทึกใน 40 + 0 บันทึก 40 ไบต์ (40 B) คัดลอก, 0.000105397 วินาที, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
หาย!"