Восстановление открытого удаленного из системы файла на FreeBSD

Восстановить файл, который в системе удален, но еще открыт каким-то процессом, можно при помощи набора утилит Sleuth Kit (www.sleuthkit.org).

1. нужно узнать номер иноды, которую имеет удаленный открытый файл:

~> lsof +aL1 /

Вместо / нужно указать раздел, где был файл (или поочередно запускать на все разделы, если не знаете, в каком находится открытый файл. Пример вывода:

~> lsof +aL1 /home
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NLINK NODE NAME
less    29154 root    4r  VREG   0,87        8     0 33043586 /home (/dev/ad0p7)

2. используйте утилиту icat, которая откроет файл по номеру иноды:

~> icat -r /dev/ad0p7 33043586 > /path/to/new-filename

Если вы знаете имя каталога, где открыт файл, его имя можно получить непосредственно из каталога (пока файл открыт и не удален окончательно):

cat /home/work | strings

/home/work — это каталог. Но из полученной белиберды еще нужно удалить символы вида “^X” и имена существующих файлов. Более элегантный способ:

~> ls -1ai /home/
33044046 work/

~> fls -dF /dev/ad0p7 33044046
r/r * 33043586(realloc):        testme

В первой команде я узнал номер иноды каталога /home/work, затем вывел все удаленные файлы. testme – тот самый удаленный файл, открытый в less’е.

/home/ports/sysutils/sleuthkit
/home/ports/sysutils/lsof

Теги: , , , , , , ,