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

249024
HaiYuan Zhang

Случайно я использовал rmфайл, который не хотел удалять. Есть ли способ вернуть его под Linux?

63
@Nav, `rm` - это« опасная »команда UNIX / Linux (читайте` $ man rm`). ** Используйте его с особой осторожностью **. С учетом сказанного, это быстрый способ удалить файлы, в которых вы уверены. Современные среды рабочего стола Linux и Unix предоставляют решение * "Trash Can" *, так что пользователь может легко восстановить случайно удаленные файлы. Jose Elera 11 лет назад 0
еще несколько актуальных ответов: http://unix.stackexchange.com/questions/122305/undelete-a-just-deleted-file-on-ext4-with-extundelete Ben Crowell 10 лет назад 1
Не используйте «rm», если вы хотите восстановить файлы в будущем. Вместо этого используйте утилиту «rm-trash»: https://github.com/nateshmbhat/rm-trash Natesh bhat 5 лет назад 0

15 ответов на вопрос

47
Gabriel L. Oliveira

Ниже приведены общие шаги для восстановления текстовых файлов.

  1. Сначала используйте команду wall, чтобы сообщить пользователю, что система отключается в однопользовательском режиме:

    # wall System is going down to .... please save your work. 

    Нажмите CTRL + D, чтобы отправить сообщение.

  2. Затем используйте команду init 1, чтобы перевести систему в однопользовательский режим:

    # init 1 
  3. Использование grep (традиционный способ UNIX) для восстановления файлов

    Используйте следующий синтаксис grep:

    grep -b 'search-text' /dev/partition > file.txt 

    ИЛИ ЖЕ

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt 

    Куда,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character. -a : Process a binary file as if it were text -B Print number lines/size of leading context before matching lines. -A: Print number lines/size of trailing context after matching lines. 

    Чтобы восстановить текстовый файл, начинающийся со слова «nixCraft» в / dev / sda1, вы можете попробовать следующую команду:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt 
  4. Затем используйте vi, чтобы увидеть file.txt.

    Этот метод полезен, только если удаленный файл является текстовым файлом. Если вы используете файловую систему ext2, попробуйте восстановить команду.

Находится по адресу http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html.

Стоит отметить, что вы НЕ МОЖЕТЕ ДЕЛАТЬ ЭТО УДАЛЕННО однопользовательский режим отключает сеть Quinma 11 лет назад 15
Этот метод творит чудеса для текстовых файлов, спасибо! Что мне нравится в этом, так это то, что он не использует журнал файловой системы (например, extundelete), а вместо этого сканирует необработанные байты всего диска. Если эта команда не найдет ваш файл, ничего не будет. Benjamin B. 9 лет назад 1
@ Quinma, этот метод * может * работать удаленно только с небольшими изменениями ... Вместо запуска `init 1`, вручную уничтожайте все системные демоны, кроме` sshd`. Я также думаю, что в этот момент вы должны перемонтировать все файловые системы RO и сохранить их в tmpfs (при условии, что ваши временные файлы поместятся в ram), чтобы избежать перезаписи файлов временными данными. Конечно, позже вам придется скопировать его в другое место, либо на удаленный сервер, либо обратно в локальные файловые системы после перемонтирования их RW. Thomas Guyot-Sionnest 9 лет назад 1
что такое твое_разделение ??? У меня ошибка: / dev / sda1: нет такого файла или каталога coolcool1994 8 лет назад 0
@ coolcool1994 У меня больше нет этой системы, поэтому я не могу полностью протестировать. Попробуйте просто `/ dev / sda`, а также проверьте, есть ли у вас раздел с именем` / dev / sda1` внутри `/ dev` Gabriel L. Oliveira 8 лет назад 0
У меня есть система Mac, хотя. Я посмотрел его на disk0, disk0s1 и во всех других дисковых файлах, но не смог найти потерянный файл (возможно, потому что я переопределил файл). coolcool1994 8 лет назад 0
Извините, но я больше не могу помочь. В процессе поиска я нашел эту ссылку [1], которая может помочь вам с использованием Time Machine или бесплатных программ восстановления. [1] http://www.wikihow.com/Recover-Accidentally-Deleted-Files-in-OS-X Gabriel L. Oliveira 8 лет назад 0
Могу ли я пропустить 2-й шаг `# init 1`? Qback 6 лет назад 0
@Qback, я действительно не знаю. Как уже говорилось, я просто пошёл по шагам. Но init 1 предназначен для административных задач, и, возможно, уничтожить процесс, не связанный с этим сценарием уровня запуска. Это может помочь предотвратить использование жесткого диска, перезаписать файл, который вы пытаетесь восстановить. Gabriel L. Oliveira 6 лет назад 1
13
Sjoerd
  • Если это очень-очень важно, возьмите диск с компьютера и наймите компанию, которая сделает это за вас.
  • Если это только очень важно, смонтируйте диск только для чтения, скопируйте весь раздел в файл с помощью ddи попытайтесь найти файл в нем (используя grepили редактор).

Изменить: иногда ddrescueработает лучше, чем dd.

«Попробуй найти файл внутри него» Я запутался, как можно было бы разумно открыть файл размером более 15 ГБ и найти или направить этого зверя в grep? И что бы вы сделали, когда нашли текст? Как же это восстановление? TheLQ 14 лет назад 1
Первое, что нужно сделать, это попробовать некоторые распространенные инструменты, прежде чем сжигать много денег для получения неопределенного результата. Кстати, grep не очень поможет, photorec или ext3grep помогут. wazoox 14 лет назад 1
9
zaynyatyi

Если у вас файловая система ext3, используйте ext3grep .

7
James T

Testdisk имеет отмененный вариант, который должен работать с Linux.

Существует пошаговое руководство для Linux . Обратите внимание, что это работает для ext2, ext3 и ext4 .

extundelete также удобен, если раздел ext3 / 4. Тем не менее, первое, что нужно сделать, это, возможно, размонтировать раздел. billc.cn 13 лет назад 0
5
cHao

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

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

4
wazoox
  • Единственный правильный ответ: восстановить файл из резервной копии. У всех должна быть резервная копия. Для действительно важных файлов у вас должно быть две резервные копии. Вы не? Ну, очень плохо, вот урок (извините за грубость, но я нахожусь в хранилище данных, и люди не копируют, пока не потеряли некоторые важные данные, это факт. Так что да, вы выглядите глупо, но как и все остальные).

  • ОК, у вас нет резервной копии. Вы должны прекратить использование файловой системы, которая содержала файл ПРЯМО СЕЙЧАС . Любая операция записи может определенно скрыть данные файла, которые могут (только могут ) оставаться на диске.

  • если вы допустили трагическую ошибку, чтобы использовать только один раздел в качестве корневой файловой системы и / home, это означает, что вы должны загрузиться с какого-то другого устройства. СЕЙЧАС .

  • Если ваш файл имеет какой-то общий формат (файл Word, JPG и т. Д.), Используйте Photorec . Photorec может получить наиболее распространенные форматы файлов.

  • Вы можете попробовать метод "ext3 undelete", предложенный ранее, но вы должны быть знакомы с командной строкой, понимать основные внутренние механизмы Linux и т. Д.

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

4
PriceChild

Установите ваши ожидания на низком уровне. Если что-то было записано поверх «удаленных» данных, вы потеряете это.

Я провел небольшое количество восстановления, и лучшие инструменты, которые я нашел, часто предназначались для определенных форматов. Например, «photorec» был великолепен, когда я хотел восстановить десятки тысяч jpeg.

Recuva также помогла мне до сих пор и может быть вашим лучшим выбором. (Это бесплатно, не обманывайте их рекламой)

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

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

4
Daniel Andersson

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

dd if=/dev/hda1 of=backup_image.ext3 

иметь файл резервной копии точного состояния раздела. Затем вы можете снова смонтировать раздел и продолжить работу, как обычно, при поиске удаленного файла в созданном вами образе. Изображение, вероятно, будет ОЧЕНЬ большим, поскольку вам нужно все «пустое» пространство, поэтому его хранение может оказаться практической проблемой.

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

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles 

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

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

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


Краткие технические замечания: есть технические трудности с восстановлением диска и Ext3 / 4. Объяснять это долго, но кратко (и неадекватно): Ext3 / 4 удаляет «маркеры», которые сообщают ОС, где файлы расположены на диске, когда вы их удаляете. Файлы не очищаются, но никто не знает, где на диске они начинаются и заканчиваются, а иногда они даже фрагментированы в нескольких местах. Некоторые другие файловые системы просто устанавливают статусы файлов как «удаленные», но сохраняют данные о местоположении. Тогда восстановить не сложнее, чем посмотреть на файловые указатели с этим флагом (они все равно должны быть доступны, если не произошло слишком много действий), и затем надеяться, что их содержимое не было перезаписано.

Что лучше? Риторический, на мой взгляд. Частое резервное копирование является ответом на все эти проблемы. Важные данные без автоматизированной системы резервного копирования - авария, ожидающая, чтобы произойти, ИМХО.


Обязательный личный анекдот: собирался удалить foo\ foo*из ~. я написал

rm -r foo<Tab>* 

К сожалению, поскольку, по- fooвидимому, это была символическая ссылка и единственный файл, соответствующий этому, оболочка превращена в

rm -r foo\ foo * 

Я нажал Enter и сел там, глядя на команду, которая должна была занять максимум секунду. Спустя немного больше времени, rmменя спросили, не хочу ли я «удалить что-то из файла, защищенного от записи». Довольно быстро я почувствовал озноб и мягко и очень сдержанно нажал Ctrl+c. ~ Половина моего~ была удалена, но мне удалось вернуть все, что имело значение, с помощью описанного выше поиска и некоторых более или менее текущих резервных копий. У меня были некоторые очень ценные (читай: отнимающие много времени) и самые последние данные измерений на диске, которые были утеряны, но я сделал четырехкратное резервное копирование. Один здесь разочаровался, другой из-за сбоя системы в школе, другой был поврежден, и сначала я не смог найти четвертый, так как я по ошибке положил его в неправильную папку :-D. Не имелrm -rЗастрял в файле, защищенном от записи, четвертый был бы съеден, так как эта папка была смонтирована через мой sshfs ~. С тех пор я гораздо осторожнее с такими вещами.

2
Michał Šrajer

Here is a great document for you. You will find a load of practical tips there.

BTW, there are two groups of people:

  1. those who do backups
  2. those who will do backups

Congratulations, you just promoted yourself to group 2. ;-)

2
dotancohen

Если у вас открыто приложение, которое в данный момент читает файл, такое как VLC или LibreOffice, то этот потрясающий ответ L & U.SO помог мне выйти из этого беспорядка. Вот альтернативный способ сделать то же самое.

Основная идея заключается в том, чтобы найти ссылку /proc/PID/fd/DESCRIPTOR_NUMBERи скопировать ее обратно в исходное местоположение. Используйте, ps aux | grep APP_NAMEчтобы найти PID, а затем ls -la /proc/PID/fd/найти правильный DESCRIPTOR_NUMBER.

Похожие вопросы