Файл загадково порожній. Варіанти відновлення?


9

Я бачив кілька публікацій про відновлення видалених файлів, але ця ситуація інша. У моєї дружини був файл під назвою Journal.odt, в якому вона зберігала багато важливої ​​особистої інформації, наприклад, особливі спогади про наших дітей. Днями, коли вона спробувала відкрити його у OpenOffice, вона поскаржилася на формат. Я мав її скасувати відмову і назад. Коли я catфайл, він повністю порожній. lsговорить, що файл становить 0 байт.

Якби вона випадково відібрала весь текст у файлі, натиснула назад і зберегла його, у файлі все-таки була б мета-інформація OpenOffice.

Я негайно вимкну її ноутбук, щоб запобігти внесенню більше змін на диск, поки я не зможу щось придумати.

У минулому я робив деякі складні речі, такі як використання ddдля відновлення неочищеного тексту з диска, але я не маю поняття, що тут робити. Оскільки файли невідкритого тексту не є плоским, я не можу просто передати весь диск через grep.

Будь-які пропозиції будуть дуже вдячні.

Крім того, якщо хтось має уявлення про те, що могло піти не так, я хотів би це почути.

Дякую


1
Було б інакше, якби файл був випадково видалений або щось подібне, але, коли в текстовому редакторі тощо зберігається файл, часто записується "на місці", ефективно протираючи все, що могло бути відновлено за допомогою відновлення криміналістичної сили. Було б краще, якби ви не вимкнули систему негайно, я думаю, що пару натискань управління + z (вбудована функція "скасувати" у Open Office) усунули б проблему.
Тім

@Tim Я бачу вашу думку, але, на жаль, файл був видалений за кілька днів до цього. Останнє змінення часу у файлі було за кілька днів до цього. У моєму описі, коли вона відкрила його в ОО, вона вже була порожньою. Спасибі, хоча.
jcbwlkr

2
Не намагаючись бити мертвого коня чи бити людину, коли він вниз, але я підозрюю, що цей досвід змусить вас шукати резервне рішення. Погляньте на "Areca Backup" для простого, сумісного з Linux додатка.
Тім

Диск повний, можливо? Перевіртеdf -h
jippie

@Tim Якщо файл становить 0 байт, це не документ OO; Ctrl+Zнічого не зробило б, оскільки файл не був збережений, як це має OO. @ Jacobwalker0814 файли ODT - це поштові файли, тому засоби відновлення, такі як testdisk, мають шанс їх знайти; але гарантії немає, і навіть якщо дані все-таки є, можливо, вам доведеться переглядати безліч інших поштових файлів. І на майбутнє зробіть резервну копію!
Жил "ТАК - перестань бути злим"

Відповіді:


3

Якщо ви використовуєте файлову систему ext3, спробуйте слідувати HOWTO Carlo Wood

Кілька слів,

  • Використовуйте ext3grep $ IMAGE --ls --inode 2 | grep your_file, щоб знайти файл, який ви шукаєте (де $ IMAGE - розділ ури, наприклад / dev / sda2)
  • Знайдіть блок файлової системи, який містить журнал нерозподіленого простору.
  • Знайдіть усі дескриптори журналів, що посилаються на блок, який був знайдений раніше.
  • Скопіюйте блок із dd.
  • Відредагуйте файл, щоб видалити кінцеві нулі.
  • кот файл, де ви хочете

З джерела:

Msgstr "Приклад відновлення вручну

У наступному прикладі ми вручну відновимо невеликий файл. Дається лише частковий вихід, щоб заощадити місце та зробити приклад більш читабельним.

За допомогою 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 'бін $' | головка -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 Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 0 кількість посилань: 0 сектори: 0 (-> 0 непрямих блоків).

Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Inode Змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Час видалення: 1202351093 = Чт 7 лютого 03:24:53 2008

Прямі блоки:

Тому ми спробуємо шукати старішу його копію в журналі. Спочатку ми знаходимо блок файлової системи, який містить цей inode:

$ ext3grep $ IMAGE --введення до блоку 309631 | grep проживає Inode 309631 знаходиться в блоці 622598 при зміщенні 0xf00.

Тоді ми знаходимо всі дескриптори журналу, що посилаються на блок 622598:

$ Ext3grep $ IMAGE --journal --block 622598 [...] дескриптори журнальні посилаються блок 622598: 4381294 +26582 4381311 +28693 4381313 +28809 4381314 +28814 4381321 +29308 4381348 +30676 4381349 +30986 4381350 +31299 4381374 +32718 4381707 1465 4381709 2132 4381755 2945 4381961 4606 4382098 6073 4382137 6672 4382138 7536 4382139 7984 4382140 8931

Це означає, що транзакція з порядковим номером 4381294 має копію блоку 622598 в блоці 26582 тощо. Найбільший порядковий номер внизу має бути останніми записаними на диск даними, і таким чином блок 8931 повинен бути таким же, як і поточний блок 622598. Для того, щоб знайти останню не видалену копію, слід починати знизу і працювати вгору

Якщо ви спробуєте надрукувати такий блок, ext3grep розпізнає, що це блок із таблиці inode, і надрукує вміст усіх 32-х вузлів у ньому. Ми хотіли б побачити тільки 309631; тому ми використовуємо смарт-греп:

$ ext3grep $ IMAGE --принт --блок 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: режим 1000/1000: rrwxr-xr-x розмір: 0 кількість посилань: 0 секторів: 0 (-> 0 непрямих блоків).

Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22: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 --принт --блок 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: режим 1000/1000: rrwxr-xr-x розмір: 40 кількість посилань: 1 сектори: 8 (-> 0 непрямих блоків).

Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Inode Змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Час видалення: 0

Прямі блоки: 645627

Вищезазначене автоматизовано і це можна зробити набагато швидше за допомогою параметра командного рядка - show-journal-inodes. Цей параметр знайде блок, якому належить inode, потім знайде всі копії цього блоку в журналі та згодом надрукує лише запитуваний inode з кожного з цих блоків (кожен з яких містить 32, як відомо вам), усуваючи дублікати :

$ ext3grep $ IMAGE - show-journal-inodes 309631 Кількість груп: 75 Мінімальний / максимальний блок журналу: 1115/35026 Завантаження дескрипторів журналу ... зроблено трансакцію журналу 4381435 завершується, деякі блоки даних можуть бути втрачені від цієї транзакції. Кількість дескрипторів у журналі: 30258; min / max порядкові номери: 4379495/4382264 Копії inode 309631, знайдені в журналі:

-------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 0 кількість посилань: 0 секторів: 0 (-> 0 непрямих блоків).

Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Inode Змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Час видалення: 1202351093 = Чт 7 лютого 03:24:53 2008

Прямі блоки:

-------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 40 кількість посилань: 1 сектори: 8 (-> 0 непрямих блоків).

Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Inode Змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Час видалення: 0

Прямі блоки: 645627

Файл справді невеликий: лише один блок. Ми копіюємо цей блок з dd, як показано раніше:

$ dd, якщо = $ IMAGE bs = 4096 count = 1 пропуск = 645627 з = block.645627 1 + 0 записів у 1 + 0 записів із 4096 байтів (4,1 кБ) скопійовано, 0,0166104 секунд, 247 кБ / с

а потім відредагуйте файл, щоб видалити кінцеві нулі або скопіюйте перші 40 байт (заданий розмір файлу):

$ dd, якщо = блок.645627 bs = 1 кол = 40 з = start_azureus 40 + 0 записів за 40 + 0 записів, скопійовано 40 байт (40 B), 0.000105397 секунд, 380 кБ / с

$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &

Одужав! "


Я хотів би заглянути в це, але посилання здається мертвою.
jcbwlkr

3
Мені це не здається мертвим.
Містер Лістер

так, я можу отримати доступ до нього будь-яким.
java_xof

Зараз добре працює. Це точно не було раніше. Хто знає? Дякую, java. Я подивлюся на це.
jcbwlkr

Без проблем, сподіваюся, що це допоможе вам, не ображайтесь, але я знаю щось про взаємодію дружини <-> комп'ютер;)
java_xof

2

Спробуйте testdisk та photorec , але те, як я розумію ваше написання, - це, мабуть, важкий спосіб дізнатися значення регулярних резервних копій. Крім того, ви можете скористатися завантаженням з компакт-диска, щоб запобігти ще більшій зміні жорсткого диска. Мені особисто подобається System Rescue Disk для цього, але він багато в чому заснований на командному рядку.


1

Використовуйте Caine спеціальний дистрибутив Linux для цифрової криміналістики. Існує безліч інструментів для відновлення файлів і жорсткого диска.


Дякую. Я загляну в цей дистрибутив і побачу, чи є в ньому щось. Чи є у вас рекомендації щодо конкретних інструментів чи способів наблизитись до проблеми? Проблема тут полягає в тому, що файл не видалено, який, здається, вирішує багато інструментів; він просто втратив вміст.
jcbwlkr

1
Open Office іноді створює прихований файл, який містить попередній збережений документ. Якщо вам пощастило, ви можете спробувати відновити його, наприклад, "extundelete" або "testdisk" cgsecurity.org/wiki/TestDisk
PsyStyle

Подивіться на ~ / .openoffice.org / 3 / user / backup / або ~ / .libreoffice.org / 3 / user / backup / Я написав сценарій, щоб очистити ці каталоги, щоб чутливих речей, які я видалив, ще не було.
Джо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.