多くのcプログラムファイルが生成された現在のディレクトリで誤ってrm *を実行しました。私は朝からあれこれ仕事をしてきました。これで、朝にファイルを作成するのに時間を費やすことはできません。復元する方法を教えてください。リサイクルごみ箱にもありません!
答え1
実行中のプログラムで削除されたファイルがまだ開いている場合は、そのファイル内のファイル記述子を開いてファイルを回復できます/proc/[pid]/fd/[num]
。このような状況であるかどうかを確認するには、以下を試してください。
$ lsof | grep "/path/to/file"
上記が次の形式で出力される場合:
progname 5383 user 22r REG 8,1 16791251 265368 /path/to/file
2番目の列のPIDと4番目の列のファイル記述子番号を確認してください。この情報を使用して、次のコマンドを実行してファイルを回復できます。
$ cp /proc/5383/fd/22 /path/to/restored/file
:このファイルが見つからない場合は、lsof
そのファイルを含む読み取り専用ファイルシステムをすぐに再マウントする必要があります。
$ mount -o remount,ro /dev/[partition]
または、ファイルシステムを完全にアンマウントします。
$ umount /dev/[partition]
その理由は、ファイルのリンクが解放され、ファイルへのハードリンクが残っていない場合は、デフォルトのファイルシステムが削除されたファイルに以前に割り当てられたブロックを解放でき、その時点でそのブロックが削除される可能性があるためです。別のファイルに割り当て、その内容を上書きします。したがって、回復が発生した場合は、ファイルシステムへの追加の書き込みを停止することが非常に重要です。ファイルシステムがルートファイルシステムであるか、他の理由で読み取り専用にするかマウント解除できない場合は、システムをシャットダウンして(可能であれば)、ターゲットファイルを読み取ることができるライブ環境でシステムリカバリを再開する必要があります。 - ただ。
ファイルシステムへの書き込みをブロックした後、すぐに実際の回復を試みる必要はありません。安全のために、次の場所で物理復元を実行するためにファイルシステムをバックアップできます。
$ dd bs=4M if=/dev/[partition] of=/path/to/backup
次の手順はファイルシステムの種類によって異なります。一般的なUbuntuインストールを想定すると、ext3
またはext4
ファイルシステムがある可能性があります。この場合、回復を試すことができますextundelete
。マウントされていない(または読み取り専用でマウントされている)場合は、バックアップまたは元のデバイスから安全に回復を試みることができます。アクティブなファイルシステムから復元しようとしないでください。。これにより、ファイルシステムが一貫性のない状態になる可能性が高くなります。
extundelete
現在のディレクトリという名前のサブディレクトリにあるすべてのファイルを復元しようとしますRECOVERED_FILES
。バックアップから削除されたすべてのファイルを復元する一般的な使用法は次のとおりです。
以前のバージョンの場合:
$ extundelete /path/to/backup --restore-all
最新バージョン(例:0.2.4)の場合は、復元したいデバイスをマウントしないでください(Ryan Lueに感謝します)。
$ extundelete /dev/<device-file> --restore-all
--restore-all
--restore-file <path>
代わりに、または同じオプションを試すことができます。--restore-directory <path>
答え2
はい、ファイルを回復できました。すべて復元されたことを確認しませんでしたが、一部は復元しました。このツール/コマンドで回復されたファイルが多いため、このファイルからいくつかのテキストパターンを特定して、何が私のものであるかを確認する必要があります。ファイルが別の名前に復元されました(システムで作成された可能性があります)。別のフォーラムで解決策を得ました。コマンドはphotorecです。
sudo photorec
これにより、テキストベースのウィンドウが開きます。私は指示に従い、はい、本当によかったです。