ไฟล์ว่างเปล่าอย่างลึกลับ ตัวเลือกในการกู้คืน?


9

ฉันเห็นหลายโพสต์เกี่ยวกับการกู้คืนไฟล์ที่ถูกลบ แต่สถานการณ์นี้แตกต่างกัน ภรรยาของฉันมีไฟล์ชื่อ Journal.odt ซึ่งเธอเก็บข้อมูลส่วนบุคคลที่สำคัญมากมายเช่นความทรงจำพิเศษเกี่ยวกับลูก ๆ ของเรา เมื่อวันก่อนเมื่อเธอพยายามเปิดมันใน OpenOffice มันบ่นเกี่ยวกับรูปแบบ ฉันตีเธอยกเลิกและกลับออกไป เมื่อฉันcatไฟล์มันว่างเปล่าอย่างสมบูรณ์ lsระบุว่าไฟล์คือ 0 ไบต์

หากเธอเลือกข้อความทั้งหมดในไฟล์โดยไม่ได้ตั้งใจให้กด Backspace และบันทึกไว้จะยังคงมีข้อมูลเมตาของ OpenOffice ในไฟล์

ฉันปิดแล็ปท็อปของเธอทันทีเพื่อป้องกันการเปลี่ยนแปลงดิสก์อีกต่อไปจนกว่าฉันจะนึกถึงสิ่งที่ต้องทำ

ฉันเคยทำสิ่งที่ซับซ้อนบางอย่างในอดีตเช่นใช้ddเพื่อกู้คืนข้อความดิบออกจากดิสก์ แต่ฉันไม่รู้ว่าจะทำอย่างไรที่นี่ เนื่องจากไฟล์ odt ไม่ใช่ข้อความแบบแฟลตฉันไม่สามารถทำให้ทั้งดิสก์ผ่าน grep ได้

ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

นอกจากนี้หากใครมีความเข้าใจในสิ่งที่อาจผิดพลาดฉันชอบที่จะได้ยินมัน

ขอบคุณ


1
มันจะแตกต่างกันถ้าไฟล์ถูกลบโดยไม่ตั้งใจหรือบางสิ่งบางอย่าง แต่เมื่ออยู่ในโปรแกรมแก้ไขข้อความ ฯลฯ การบันทึกไฟล์มักจะเขียน "ในสถานที่" ได้อย่างมีประสิทธิภาพเช็ดสิ่งที่อาจได้รับการกู้คืนด้วยการกู้คืนความแข็งแกร่งทางนิติเวช คงจะดีกว่านี้ถ้าคุณไม่ได้ปิดระบบลงทันทีฉันวางเดิมพันกด + z (ฟังก์ชั่น "เลิกทำ" ใน Open Office) จะแก้ไขปัญหาได้
ทิม

@ เวลาฉันเห็นประเด็นของคุณ แต่น่าเสียดายที่ไฟล์ถูกลบออกไปหลายวันแล้ว เวลาที่แก้ไขล่าสุดในไฟล์ก่อนหน้านี้สองสามวัน ในคำอธิบายของฉันเมื่อเธอเปิดมันใน OO มันว่างเปล่าแล้ว ขอบคุณแม้ว่า
jcbwlkr

2
ไม่พยายามที่จะเอาชนะม้าที่ตายแล้วหรือเตะผู้ชายเมื่อเขาล้มลง แต่ฉันสงสัยว่าประสบการณ์นี้จะช่วยให้คุณมองหาโซลูชันสำรอง ดู "Areca Backup" สำหรับแอปพลิเคชั่นสำรองข้อมูลที่ใช้งานร่วมกันได้กับ Linux
ทิม

บางทีดิสก์เต็ม? ตรวจสอบกับdf -h
jippie

@Tim หากไฟล์มีขนาด 0 ไบต์จะไม่ใช่เอกสาร OO Ctrl+Zจะไม่ทำอะไรเลยเนื่องจากไฟล์ไม่ได้รับการบันทึกตามที่ OO @ jacobwalker0814 ไฟล์ ODT เป็นไฟล์ซิปดังนั้นเครื่องมือการกู้คืนเช่น testdisk มีโอกาสที่จะค้นหา แต่ไม่มีการรับประกันและแม้ว่าข้อมูลจะยังคงอยู่ที่นั่นคุณอาจต้องลุยไฟล์ zip อื่น ๆ มากมาย และสำหรับอนาคตให้ทำสำรอง!
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


3

หากคุณใช้ระบบไฟล์ 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 &

หาย!"


ฉันชอบที่จะมองไปที่การเชื่อมโยง แต่ดูเหมือนว่าจะตาย
jcbwlkr

3
ดูเหมือนจะไม่ตายสำหรับฉัน
นาย Lister

ใช่ฉันสามารถเข้าถึงได้ทั้ง
java_xof

มันใช้งานได้ดีตอนนี้ มันไม่ได้เร็วไปกว่านี้ ใครจะรู้? ขอบคุณจาวา ฉันจะดูมัน
jcbwlkr

ไม่มีปัญหาหวังว่าจะช่วยคุณได้ไม่มีความผิด แต่ฉันรู้อะไรเกี่ยวกับการโต้ตอบกับภรรยา <-> คอมพิวเตอร์;)
java_xof

2

ลองtestdisk และ photorecแต่วิธีที่ฉันเข้าใจการเขียนของคุณอาจเป็นวิธีที่ยากในการเรียนรู้คุณค่าของการสำรองข้อมูลปกติ นอกจากนี้คุณอาจต้องการบูตจากซีดีเพื่อป้องกันไม่ให้ฮาร์ดดิสก์เปลี่ยนแปลงอีกต่อไป ฉันชอบSystem Rescue Diskสำหรับสิ่งนี้ แต่ส่วนใหญ่จะเป็นบรรทัดคำสั่ง


1

ใช้ Caine เป็นการแจกจ่ายลินุกซ์พิเศษสำหรับนิติวิทยาศาสตร์ดิจิทัล มันมีเครื่องมือมากมายสำหรับการกู้คืนไฟล์และฮาร์ดดิสก์


ขอบคุณ ฉันจะดูที่ distro นั้นและดูว่ามันมีอะไรหรือเปล่า คุณมีคำแนะนำเกี่ยวกับเครื่องมือเฉพาะหรือวิธีแก้ไขปัญหาหรือไม่? ปัญหาที่นี่คือไฟล์ไม่ได้ถูกลบซึ่งเครื่องมือมากมายดูเหมือนจะอยู่; มันเพิ่งสูญเสียเนื้อหา
jcbwlkr

1
Open Office บางครั้งสร้างไฟล์ที่ซ่อนซึ่งมีเอกสารที่บันทึกไว้ก่อนหน้า หากคุณโชคดีคุณสามารถลองกู้คืนโดยใช้ตัวอย่างเช่น "extundelete" หรือ "testdisk" cgsecurity.org/wiki/TestDisk
PsyStyle

ดูใน ~ / .openoffice.org / 3 / ผู้ใช้ / backup / หรือ ~ / .libreoffice.org / 3 / ผู้ใช้ / backup / ฉันเขียนสคริปต์เพื่อล้างไดเรกทอรีเหล่านี้เพื่อให้สิ่งที่สำคัญที่ฉันลบไม่ได้อยู่ที่นั่น
Joe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.