GNU/Linux >> Linux の 問題 >  >> Linux

何らかのプロセスによってまだ開かれている場合、削除されたファイルを回復する方法は?

... 特定の時間にコピーする (そしてファイルのコンテンツのその時点のスナップショットのみを収集する) よりも優れているのは、"tail -f" です。 " そのファイルを新しいファイルに:

<ブロック引用>

tail -c +0 -f /proc/PIDofProgram>/fd/# > /new/path/to/file

(tail の慎重なプログラマーのおかげで、バイナリ出力でも動作します。)

実行時に tail -f 自体はファイルを開いたままにして、元のプログラムが終了したときにファイルがディスクから削除されるのを安全に防ぎます。したがって、tail -f を停止しないでください。 元のプログラムが終了した直後 - 末尾の /new/path/to/file を確認してください まずかどうか あなたが欲しいもの。そうでない場合 (またはその他の理由で満足できない場合) は、元のファイルをもう一度コピーできますが、今回は すべての書き込みは「プログラム」によって終了し、まだ実行中の tail -f から の /proc/PIDoftail/fd/ ディレクトリ。


/home が NFS の場合、アクセス/コピーできる .nfsNNNNNNNNNN ファイルが /home/vi にあります。ホームがローカル ファイルシステムの場合、/proc/PID/fd/3 リンクから同じことができるはずです:

cp /proc/PID/fd/3 /tmp/recovered_file

実際にファイルの削除を取り消したい場合は、この件に関するブログ投稿をご覧ください。


lsof を使用して inode 番号を見つけ、debugfs を使用してそれへのハード リンクを再作成します。例:

# lsof -p 12345 | grep /var/log/messages
syslogd 12345 root    3w   REG                8,3    3000    987654 /var/log/messages (deleted)
# mount | grep var
/dev/sda2 on /var type ext3 (rw)
# debugfs -w /dev/sda2
debugfs: cd log
debugfs: ln <987654> tmp
debugfs: mi tmp
                      Mode    [0100600] 
                   User ID    [0] 
                  Group ID    [0] 
                      Size    [3181271] 
             Creation time    [1375916400] 
         Modification time    [1375916322] 
               Access time    [1375939901]
             Deletion time    [9601027] 0
                Link count    [0] 1
               Block count    [6232] 
                File flags    [0x0] 
...snip...
debugfs:  q
# mv /var/log/tmp /var/log/messages
# ls -al /var/log/messages
-rw------- 0 root root 3301 Aug  8 10:10 /var/log/messages

あなたが文句を言う前に、私は今手元に削除されたファイルを持っていないので、私は上記のトランスクリプトを偽造しました;-)

mi を使用しています 削除時間とリンク数を適切な値 (それぞれ 0 と 1) にリセットしますが、正しく機能しません - ls でリンク数がゼロのままであることがわかります .カーネルが inode データをキャッシュしている可能性があると思います。安全のために、debugfs を使用した後は、できるだけ早い機会に fsck を実行する必要があります。

私の経験では、一時ファイル名を使用してリンクを作成し、適切な名前に変更する必要があります。元のファイル名に直接リンクすると、ディレクトリが破損するようです。 YMMV!

  • http://glandium.org/blog/?p=87
  • http://www.cyberciti.biz/tips/linux-ext3-ext4-deleted-files-recovery-howto.html

Linux
  1. 誤って削除されたファイルを回復しますか?

  2. Linux –ファイルの作成日を見つける方法は?

  3. 削除されたファイルを回復しますか?

  1. CentOS / RHEL :削除された /etc/passwd ファイルから回復する方法

  2. Linux で削除されたファイルを復元するには?

  3. Unix/Linux 削除されたファイルの復元/回復

  1. ファイルを作成しているプロセスを特定する方法は??

  2. Rm後にXfsデータを回復する方法は?

  3. ケイトがクラッシュした後に回復する方法は?