Как восстановить удалённые файлы в Linux: TestDisk, PhotoRec, extundelete и safecopy

В Linux нет «корзины» для команды rm: файл исчезает сразу. Но данные физически остаются на диске, пока их не перезапишут, поэтому шанс на восстановление есть. Главное, правильно действовать в первые минуты.

Первое правило: ничего не записывать

Как только поняли, что удалили нужное:

  1. Прекратите любую запись на этот раздел.
  2. Если можно, отмонтируйте его или перемонтируйте только для чтения: sudo mount -o remount,ro /dev/sdX1.
  3. Если это системный диск, выключите компьютер и загрузитесь с live-флешки.
  4. Восстановленные файлы сохраняйте на другой диск.

Если файл ещё открыт каким-то процессом, его можно вытащить без утилит:

lsof | grep deleted
cp /proc/PID/fd/НОМЕР /tmp/restored-file

Почему данные теряются

  • случайный rm или rm -rf не в той папке;
  • форматирование или переразметка не того диска;
  • сбой файловой системы после отключения питания;
  • физический износ диска;
  • вредоносные программы.

Safecopy: копия с повреждённого диска

Если диск сыплется, сначала снимите с него образ, а восстанавливайте уже из образа. Safecopy читает даже повреждённые сектора и не сдаётся на первой ошибке:

sudo apt install safecopy
sudo safecopy /dev/sdX /mnt/backup/disk.img

Похожая и более популярная утилита, ddrescue (пакет gddrescue).

TestDisk: разделы и файловые системы

TestDisk восстанавливает потерянные разделы и загрузочные секторы, а для некоторых файловых систем (FAT, NTFS, ext2) умеет возвращать удалённые файлы.

sudo apt install testdisk
sudo testdisk

Интерфейс текстовый, по шагам: выбираете диск, тип таблицы разделов, затем «Analyse» для поиска разделов или «Advanced», потом «Undelete» для файлов.

PhotoRec: поиск файлов по сигнатурам

PhotoRec идёт в комплекте с TestDisk и ищет файлы по их внутренней структуре, не опираясь на файловую систему. Он находит фото, документы, архивы и сотни других форматов даже после форматирования. Минус в том, что имена файлов и папки не сохраняются.

sudo photorec

extundelete: для ext3 и ext4

Утилита читает журнал файловой системы и восстанавливает файлы с именами. Работает только на отмонтированном разделе:

sudo apt install extundelete
sudo extundelete /dev/sdX1 --restore-all

Результат появится в папке RECOVERED_FILES. На современных ext4 шансы ниже, чем раньше, но попробовать стоит.

Как не попасть в эту ситуацию

  • Делайте резервные копии: rsync, restic, borg или снапшоты у хостинга. Хранилище для бэкапов можно взять, например, S3 от Beget.
  • Используйте trash-cli вместо rm для повседневной работы.
  • Важные разделы держите на файловых системах со снимками, например Btrfs или ZFS.
  • Следите за здоровьем дисков через smartctl.

Для шифрованных разделов восстановление сложнее, о них в заметке о LUKS.

Источники и ссылки


Комментарии загружаются…