Вопрос или проблема
Предупреждение: я не очень хорош в формулировке вопросов, и мой случай очень специфический. Поэтому я просто перейду к ситуации:
Я просматривал свою файловую систему и тем или иным образом смог скачать архив, содержащий два критически важных узла (tarfile::todo/main
и tarfile::todo/code
) с моего локального диска и записать его в тот же файл. Как только я понял, что загрузчик делает, я быстро остановил его и проверил архив, чтобы, к моему сожалению, обнаружить, что осталась только небольшая часть, а остальное было обрезано. Я не знаю, почему он не сделал резервную копию существующего файла перед записью чего-то нового в него, или почему session.tar не был зафиксирован в моем репозитории git, но теперь вся информация пропала. Я очень осторожный пользователь, но когда я совершаю ошибку, это абсолютно катастрофично.
После того, как extundelete не смог восстановить файл, я поискал здесь и нашел это, которое дает метод, комбинирующий grep и dd для поиска и чтения данных непосредственно с жесткого диска.
Больше контекста:
- Мой
/home/user
каталог смонтирован на отдельном диске:/dev/sdb3
- Сегодня второй день, как я пытаюсь восстановить файлы.
- Вывод в следующем абзаце был создан сегодня.
После того как я выполнил комбинацию grep/dd, я получил такой вывод. Как же мне это использовать, чтобы вернуть свои файлы? Я пытался скопировать его в .file.swp
и восстановить с помощью vim -r
, надеясь, что это файл обмена vim, но это не так. Я никогда не видел этот формат раньше, поэтому не имею ни малейшего представления, что он означает.
Я действительно хочу вернуть эти данные. Как я уже говорил, это критически важно. Это настоящая корзина, в которой находятся все мои яйца. Потеря этого будет болезненным ударом для продуктивности и организации.
Ну, я думаю, что нашел решение. Для начала начну с ссылки, которую я опубликовал в вопросе.
От Марк Плотник.
Сначала выполните:
sudo grep -a -b "[текст из удаленного файла]" /dev/[диск, на котором он был сохранен]
Это сгенерирует довольно много вывода. Например:
13813610612: куча текста
Вам нужно взять это число и использовать его с dd для чтения непосредственно с вашего жесткого диска, обходя файловую систему.
sudo dd if=/dev/[тот же диск, что и раньше] \
of=./salvaged \
count=2000 \
skip=$(expr [число] / 512)
Таким образом, я написал скрипт, который использовал эту технику и сгенерировал около ста файлов по 1 МБ, соответствующих тегу “tarfile”.
Я думаю, что мое нестандартное решение сохранить все в обычном .tar
файле спасло меня, потому что я нашел одни и те же данные в нескольких местах на жестком диске. Я нашел все, что мне было нужно, несколько раз.
Теперь мне просто нужно отсортировать более гигабайта случайного текстового/бинарного мусора. Ох. Это очень много работы.
Ответ или решение
Для восстановления узлов/содержимого из tar-файла, который был перезаписан, необходимо следовать определенным шагам. Следует помнить, что чем быстрее вы начнете процесс восстановления, тем выше вероятность успешного извлечения данных, так как перезаписанные области на диске могут окончательно стереться.
Шаги для восстановления данных:
-
Останавливаем дальнейшие операции с диском: Первое, что вы должны сделать, это прекратить любые записи на диск, чтобы избежать дальнейшей потери данных. Если возможно, подключите диск на другом компьютере или используйте live USB для работы с ним.
-
Использование команды
grep
: Найдите текст (или часть текста) из вашего tar-файла, который все еще может присутствовать на диске. Используйте командуgrep
для поиска этого текста напрямую на низком уровне в устройстве.sudo grep -a -b "[ваш текст до удаления]" /dev/[ваш_диск]
Это сгенерирует вывод, который будет представлять собой список вхождений вашего текста вместе с их смещением.
-
Применение
dd
для извлечения данных: Используя смещения, полученные с помощьюgrep
, вы можете использовать командуdd
для извлечения данных напрямую из устройства. Пример команды:sudo dd if=/dev/[ваш_диск] of=./salvaged count=2000 skip=$(expr [номер_смещения] / 512)
Здесь
count=2000
можно изменять в зависимости от того, сколько данных вы хотите извлечь. -
Создание скрипта для автоматизации: Если вы нашли несколько смещений, вы можете написать скрипт для автоматизации процесса извлечения данных. Это позволит извлечь множество фрагментов данных в отдельные файлы.
-
Обработка извлеченных данных: После того как вы получите фрагменты данных, возможно, вам придется перебрать их, чтобы восстановить оригинальное содержимое. Вы можете использовать текстовые редакторы или инструменты для анализа бинарных данных для этой задачи.
-
Извлечение tar-файлов: Если ваши данные были из tar-файлов, возможно, они организованы в блоки. Если вы видите, что в извлеченных данных есть структуры tar, используйте команду
tar
для их восстановления:cat file1 file2 ... | tar xvf -
Заключение
Учитывая, что вы могли найти данные в нескольких местах на диске, использование методов низкоуровневого доступа, как описано выше, дает вам шансы вернуть утраченные файлы. Будьте готовы к значительному объему работы по сортировке и восстановлению данных.
Также рекомендую в будущем периодически делать резервные копии важных файлов и рассмотреть использование систем контроля версий (таких как git) для защиты от утрат.