web-dev-qa-db-ja.com

Unix / Linuxで削除されたファイルの復元/復元

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

$ rm -rf /path/to/myfile

myfileを回復するにはどうすればよいですか?そのようなツールがある場合、どのように使用できますか?

130
pylover

誰かがコメントで提供したリンクは、おそらくあなたの最高のチャンスです。

Linux debugfs Hack:Undelete Files

少し威圧的に見えても、その記事は実際にはかなり簡単です。一般的な手順は次のとおりです。

  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. ファイルのiノードを決定する

    ...
    ...
    ....
    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. 上記のiノード情報で次のコマンドを実行します

    # 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ファイルを復元する方法

71
slm

少しチャンスがありますが、このスクリプトまたは答えの次の解決策で削除されたファイルを回復できることがあります:

#!/bin/bash

if [[ ! $1 ]]; then
    echo -e "Usage:\n\n\t$0 'file name'"
    exit 1
fi

f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')

if [[ $f ]]; then
    echo "fd $f found..."
    cp -v "$f" "$1"
else
    echo >&2 "No fd found..."
    exit 2
fi

別の便利なトリックがあります。削除したファイルのパターンがわかっている場合は、次のように入力します。 alt+sys+resuo 読み取り専用で再起動+再マウントし、次にライブCDでgrepを使用してハードドライブを検索します。

grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover

次に、/tmp/recoverを編集して、以前のファイルのみを保持します。

ねえ、もしもunixの哲学がすべてファイルなら、これを利用する時が来たのではないか。

31
Gilles Quenot

Arch (テキストファイルのみに適用されます)

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

どこ /dev/sdXNは失われたファイルを含むパーティションです(不明な場合はmountで確認してください)。

少し時間がかかりますが、まだコミットしていないソースコードを誤って削除してしまった場合は、うまくいきました。

25
William Becker

この質問は数年前に解決されましたが、 testdisk ユーティリティについて言及したいと思います。

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

12
S. Wilhelm

先週も同じ問題があり、debugfs、photorec、ext3grep、extundeleteなどの多くのプログラムを試しました。 ext3grepは、ファイルを回復するための最良のプログラムでした。構文は非常に簡単です。

ext3grep image.img --restore-all

または:

ext3grep /dev/sda3 --restore-all --after `date -d '2015-01-01 00:00:00' '+%s'` --before `date -d '2015-01-02 00:00:00' '+%s'`

このビデオ は、役立つ小さなチュートリアルです。

6
Juan

別の方法として、delの代わりにrmを使用して削除することもできます。

http://fex.belwue.de/fstools/del.html

delには、元に戻す機能があり、任意のファイルシステムで動作します。

もちろん、「囚人を連れて行かない」rmでファイルをすでに削除している場合は、解決策ではありませんrm:-}

6
Framstag

回復ツール-コマンドライン:

回復ツール-Gui:

情報:

私の個人的な経験では、ufs-Explorerとphotorecを使用してデータを取り戻します

(1)=オープンソースではない、無料ではない

(2)=オープンソースではない、無料

(3)=オープンソースで無料

(4)= NTFSをサポートする

(5)=ディレクトリ構造機能がある

5
intika

外部インターフェースを介してドライブを接続します

  1. mount
  2. umount /dev/{sd*}
  3. extundelete --restore-all /dev/{sd*}
  4. 結果は、ブートドライブのホームフォルダーに移動します
  5. ボーナスポイント:このためのGUIを作成

詳細については、このリンクを参照してください: extundelete を使用して、ext4で削除されたばかりのファイルの削除を取り消します。

5
GRZ

それは不可能であり、非常に非常に困難であることに同意しません。また、Linuxでこれを実行したこともありません。

ファイルが削除されても、実際には削除されません。何が起こるかというと、ハードドライブ上にあったスペースはリセットのようなものなので、コンピュータがそこにデータを書き込もうとしても、何も問題はありません。一般に、削除したと思ったハードドライブ上のデータは、ほぼ1年後に存在する可能性があります。または、少なくとも、これはWindowsマシンでの私の経験です。 Linuxのコマンドラインから同じように機能するかどうかはわかりませんが、そのようなパーティションを開くには別のLive CDが必要になる可能性があり、ファイルがまだ存在する保証もありません。私はこれをWindows XPでZero Assumption Recoveryを使用して数回実行しました。よく見ると、同じようなツールがあると思います。

1
Roguebantha

これにより、一部のユーザーのトラブルを回避できる場合があります。
geditを使用してそのファイルを編集したことがある場合、デフォルトでそのファイルのコピーが作成されます。
たとえば、誤って「myfile.txt」を削除したとしましょう。
削除したファイルが含まれていたフォルダーで、次のコマンドを使用すると、そこからコピーを復元できます。
ls | grep 'myfile.txt~'
少し運が良ければ、それを見つけてから:
cp 'myfile.txt~' 'myfile.txt'
たった今この方法でファイルを復元しました。がんばって!

0
ntt

ファイルを削除すると、そのファイルのiノードテーブルのリンク数が1つ減ります。 Unixでは、リンクカウントが0に下がると、そのファイルのデータブロックは空きとしてマークされ、通常、それらのデータブロックへの参照は失われます。 @fedorquiのコメントから、これらのブロックにアクセスする方法がいくつかある可能性があることを発見しましたが、これはext3ファイルシステムにのみ適用できます。

ファイルを保存する1つの方法は、ファイルをゴミ箱の領域に移動できる関数を作成することです($HOME/.trash)そしてそこから必要なファイルを回復します。この関数はrmのエイリアスにすることができます。 cronジョブをスケジュールして、特定の日数の間ごみ箱領域にあるファイルを削除することができます。

0
unxnut