Linux восстановить перезаписанный файл

Обновлено: 06.07.2024

Иногда случается, что мы случайно удаляем еще нужные нам файлы. Особенно это опасно в терминале Linux, поскольку здесь файлы удаляются не в корзину, а стираются с диска сразу и навсегда.

Понятно, что нужно аккуратно обращаться с командами удаления файлов, но что делать если уже все удалено, а файлы были важные и их нужно срочно восстановить? В некоторых случаях это возможно. В нашей сегодняшней статье мы рассмотрим восстановление удаленных файлов linux.

Немного теории

Каждый файл занимает определенное пространство на жестком диске, но файловая система для предоставления доступа к файлу дает нам ссылки на его начало, по которым любая программа может получить уже содержимое всего файла. Было бы неэффективно, если бы удаление файла приводило к полному перезаписыванию его области на диске.

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

Если же вы работали с этой файловой системой и данные на диске были перезаписаны другими, то вы уже ничего сами не спасете. Возможно, вы слышали, что спецслужбы могут восстанавливать несколько раз перезаписанные данные по остаточному магнитному следу на диске. Это действительно так. Но для решения такой задачи нужно специальное оборудование, здесь недостаточно нескольких программ, нужен специальный лазер, который может считать магнитный след по краям дорожки и другая аппаратура. Так что про этот метод для себя можете забыть.

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

1. Safecopy

Safecopy - это довольно простой инструмент для восстановления данных, который просто копирует данные из одного места в другое. Утилита, как таковая, не восстанавливает отдельные файлы. Она просто позволяет скопировать данные из поврежденного устройства на нормальное.

Разница между этой утилитой и другими программами копирования в том, что Safecopy не завершается при обнаружении каких-либо ошибок, будь то плохая операция чтения или поврежденный сектор. У нее есть множество дополнительных опций для настройки, а также возможность создания образа файловой системы из поврежденного носителя. Данные восстанавливаются тщательно и быстро, насколько это возможно.

Утилиту можно установить из официальных репозиториев вашего дистрибутива. Пользователи Ubuntu могут воспользоваться такой командой:

sudo apt install safecopy

Здесь вы не восстановите удаленные файлы, но вы можете скопировать поврежденные данные. Например, для видео несколько повреждений не играют большой роли. Для запуска восстановления файлов в linux с раздела /dev/sda1 выполните:

sudo safecopy /dev/sda1 /home/files/

Все файлы, которые удастся скопировать будут в /home/files/.

2. TestDisk

Утилита может восстанавливать потерянные разделы, исправлять таблицу разделов GPT и MBR, делать резервные копии дисков, восстанавливать загрузочные записи, а главное восстанавливать удаленные файлы с файловых систем NTFS, FAT, exFAT и файловых систем семейства Ext. Также вы можете копировать файлы даже с удаленных разделов для тех же файловых систем.

Способ работы утилиты очень сильно отличается в зависимости от нужного действия. Здесь вас ждет псевдографический мастер, который проведет вас через все шаги. Установить testdisk можно так же само из официальных репозиториев. В Ubuntu используйте для этого команду:

sudo apt install testdisk

Поскольку тема нашей статьи - восстановление файлов linux, рассмотрим как это делается с помощью этой утилиты. Запустите программу:

На первом шаге мастера выберите Create New Log:

testdisk4

Дальше выберите диск, с которым будем работать:

testdisk3

Выберите таблицу разделов на диске:

testdisk5

Для работы с файловой системой выберите пункт Advanced:

testdisk1

Далее выберите раздел, затем команду list:

testdisk

Тут вы увидите все файлы, которые есть на этом разделе. Удаленные, но подлежащие восстановлению файлы будут помечены красным.

testdisk2

Работать с этой утилитой удобнее, чем с Photorec, потому что здесь вы можете выбрать только один нужный файл, а не восстанавливать сразу кучу мусора. Чтобы скопировать файл просто выберите его, нажмите c и выберите папку для сохранения. Правда, вы же понимаете, что для восстановления нужно, чтобы файлы были не перезаписаны, где-то чуть перезапишется и все.

3. PhotoRec

Наша последняя программа ориентирована в первую очередь на поиск и восстановление удаленных видео, фото, документов и архивов. Можно сказать, что это программа восстановления удаленных файлов linux. Преимущество PhotoRec заключается в том, что она полностью игнорирует файловую систему и смотрит на сырые данные, а это значит, что она все равно будет работать, даже если файловая система повреждена или переформатирована, но только в быстром режиме, там где стираются лишь заголовки.

Во избежание каких-либо проблем, здесь используется доступ только для чтения, этого вполне достаточно для восстановления данных. Но как я говорил раньше, вам нужно остановить все операции записи, как только вы поняли, что нужно восстановить файл. В противном случае нужные данные могут быть перезаписаны чем-то новым и вы уже не сможете их восстановить.

В утилиты есть несколько настроек. Вы можете указать расширения файлов, которые нужно найти, размер, дату изменения и так далее. Установить программу можно так же как и TestDisk - из официальных репозиториев.

Например, в Ubuntu выполните:

sudo apt install photorec

Что касается использования, то тут похожий на testdisk интерактивный интерфейс. Запустите утилиту командой:

Выберите диск, с которым нужно работать:

photorec

photorec1

Выберите файловую систему:

photorec2

Выберите способ сканирования (неразмеченное пространство/весь раздел) Затем выберите папку для сохранения результата:

photorec3

Дождитесь завершения процесса:

photorec4

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

Выводы

А какие ваши любимые утилиты для восстановления данных? Какими вы пользуетесь? Напишите в комментариях!

На десерт видео от Discovery о том, как работает жесткий диск:

Есть ли способ восстановить требуемый_файл? Я вложил так много работы в это. Я обычно делаю резервные копии файлов, но на этот раз я забыл.

3 ответа 3

Некоторые люди предлагают

Там, где ваш файл находился в файловой системе /home, 'home был смонтирован на /dev //sda2, а военная является ключевой фразой, которая, вероятно, будет уникальной для перезаписанного файла.

recovered_file может быть большим, но может содержать текст из перезаписанного файла. Если перезаписанный файл не был в основном текстовым, этот подход бесполезен.

Важно принять меры для предотвращения дальнейшей записи операционной системой файловой системы, содержащей ваш файл. Хороший способ - это загрузка с live-CD. Если вы можете размонтировать файловую систему или перемонтировать ее только для чтения, это тоже хорошо.

Прекратите использовать / размонтировать соответствующий раздел как можно скорее.

Рассмотрим эту тему, где упоминается extundelete . Кроме того, существуют photorec, прежде всего, и скальпель, которые являются очень мощными резчиками файлов, которые могут помочь восстановить ваш файл (например, путем поиска более старых версий или резервных копий вашего файла, которые еще не были перезаписаны).

Все эти инструментов доступны в вашей Ubuntu метких хранилищ (PhotoRec поставляется с пакетом TestDisk).

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

Однако, если ваш файл действительно был перезаписан (т. Е. Та же область жесткого диска, на которой был сохранен старый файл, использовалась для хранения нового файла), то нет возможности восстановить файл (Примечание: это действительно только для жесткие диски - ssds хранит (и "перезаписывает") файлы другим способом). Если вам повезет, вы сможете восстановить только те части файла, которые не были перезаписаны, например, если новый файл был меньше старого.

Я не думаю, что требуемый_файл был фактически перезаписан этим действием. Это было скорее "несвязано" с соответствующим инодом, чтобы "исчезнуть". Кроме того, some_arbit_file не изменил своего местоположения - это был скорее "указатель", который ранее указывал на required_file, который сейчас указывает здесь.

Существуют инструменты, которые помогут вам в таких случаях, например, Sleuthkit или Testdisk. Но они требуют некоторой ручной работы - и это не так легко сделать, если вы не знаете, с чего начать. Также есть скрипт ext3undel, который использует эти инструменты и автоматизирует процесс, или отдельная утилита extundelete.

Все, что вы пытаетесь сделать: вообще не трогать поврежденный раздел диска, увеличивает ваши шансы на восстановление потерянного файла. Лучше всего выполнить все действия на другом компьютере, а подключенный диск только для чтения, даже для восстановления, также повышает ваши шансы. Если у вас нет другого компьютера, вы можете попробовать live CD (не устанавливайте поврежденный диск в режиме записи и здесь!). Даже будучи LiveCD, они позволяют устанавливать программное обеспечение в памяти, поэтому вы можете получить и запустить любой из вышеупомянутых инструментов. Имейте под рукой дополнительный носитель (например, карту памяти, SD-карту, внешний диск . ) для хранения восстановленных файлов и запуска процесса - в зависимости от того, что вы выбрали - оттуда.

Я говорю не о восстановлении удаленных файлов , а о перезаписанных файлах. А именно следующими методами:

Можно ли получить что-нибудь, если какое-либо из указанных выше трех действий выполнено, если на компьютере с Linux не установлено никаких специальных программ?

Я просто хочу отметить, что ваш первый пример ( mv ) сродни удалению old_file , а не перезаписи, поэтому в этом случае будут применяться методы (если они существуют) для восстановления удаленных файлов, в отличие от перезаписанных файлов. Два других ваших примера действительно перезаписывают существующий old_file и existing_file , соответственно. Все три предоставленных вами примера реализованы путем удаления всех блоков данных исходного файла и записи во вновь выделенные блоки, а процедура восстановления этих данных аналогична восстановлению удаленного файла. Исключением может быть случай, если исходные файлы очень короткие (короче 60 байтов на ext4), где последние два примера, вероятно, делают предыдущие данные невосстановимыми. @MarkPlotnick, согласно комментарию Селады, mv отличается.

Ответ: «Возможно, да, но это зависит от типа файловой системы и времени».

Ни один из этих трех примеров не перезапишет физические блоки данных old_file или существующие_file, за исключением случайного.

mv new_file old_file , Это отвяжет old_file. Если на old_file есть дополнительные жесткие ссылки, блоки в этих оставшихся ссылках останутся неизменными. В противном случае блоки обычно (в зависимости от типа файловой системы) будут помещены в свободный список. Затем, если mv требуется копирование (в отличие от простого перемещения записей каталога), новые блоки будут выделены как mv записи.

Эти вновь распределенные блоки могут быть или не быть теми же, которые были только что освобождены . В файловых системах, таких как UFS , блоки распределяются, если это возможно, из той же группы цилиндров, что и каталог, в котором был создан файл. Так что есть вероятность, что отсоединение файла от каталога и создание файла в этом же каталоге будет использоваться повторно ( и перезаписать) некоторые из тех же блоков, которые были только что освобождены. Вот почему стандартный совет для людей, которые случайно удаляют файл, - не записывать новые данные в файлы в их дереве каталогов (и желательно не во всю файловую систему), пока кто-то не попытается восстановить файл.

cp new_file old_file будет делать следующее (вы можете использовать strace для просмотра системных вызовов):

Флаг O_TRUNC приведет к освобождению всех блоков данных, как это mv делалось выше. И, как указано выше, они, как правило, добавляются в свободный список и могут или не могут быть повторно использованы последующими записями, выполненными cp командой.

vi existing_file , Если vi это на самом деле vim , :x команда делает следующее:

Так что он даже не удаляет старые данные; данные сохраняются в файле резервной копии.

На FreeBSD, vi делает open("existing_file",O_WRONLY|O_CREAT|O_TRUNC, 0664) , который будет иметь ту же семантику, что cp и выше.

Вы можете восстановить некоторые или все данные без специальных программ; все , что вам нужно , grep и dd , а также доступ к исходному устройству.

Для небольших текстовых файлов, единственная grep команда в ответе @Steven D в вопросе, на который вы ссылаетесь, является самым простым способом:

Но для больших файлов, которые могут быть в нескольких несмежных блоках, я делаю это:

который даст вам смещение в байтах совпадающей строки. Выполните это с помощью ряда dd команд, начиная с

Вы также хотели бы прочитать некоторые блоки до и после этого блока. В UFS файловые блоки обычно имеют размер 8 КБ и обычно распределяются довольно непрерывно, причем блоки одного файла чередуются с блоками 8 КБ из других файлов или свободного места. Длина файла в UFS составляет до 7 фрагментов по 1 КБ, которые могут быть или не быть смежными.

Конечно, в файловых системах, которые сжимают или шифруют данные, восстановление может быть не таким простым.

На самом деле в Unix очень мало утилит, которые перезаписывают блоки данных существующего файла. Тот, который приходит на ум, это dd conv=notrunc . Другой есть shred .

Как восстановить в Linux файл, перезаписанный другим?

Есть ли способ восстановить required_file? Я вложил в это так много работы. Обычно я делаю резервные копии файлов, но на этот раз забыл.

  • Я бы не стал использовать машину и нашел бы хорошее программное обеспечение (не знаю такого для Linux), которое может восстанавливать удаленные файлы. Ваши данные, скорее всего, все еще будут там.

recovered_file, вероятно, будет большим, но может содержать текст из перезаписанного файла. Если перезаписанный файл не был в основном текстовым, этот подход бесполезен.

Важно принять меры, чтобы операционная система не производила дальнейших операций записи в файловую систему, содержащую ваш файл. Хороший способ - загрузиться с live-CD. Если вы можете размонтировать файловую систему или перемонтировать ее только для чтения, это тоже хорошо.

  • Большое спасибо за этот ответ. Спас мой день! Мне каким-то образом удалось переопределить файл .tex с помощью Texmaker, и я неожиданно столкнулся со старой версией, созданной двумя днями ранее. Описанный поиск обнаружил полностью отсутствующий текст / код несколько мгновений назад. Спасибо!

Прекратите использование / отключите соответствующий раздел как можно скорее.

Рассмотрим эту ветку, где упоминается extundelete. Кроме того, существуют photorec, в первую очередь, и скальпель, которые являются очень мощными резчиками файлов, которые могут помочь восстановить ваш файл (например, путем поиска более старых версий или резервных копий вашего файла, которые еще не были перезаписаны).

Все эти инструменты доступны в ваших репозиториях Ubuntu apt (Photorec идет с тестовый диск пакет).

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

Есть инструменты, которые помогут вам в некоторых случаях, например, Sleuthkit или Testdisk. Но они требуют некоторой ручной работы - а это не так просто сделать, если вы не знаете, с чего начать. Также есть сценарий под названием ext3undel, который использует эти инструменты и автоматизирует процесс, или автономная утилита extundelete.

Что бы вы ни пытались сделать: совсем не касайтесь затронутого раздела диска, это увеличивает ваши шансы на восстановление потерянного файла. Лучше всего выполнить все действия на другой машине, а подключение затронутого диска только для чтения даже для восстановления повысит ваши шансы. Не имея другой машины, вы можете попробовать live CD (убедитесь, что не смонтировали затронутый диск в режиме записи!). Даже будучи LiveCD, они позволяют устанавливать программное обеспечение в память, поэтому вы можете получить и запустить любой из вышеупомянутых инструментов. Имейте под рукой дополнительный носитель (например, карту памяти, SD-карту, внешний диск . ) для хранения восстановленных файлов и запускайте процесс - что бы вы ни выбрали - оттуда.

Читайте также: