削除されたファイルを復元/削除解除するコマンドはありますかrm
?
rm -rf /path/to/myfile
どのように回復できますかmyfile
?これを行うためのツールがある場合はどうすればよいですか?
答え1
コメントに誰かが提供したリンクが最高の機会になる可能性があります。
Linux debugfs ハッキング: 削除されたファイルの回復
この記事は多少脅威的に見えるかもしれませんが、実際には理解するのはとても簡単です。通常、ステップは次のとおりです。
debugfsを使用したファイルシステムログの表示
$ debugfs -w /dev/mapper/wks01-root
debugfsプロンプトで
debugfs: lsdel
サンプル出力
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.
debugfsでコマンドを実行する
debugfs: logdump -i <7536655>
ファイル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.
上記の 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
不明な場合は確認)。
少し時間がかかりましたが、まだコミットしていないいくつかのソースコードを誤って削除したときに動作しました!