Файл таинственно пуст. Варианты восстановления?


9

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

Если бы она случайно выбрала весь текст в файле, нажала клавишу Backspace и сохранила его, в нем все равно останется метаинформация OpenOffice.

Я немедленно выключил ее ноутбук, чтобы предотвратить внесение каких-либо изменений в диск, пока не смогу придумать, чем заняться.

В прошлом я делал некоторые сложные вещи, такие как ddвосстановление исходного текста с диска, но понятия не имею, что здесь делать. Поскольку файлы odt не являются плоским текстом, я не могу просто передать весь диск через grep.

Любые предложения будут ценны.

Также, если у кого-то есть понимание того, что могло пойти не так, я бы хотел услышать это.

Спасибо


1
Было бы иначе, если файл был случайно удален или что-то в этом роде, но при сохранении файла в текстовом редакторе и т. Д. Часто записывается «на месте», эффективно стирая все, что могло быть восстановлено с помощью восстановления с помощью криминалистической экспертизы. Было бы лучше, если бы вы не закрыли систему сразу, я уверен, что несколько нажатий клавиши control + z (встроенная функция «отменить» в Open Office) устранили бы проблему.
Тим

@ Я понимаю вашу точку зрения, но, к сожалению, файл был очищен за несколько дней до этого. Время последнего изменения файла было несколько дней назад. По моему описанию, когда она открыла его в ОО, там уже было пусто. Спасибо хоть.
jcbwlkr

2
Не пытаясь бить мертвую лошадь или пнуть человека, когда он не работает, но я подозреваю, что этот опыт поможет вам найти решение для резервного копирования. Взгляните на «Areca Backup» для простого, совместимого с Linux приложения для резервного копирования.
Тим

Диск заполнен что ли? Проверьте сdf -h
Джиппи

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

Ответы:


3

Если вы используете файловую систему ext3, попробуйте следовать HOWTO Карло Вуда

В нескольких словах,

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

Из источника:

«Глава Пример ручного восстановления

В следующем примере мы вручную восстановим небольшой файл. Дан только частичный вывод, чтобы сэкономить место и сделать пример более читабельным.

Используя ext3grep $ IMAGE --ls --inode, мы находим имя файла, который мы хотим восстановить:

$ ext3grep $ IMAGE --ls --inode 2 | Греп Карло 3 конец 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 is Nonloclocated Группа: 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 Изменен Inode: 1202351093 = Чт 7 Фев 03:24:53 2008 Время удаления: 1202351093 = Чт 7 февраля 03:24:53 2008

Прямые блоки:

Поэтому мы попытаемся найти его более старую копию в журнале. Сначала мы находим блок файловой системы, который содержит этот индекс:

$ ext3grep $ IMAGE --inode-to-block 309631 | Результирующий grep Индекс 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 распознает, что это блок из таблицы инодов, и напечатает содержимое всех 32 инодов в нем. Однако мы хотим видеть только индекс 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 Фев 03:22:41 2008 Изменен файл: 1202351093 = Чт 7 Фев 03:24:53 Изменен 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 косвенных блоков).

Время инода: Доступ: 1202350961 = Чт 7 февраля 03:22:41 Файл изменен: 1189688692 = Чт 13 сен 15:04:52 Изменен индекс 2007: 1189688692 = Чт 13 сен 15:04:52 2007 Время удаления: 0

Прямые блоки: 645627

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

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

-------------- Индекс 309631 ----------------------- Идентификатор поколения: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x размер: 0 количество ссылок: 0 секторов: 0 (-> 0 косвенных блоков).

Времена Inode: Доступ: 1202350961 = Чт 7 Фев 03:22:41 2008 Изменен файл: 1202351093 = Чт 7 Фев 03:24:53 Изменен Inode: 1202351093 = Чт 7 Фев 03:24:53 2008 Время удаления: 1202351093 = Чт 7 февраля 03:24:53 2008

Прямые блоки:

-------------- Индекс 309631 ----------------------- Идентификатор поколения: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x размер: 40 количество ссылок: 1 секторов: 8 (-> 0 косвенных блоков).

Время инода: Доступ: 1202350961 = Чт 7 февраля 03:22:41 Файл изменен: 1189688692 = Чт 13 сен 15:04:52 Изменен индекс 2007: 1189688692 = Чт 13 сен 15:04:52 2007 Время удаления: 0

Прямые блоки: 645627

Файл действительно маленький: только один блок. Мы копируем этот блок с помощью dd, как показано ранее:

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

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

$ dd if = block.645627 bs = 1 count = 40 of = 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

Сейчас работает нормально. Это определенно не было раньше. Кто знает? Спасибо, Ява. Я посмотрю на это.
jcbwlkr

Нет проблем, надеюсь, это поможет тебе, не обижайся, но я кое-что знаю о взаимодействии жены <-> с компьютером;)
java_xof

2

Попробуйте testdisk и photorec , но, насколько я понимаю, ваше письмо - это, вероятно, трудный способ узнать ценность регулярных резервных копий. Также вы можете захотеть загрузиться с CD, чтобы предотвратить дальнейшее изменение жесткого диска. Мне лично нравится 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.