Linuxで削除されたファイルの回復

Linuxで削除されたファイルの回復

削除されたファイルを復元/削除解除するコマンドはありますかrm

rm -rf /path/to/myfile

どのように回復できますかmyfile?これを行うためのツールがある場合はどうすればよいですか?

答え1

コメントに誰かが提供したリンクが最高の機会になる可能性があります。

Linux debugfs ハッキング: 削除されたファイルの回復

この記事は多少脅威的に見えるかもしれませんが、実際には理解するのはとても簡単です。通常、ステップは次のとおりです。

  1. debugfsを使用したファイルシステムログの表示

     $ debugfs -w /dev/mapper/wks01-root
    
  2. debugfsプロンプトで

     debugfs: lsdel
    
  3. サンプル出力

     Inode  Owner  Mode    Size    Blocks   Time deleted
     23601299      0 120777      3    1/   1 Tue Mar 13 16:17:30 2012
     7536655      0 120777      3    1/   1 Tue May  1 06:21:22 2012
     2 deleted inodes found.
    
  4. debugfsでコマンドを実行する

     debugfs: logdump -i <7536655>
    
  5. ファイルinodeの決定

     ...
     ...
     ....
     output truncated
         Fast_link_dest: bin
         Blocks:  (0+1): 7235938
       FS block 7536642 logged at sequence 38402086, journal block 26711
         (inode block for inode 7536655):
         Inode: 7536655   Type: symlink        Mode:  0777   Flags: 0x0   Generation: 3532221116
         User:     0   Group:     0   Size: 3
         File ACL: 0    Directory ACL: 0
         Links: 0   Blockcount: 0
         Fragment:  Address: 0    Number: 0    Size: 0
         ctime: 0x4f9fc732 -- Tue May  1 06:21:22 2012
         atime: 0x4f9fc730 -- Tue May  1 06:21:20 2012
         mtime: 0x4f9fc72f -- Tue May  1 06:21:19 2012
         dtime: 0x4f9fc732 -- Tue May  1 06:21:22 2012
         Fast_link_dest: bin
         Blocks:  (0+1): 7235938
     No magic number at block 28053: end of journal.
    
  6. 上記の inode 情報を使用して、次のコマンドを実行します。

     # dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
     # file recovered.file.001
     file: ASCII text, with very long lines
    

ファイルがに復元されましたrecovered.file.001

その他のオプション

photorec上記の方法で問題が解決しない場合は、過去にファイルの回復などのツールを使用していましたが、画像ファイルでのみ機能しました。私は私のブログの次の記事でこのアプローチを広く扱っています。

Fedora / CentOS / RHELのデジタルカメラSDDカードから破損したjpegとmovファイルを回復する方法

答え2

削除されたファイルで非常に特定のパターンがわかっている場合は、ハードgrepドライブで検索を使用します(おそらくクリップボードをブラウズして貼り付けた行を検索するか、 愚か):

grep -a -C 300 -F 'known fixed string in deleted file' /dev/sda > ~/recover

~/recover次に、以前に編集したファイルの内容のみを保持するように編集します。そして例を挙げてください編集者様、簡単な作業です。

ねえ、Unixの哲学ですべてがファイルであれば、それを活用する必要がある時期になったのではないでしょうか?

説明する

  • -aバイナリデータもgrepするように設計されています
  • -C<NUM>出力コンテキストを指定する行各試合前後文字列を使用して-B<NUM>行を含めることができます。毎試合前または行が-A<NUM>含まれています各ゲーム終了後代わりに
  • -F固定文字列

F潜在的に残っているファイル記述子を使用する別のアプローチD

時には、以下を使用して削除されたファイルを回復する可能性があります。

#!/bin/bash

export LANG=C

if [[ ! $1 || $1 == -h || $1 == --help ]]; then
    echo -e "Usage:\n\n\t$0 '[path/]<file name>'"
    exit 1
fi

files=(
    $(file 2>/dev/null /proc/*/fd/* |
        grep "(deleted)'$" | 
        sed -r 's@(:.*broken\s+symbolic\s+link\s+to\s+.|\(deleted\).$)@ @g' |
        grep "$1" |
        cut -d' ' -f1
    )
)

if [[ ${files[@]} ]]; then
    for f in ${files[@]}; do
        echo "fd $f match... Try to copy this fd to another place quickly!"
    done
else
    echo >&2 "No matching fd found..."
    exit 2
fi

答え3

私に合うのは次の人が作る。アーチ(テキストファイルのみ):

grep -a -C 200 -F 'Unique string in text file' /dev/sdXN

/dev/sdXN欠落しているファイルを含むパーティションはどこにあります(mount不明な場合は確認)。

少し時間がかかりましたが、まだコミットしていないいくつかのソースコードを誤って削除したときに動作しました!

答え4

この問題が解決され、数年間続いたにもかかわらず、私は次のように言及したいと思います。テストディスク便利です。

testdiskを使用してファイルを回復する方法このチュートリアル。ファイルを回復するには、testdisk /dev/sdXパーティションテーブルタイプを実行して選択します。次に、を選択して[ Advanced ] Filesystem Utilsパーティションを選択し、を選択します[Undelete]。これで、削除されたファイルを見つけて選択し、ファイルシステムの別の場所にコピーできます。

関連情報