The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Как быстро восстановить в Linux удаленный, но еще открытый файл
Если файл был случайно удален, но он еще открыт на чтение в какой-либо программе
(например, проигрывается в медиа-плеере), то его легко восстановить из
файлового дескриптора в ФС /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
 
26.02.2009
Ключи: undelete, proc, file, recover / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Диски и файлы / Диагностика и Восстановление после сбоя

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (1), 23:37, 26/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Каким образом можно удалить открытый файл?
    Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы с использованием разных средств (консольные и графические программы и команды).
     
     
  • 2.2, ТовариЩ (?), 00:50, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Каким образом можно удалить открытый файл?
    >Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
    >с использованием разных средств (консольные и графические программы и команды).

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

     
     
  • 3.4, daevy (?), 06:18, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Каким образом можно удалить открытый файл?

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

     
     
  • 4.22, dry (?), 10:19, 04/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Веселый хак, пятерка.
    А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.
     
     
  • 5.23, const86 (ok), 14:45, 06/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.

    Где дыра?

     
     
  • 6.24, Дроздилло (?), 13:22, 26/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Где дыра?

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

     
  • 2.5, BAXMAH (?), 07:52, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Каким образом можно удалить открытый файл?

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

     
     
  • 3.8, terr0rist (??), 11:54, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    +5
    А как называется этот хардлинк и где он находится - в UNIX(!)?
    И ещё покажите, где находится этот TFM, где это написано?
     
     
  • 4.9, allez (ok), 12:55, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >А как называется этот хардлинк и где он находится - в UNIX(!)?
    >И ещё покажите, где находится этот TFM, где это написано?

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

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

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

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

     
     
  • 5.19, лук репчатый (?), 19:34, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и где из написанного следует, что "RTFM, в UNIX открытие файла - это создание хардлинка на него" ?
     
     
  • 6.21, Дмитрий Ю. Карпов (?), 17:39, 01/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Разница в том, что когда на файл создаётся хардлинк, счётчик ссылок в inode увеличивается. А при открытии файла счётчик ссылок в inode остаётся прежним, и механизм удержания файла по эту сторону бытия немного иной.

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

     
  • 4.12, Аноним (1), 00:01, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Я - юзер, а не программер. Статья хорошая, спасибо! Только её здорово бы было расширить... Иначе это не статья, а заметка. Сейчас из-за конкурса будет много Статей, и эта заметка в них затеряется и скоро забудется, а статья не забудется. Вот то, что я хотел сказать первым комментарием.
     
  • 3.20, pavlinux (ok), 16:16, 01/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А сетевой файло тоже хардлик ??? :)

     
  • 2.6, kerzol (?), 09:01, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Каким образом можно удалить открытый файл?
    >Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
    >с использованием разных средств (консольные и графические программы и команды).

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

     
     
  • 3.7, daevy (?), 09:52, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>Каким образом можно удалить открытый файл?
    >
    >да и без рута можно :)

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

     
     
  • 4.11, const86 (ok), 22:11, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    никак не связанные с тем, используется ли кем-нибудь удаляемый файл.
     

  • 1.3, ононим (?), 01:14, 27/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо, полезная заметка
     
  • 1.10, Heckfy (ok), 15:36, 27/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличный совет.
    Единственная проблема - создается новый файл. А вот бы при этом была возможность добавить новую (и единственную) жесткую ссылку на файл. :-)
     
  • 1.13, Аноним (1), 00:05, 28/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Только новые вопросы создал. А если на диске 0 байт и я удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё равно не могу записывать? А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет?
     
     
  • 2.14, angra (ok), 02:09, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Только новые вопросы создал. А если на диске 0 байт и я
    >удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё
    >равно не могу записывать?

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

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

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

     
  • 2.18, LS (ok), 07:09, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Только новые вопросы создал. А если на диске 0 байт и я

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

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

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

    вперед!

     

  • 1.25, ильзат (?), 09:13, 04/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а можно ли востановить текст набранный но не сохраненый! комп отключился! операционная стстема люникс?
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру