В Linux нет «корзины» для команды rm: файл исчезает сразу. Но данные физически остаются на диске, пока их не перезапишут, поэтому шанс на восстановление есть. Главное, правильно действовать в первые минуты.
Первое правило: ничего не записывать
Как только поняли, что удалили нужное:
- Прекратите любую запись на этот раздел.
- Если можно, отмонтируйте его или перемонтируйте только для чтения:
sudo mount -o remount,ro /dev/sdX1. - Если это системный диск, выключите компьютер и загрузитесь с live-флешки.
- Восстановленные файлы сохраняйте на другой диск.
Если файл ещё открыт каким-то процессом, его можно вытащить без утилит:
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.