Linuxで削除されたファイルを回復する方法は?


65

誤って、rm削除したくないファイルを使用しました。Linuxで元に戻す方法はありますか?


@Nav rmは、「危険な」UNIX / Linuxコマンドです(読み取り$ man rm)。細心の注意を払って使用してください。そうは言っても、確実なファイルを簡単に削除する方法です。最新のLinuxおよびUnixデスクトップ環境では、「ごみ箱」のソリューションが提供されているため、ユーザーは誤って削除したファイルを簡単に回復できます。
ホセエレラ

1
いくつかのより多くの最新の回答:unix.stackexchange.com/questions/122305/...
ベン・クローウェル

あなたの代わりに、「RM-ゴミ」ユーティリティ.USE将来のファイルを復元したい場合は、「RM」を使用しないでください。 github.com/nateshmbhat/rm-trash
NateshをBHAT

回答:


51

以下は、テキストファイルを回復する一般的な手順です。

  1. 最初にwallコマンドを使用して、システムがシングルユーザーモードでダウンしていることをユーザーに伝えます。

    # wall
    System is going down to .... please save your work.
    

    Ctrlキーを押しながらDキーを押してメッセージを送信します。

  2. 次に、init 1コマンドを使用して、システムをシングルユーザーモードにします。

    # init 1
    
  3. grep(従来のUNIXの方法)を使用してファイルを回復する

    次のgrep構文を使用します。

    grep -b 'search-text' /dev/partition > file.txt
    

    または

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    どこ、

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    / dev / sda1の「nixCraft」という単語で始まるテキストファイルを復元するには、次のコマンドを試してください。

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. 次に、viを使用してfile.txtを表示します。

    このメソッドは、削除されたファイルがテキストファイルである場合にのみ役立ちます。ext2ファイルシステムを使用している場合は、recoverコマンドを試してください。

で発見http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html


16
このリモートでシングルユーザーモードがネットワークをオフにできないことは注目に値する
Quinma

1
この方法は、テキストファイルに対して驚くほど機能します、ありがとう!私が気に入っているのは、ファイルシステムのジャーナル(extundeleteなど)に依存していないことですが、実際にはドライブ全体の未加工バイトを代わりにスキャンします。このコマンドでファイルが見つからない場合、何も見つかりません。
ベンジャミン

1
@Quinma、このメソッドわずかな変更を加えるだけでリモートで動作できます...を実行する代わりにinit 1、を除くすべてのシステムデーモンを手動で強制終了しますsshd。また、この時点で、すべてのファイルシステムROを再マウントし、tmpfsに保存して(一時ファイルがRAMに収まると仮定して)、一時データでファイルを上書きしないようにする必要があると思います。もちろん、後でリモートサーバーにコピーするか、RWを再マウントしてからローカルファイルシステムにコピーする必要があります。
トーマスギヨ-シオンネスト

your_partitionとは?エラーがあります:/ dev / sda1:そのようなファイルまたはディレクトリがありません
coolcool1994

1
@Qback、私は本当に知りません。述べたように、私はステップバイステップで従っただけです。ただし、init 1は管理タスク用であり、そのランレベルシナリオに関係しないプロセスを強制終了することもできます。これは、ハードディスクの使用を防ぎ、回復しようとしているファイルを上書きするのに役立ちます。
ガブリエルL.オリベイラ

13
  • それが非常に重要な場合は、コンピューターからディスクを取り出し、会社に雇ってあなたのためにやってもらいます。
  • 非常に重要な場合は、ディスクを読み取り専用でマウントし、を使用してパーティション全体をファイルにコピーし、その中のファイルをdd見つけようとします(grep、またはエディターを使用)。

編集:時々ddrescueよりもうまく動作しますdd


1
「その中のファイルを見つけてみてください」と混乱しています。15GB以上のファイルを合理的に開いて、この獣をgrepに検索またはパイプする方法を教えてください。テキストを見つけたらどうしますか?この回復はいったいどうですか?
TheLQ

1
最初にすることは、不確実な結果のために多くの現金を燃やす前に、いくつかの一般的なツールを試すことです。ところで、grepは本当に役に立ちません、photorecまたはext3grepは役立ちます。
wazoox



5
  • 唯一の正しい答えは、バックアップからファイルを復元することです。誰もがバックアップが必要です。本当に重要なファイルについては、2つのバックアップが必要です。しませんか?さて、あまりにも悪い、学んだ教訓はここにあります(耳障りに聞こえますが、私はデータストレージに携わっています。重要なデータを失うまで人々はバックアップしません。それは確かに事実です。他のほぼ全員も同様です)。

  • OK、バックアップはありません。ファイルRIGHT NOWを含むファイルシステムの使用を停止する必要があります。書き込みアクティビティは、ディスク上に残る可能性がある(のみ可能性がある)ファイルデータを確実に消費します。

  • ルートファイルシステムと/ homeの両方として1つのパーティションのみを使用するという悲劇的なエラーを起こした場合、他のデバイスから起動する必要あります。

  • ファイルが一般的な形式(Wordファイル、JPGなど)の場合、Photorecを使用します。Photorecは、最も一般的なファイル形式を取得できます。

  • 以前に提案された「ext3 undelete」メソッドを試すことができますが、コマンドラインに慣れ、基本的なLinuxの内部動作などを理解する必要があります。

  • ファイルが特別な形式である場合、運が悪い。ドライブをスキャンしていくつかの特別なファイルを探すPerlプログラムを書いたことがありますが、かなりうまくいきました。ただし、そのためにはプログラミングを知っておく必要があり、Linuxでも非常に安心します。


5

数年前にこれをやった。私のアプローチは、パーティションを直接マウントし、失う時間をなくし、パーティションをアンマウントしてから、

dd if=/dev/hda1 of=backup_image.ext3

パーティションの正確な状態のバックアップファイルを作成します。その後、パーティションを再度マウントし、作成したイメージで削除されたファイルを検索しながら、通常どおりビジネスを続行できます。すべての「空の」スペースが必要なため、画像はおそらく非常に大きくなります。そのため、画像を保存することは実用的な問題になる可能性があります。

それから、パーティションコンテンツのスープのどこかにいると予想したテキストスニペットの後に退屈な検索を実行するだけでした。例えば、.tex-ファイルを見つけるために、私は走りました

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

「サブセクション」というフレーズの周りに大きなコンテキストを出力し、出力をファイルに保存して、手動で検索できるようにしました。画像を検索するのに非常に長い時間がかかったため、必要以上に何度も実行したくないため、非常に大きなコンテキストを印刷しました。

また、このコマンドstringsは出力からバイナリガベージを削除するのに役立ちましたが、正しく思い出せば、すべての改行も削除され、問題になる可能性があります。

同じ方法でバイナリファイルを見つけるには、特徴的なヘッダーまたは特定のファイルの何かを見つけることに成功するかもしれませんが、それはかなり大きな冒険だと思います。


簡単なテクニカルノート:ディスクの回復とExt3 / 4には技術的な問題があります。説明するのは長いですが、簡単に(そして不適切に):Ext3 / 4は、ファイルを削除するときにディスク上のファイルの場所をOSに伝える「マーカー」を削除します。ファイルはスクラブされませんが、ディスク上のどこで開始および終了するかは誰にもわかりません。また、いくつかの場所で断片化されることさえあります。他の一部のファイルシステムは、ファイルのステータスを「削除済み」に設定するだけですが、位置データは保持します。削除を取り消すことは、このフラグを使用してファイルポインタを調べることより難しくはありません(あまり多くのアクティビティが発生していなければ、ファイルポインタは引き続き使用可能である必要があります)。

何がベストですか?私の見解では、修辞的です。頻繁なバックアップは、これらすべての問題に対する答えです。自動化されたバックアップシステムなしの重要なデータは、私見である。


必須の個人的な逸話:から削除しようとしていfoo\ foo*ました~。私が書いた

rm -r foo<Tab>*

悲しいことに、fooどうやらこれはシンボリックリンクであり、これに一致する唯一のファイルであったため、シェルは

rm -r foo\ foo *

Enterキーを押して、コマンドを見てそこに座りました。rm「書き込み保護されたファイル「何か」を削除しますか」と少し長い時間尋ねられた後、すぐに悪寒を感じ、柔らかく非常に制御されたを押しましたCtrl+c。〜私の半分~は削除されましたが、上記のgreppingと多少の現在のバックアップを通して価値のあるものすべてを取り戻すことができました。個人的に非常に貴重な(読み取り:時間のかかる)ディスク上の非常に最近の測定データが失われましたが、4回のバックアップを作成しました。1つはここで消え、もう1つは学校でのシステム停止のため、もう1つは破損しており、最初は4つ目を見つけることができませんでした。していなかったrm -r書き込み保護されたファイルで立ち往生し、そのフォルダがmyのsshfs経由でマウントされてから4番目が食べられていたでしょう~。それ以来、私はそのようなことについてもっと注意を払っています。


5

それが標準のrmである場合、バックアップがあることを望みます。削除されたファイルを回復する手順は、ファイルシステムごとに異なる場合があります(実行できる場合)。Linuxには組み込みの「ごみ箱」がありません。ファイルを削除すると、すべてが消えてしまいます。

いずれにせよ、コンピューターのプラグを抜いてください-できるだけ早くコンピューターを実行し続ける(シャットダウンすることもある)ため、ディスクへの書き込みが発生し、以前に一部のブロックが占有していた可能性が高くなりますファイルは上書きされます。それが完了したら、別のコンピューターに入れて、ライブCDから再起動するか(読み取り専用でマウントしない限り、ドライブをマウントしないようにしてください)、ハードドライブを取り外してデータリカバリの専門家に渡してください。


4

期待を低く設定します。「削除された」データに何かが書き込まれた場合、それは失われます。

私は少量の回復を行いましたが、特定のフォーマット向けに設計された最良のツールがしばしば見つかりました。たとえば、「photorec」は、数万個のjpegを回復させたいときに優れていました。

Recuvaは今も私を助けてくれて、あなたの最良の選択かもしれません。(無料です。広告でだまされて支払わないでください)

1日の終わりに、失ったものが重要な場合は、ドライブをオフラインにして書き込みを停止します。データを取り戻すか、価値がなくなるまで、見つけることができるすべての回復ソフトウェアを使用してください。本当に重要な場合は、高い価格で専門家に送ってください。

以前にツールを使用したことがある場合は、使い慣れたツールをもう一度試してください。結局のところ、彼らはディスクに書き込むべきではないので、動作するものが見つかるまでソフトウェアを使用できます。


2

ここにあなたのための素晴らしいドキュメントがあります。実用的なヒントがたくさんあります。

ところで、人々の2つのグループがあります。

  1. バックアップを行う人
  2. バックアップを行う人

おめでとう、あなたは自分自身をグループ2に昇格させた。;-)


2

VLCやLibreOfficeなど、現在ファイルを読み込んでいるアプリケーションを開いている場合、このすごいL&U.SOの回答がこの混乱を助けてくれました。これを行うための代替方法を次に示します。

一般的な考え方は、リンクを見つけ/proc/PID/fd/DESCRIPTOR_NUMBERて、元の場所にコピーして戻すことです。を使用ps aux | grep APP_NAMEしてPIDを見つけ、次にls -la /proc/PID/fd/適切なDESCRIPTOR_NUMBERを見つけます。


1

「正しい」答えは、確実に回復する方法がなく、代わりにバックアップまたはクローンシステムから復元するか、再インストールする方法がないと仮定することです。

TestDiskは優れたツールであり、ファイルシステムと削除の新しさに応じて物理ドライブから一部のデータを回収できる方法は他にもありますが、時間と痛みが大きすぎるため、バックアップを保持(およびテストそれらが有効で復元可能であること)!


1

他のユーザーによって上書きされない場合は、幸運です。私は誤って私のcppのソースファイルを削除したと呼ばれるツールを使用何よりも私は、ディスクから60GのCPPの破片を復元助け、。最後に、それらの破片を1つずつ組み立ててファイルを復元しました。特定のファイルタイプの特定のパターンをスキャンし、ディスク上のすべてのiノードをスキャンしてファイルを回復すると思います!試してみてください!


0

誤ってLinuxからファイルを削除した場合は、次のコマンドを使用できます。

find /root -name "search text" -type f  -exec mv {} "/home" \;

の代わりにsearch textファイル名を入れたり、の代わりに復元したいディレクトリを指定したりできます/home


2
こんにちは、サントシュ。誤解を招くリンクを投稿に追加しないでください。削除されました。
14 14

0

このスクリプトを試すことができます。うまく機能し、現在ではrmとimの代わりに広く使用することを意図しています。

https://github.com/nateshmbhat/safe-rm

特徴 :

  • rmの代わりに使用するためのもの
  • rmが取ることができるすべての引数を処理します
  • すでにゴミ箱にあるファイルとのファイル名の衝突を処理します
  • いくつかの許可の問題を自動的に処理します
  • rmが他のスクリプトからまたは間接的に呼び出された場合、システムの「rm」コマンドが自動的に使用されます
  • 次のような適切なエラーメッセージが表示されます。 rm

-2

先週同じ問題が発生し、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’

このビデオショーはあなたを助けることができるミニチュートリアルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.