URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 49985
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Как быстро восстановить в Linux удаленный, но еще открытый файл"

Отправлено auto_tips , 26-Фев-09 23:37 
Если файл был случайно удален, но он еще открыт на чтение в какой-либо программе
(например, проигрывается в медиа-плеере), то его легко восстановить из файлового дескриптора в ФС /proc

Предположим мы случайно удалили файл 1.mp3, который еще проигрывается в mplayer.
Ищем PID процесса mplayer

   ps -auxwww|grep mplayer

   gosha  17314  3.2  0.4  38680  8908 pts/3  SL+ 00:45 0:00 mplayer 1.mp3

Переходим в директорию с параметрами процесса 17314 в /proc:
  
   cd /proc/17314

Открытые файловые дескрипторы перечислены в директории fd (/proc/17314/fd).

   cd fd
   ls -al

В выводе видим дескриптор номер 4 с признаком deleted
   lr-x------ 1 gosha gosha 64 2009-02-27 00:48 4 -> /home/gosha/1.mp3 (deleted)

Копируем его и получаем восстановленный файл:
  
   cp 4 /home/gosha/1.mp3

URL:
Обсуждается: http://www.opennet.ru/tips/info/1960.shtml


Содержание

Сообщения в этом обсуждении
"Как быстро восстановить в Linux удаленный, но еще открытый файл"
Отправлено Аноним , 26-Фев-09 23:37 
Каким образом можно удалить открытый файл?
Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы с использованием разных средств (консольные и графические программы и команды).

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено ТовариЩ , 27-Фев-09 00:50 
>Каким образом можно удалить открытый файл?
>Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
>с использованием разных средств (консольные и графические программы и команды).

Вот и займтесь этим!


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено daevy , 27-Фев-09 06:18 
>Каким образом можно удалить открытый файл?

под рутом, удалит и не поперхнется... тут же вспомнил свой первый и последний эксперимент с rm -rf /


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено dry , 04-Мрт-09 10:19 
Веселый хак, пятерка.
А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено const86 , 06-Мрт-09 14:45 
>А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.

Где дыра?


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено Дроздилло , 26-Ноя-09 13:22 
>Где дыра?

У него в голове дыра и там поселился выводок дроздов


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено BAXMAH , 27-Фев-09 07:52 
>Каким образом можно удалить открытый файл?

RTFM, в UNIX открытие файла - это создание хардлинка на него. При удалении файла удаляется хардлинк, созданный в файловой системе, а сам файл физически удаляется, когда будет удален последний хардлинк на него (то есть тот, который создан при открытии файла).


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено terr0rist , 27-Фев-09 11:54 
+5
А как называется этот хардлинк и где он находится - в UNIX(!)?
И ещё покажите, где находится этот TFM, где это написано?

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено allez , 27-Фев-09 12:55 
>А как называется этот хардлинк и где он находится - в UNIX(!)?
>И ещё покажите, где находится этот TFM, где это написано?

Можете глянуть, например, сюда: http://www.linuxcenter.ru/lib/books/posixbook/ch08.phtml#3
Если же по ссылкам ходить лениво, то по случаю благодушного пятничного настроения приведу вам
отрывок. :-)

==============================================================================
удаление файлов в Unix происходит совершенно иначе, чем в DOS/Windows. А именно, файл считается
удаленным, когда уничтожены все имена, ссылающиеся на идентификатор данного inode (то есть файл
исключен из файловой системы), и закрыта последняя программа, к нему обращающаяся (то есть
завершен процесс, загрузивший данные файла в память, и уничтожен индексный дескриптор файла в
этом процессе). В описании атрибутов файла это выражается в том, что счетчик ссылок его inode
обнуляется. Разумеется, сами по себе данные, составляющие содержание файла, физически могут
продолжать существовать на диске, но для системы они уже недоступны. А поскольку содержание
файла оторвано от его имени, восстановление случайно удаленного файла по фрагменту имени (на чем
основаны DOS-утилиты типа UNERASE и UNDELETE) оказывается невозможным.

Пока любой файл открыт, то есть существует ссылающийся на него процесс, он продолжает
существовать, даже если имя его исключено из всех каталогов, и может быть записан, скопирован,
переименован, и т.д. То есть открытый каким либо процессом дескриптор данного файла - гарантия его
существования, по крайней мере до завершения процесса. Именно поэтому я ранее сказал, что файл не
обязательно имеет имя: в случае удаления открытого файла из каталога он некоторое время существует
как бы безымянным, для поддержания его бытия достаточно открытого дескриптора, ассоциированного с
inode.
==============================================================================

Захотите еще информации - тут уж не обессудьте, ищите сами. :-)


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено лук репчатый , 28-Фев-09 19:34 
Ну и где из написанного следует, что "RTFM, в UNIX открытие файла - это создание хардлинка на него" ?

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено Дмитрий Ю. Карпов , 01-Мрт-09 17:39 
Разница в том, что когда на файл создаётся хардлинк, счётчик ссылок в inode увеличивается. А при открытии файла счётчик ссылок в inode остаётся прежним, и механизм удержания файла по эту сторону бытия немного иной.

Для размышления: попробуйте открыть и удалить файл в файловой системе, не поддерживающей хардлинки (например, в FAT).


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено Аноним , 28-Фев-09 00:01 
Я - юзер, а не программер. Статья хорошая, спасибо! Только её здорово бы было расширить... Иначе это не статья, а заметка. Сейчас из-за конкурса будет много Статей, и эта заметка в них затеряется и скоро забудется, а статья не забудется. Вот то, что я хотел сказать первым комментарием.

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено pavlinux , 01-Мрт-09 16:16 
А сетевой файло тоже хардлик ??? :)


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено kerzol , 27-Фев-09 09:01 
>Каким образом можно удалить открытый файл?
>Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
>с использованием разных средств (консольные и графические программы и команды).

да и без рута можно :)


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено daevy , 27-Фев-09 09:52 
>>Каким образом можно удалить открытый файл?
>
>да и без рута можно :)

можно, но не всегда;) нередки таинственные письмена Permission Denied %)


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено const86 , 27-Фев-09 22:11 
никак не связанные с тем, используется ли кем-нибудь удаляемый файл.

"Как быстро восстановить в Linux удаленный, но еще открытый файл"
Отправлено ононим , 27-Фев-09 01:14 
спасибо, полезная заметка

"Как быстро восстановить в Linux удаленный, но еще открытый файл"
Отправлено Heckfy , 27-Фев-09 15:36 
Отличный совет.
Единственная проблема - создается новый файл. А вот бы при этом была возможность добавить новую (и единственную) жесткую ссылку на файл. :-)

"Как быстро восстановить в Linux удаленный, но еще открытый файл"
Отправлено Аноним , 28-Фев-09 00:05 
Только новые вопросы создал. А если на диске 0 байт и я удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё равно не могу записывать? А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет?

"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено angra , 28-Фев-09 02:09 
>Только новые вопросы создал. А если на диске 0 байт и я
>удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё
>равно не могу записывать?

При удалении все еще открытого файла количество свободного места не меняется. Ситуация кстати очень нередкая.

>А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет?

Размонтировать диск пока он используется не получится. Если же ССЗБ  и вытащишь без размонтирования, то состояние файловой системы будет непредсказуемым, вплоть до разрушения.


"Как быстро восстановить в Linux удаленный, но еще открытый ф..."
Отправлено LS , 28-Фев-09 07:09 
>Только новые вопросы создал. А если на диске 0 байт и я

а на каком разделе?

>удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё
>равно не могу записывать? А если я вытащу съёмный диск, могу
>ли я проигрываемый с него файл восстановить так же, или нет?
>

как не можешь? можешь. sync никто не отменял.

вперед!


"Как быстро восстановить в Linux удаленный, но еще открытый файл"
Отправлено ильзат , 04-Ноя-10 09:13 
а можно ли востановить текст набранный но не сохраненый! комп отключился! операционная стстема люникс?