答え1
答えは「おそらくそうですが、ファイルシステムの種類と時間によって異なります」です。
間違いを除いて、これら3つの例のいずれもold_fileまたはexecution_fileの物理データブロックを上書きしません。
mv new_file old_file
。これにより、old_fileの接続が解除されます。 old_fileへの他のハードリンクがある場合、残りのリンクのブロックは変更されていません。そうでない場合、これらのブロックは通常(ファイルシステムのタイプに応じて)使用可能リストに配置されます。その後、コピーが必要な場合mv
(ディレクトリエントリを移動するのではなく)、新しいブロックが書き込みmv
として割り当てられます。新しく割り当てられたブロック公開されたばかりのものと同じでも異なる場合もあります。。このようなファイルシステムでは超高速ファイルシステム、可能であれば、ファイルが作成されたディレクトリと同じシリンダーグループのブロックを割り当てます。そのため、ディレクトリからファイルのリンクを解除して同じディレクトリにファイルを作成すると、解放されたばかりの同じブロックの一部を再利用(および上書き)する可能性があります。これは、誤ってファイルを削除した人のための標準的なアドバイスが、誰かがファイルを回復しようとするまでディレクトリツリーのファイルに新しいデータを書き込まないようにすることです(ファイルシステム全体に書き込まないことをお勧めします)。
cp new_file old_file
次の手順を実行します(これを使用してstrace
システムコールを表示できます)。開く(「古いファイル」、O_WRONLY | O_TRUNC)= 4
mv
O_TRUNCフラグは、上記と同様にすべてのデータブロックを解放します。上記のように、通常は利用可能なリストに追加され、コマンドの完了時に後続の書き込みで再利用される場合とそうでない場合がありますcp
。vi existing_file
。vi
もしそうなら、コマンドvim
は:x
次のことを行います。unlink("existing_file~") = -1 ENOENT (該当するファイルやディレクトリなし)
rename("既存ファイル", "既存ファイル~") = 0
open("既存ファイル", O_WRONLY | O_CREAT | O_TRUNC, 0664) = 3
したがって、既存のデータは削除されず、バックアップファイルに保存されます。
FreeBSDでは、
vi
yesはopen("existing_file",O_WRONLY|O_CREAT|O_TRUNC, 0664)
上記と同じ意味を持ちますcp
。
データの一部または全部を回復するために特別な手順は必要ありません。必要なのは、元のデバイスにアクセスするgrep
だけです。dd
小さなテキストファイルの場合grep
、@Steven Dの答えあなたがリンクした質問の最も簡単な方法は次のとおりです。
grep -i -a -B100 -A100 'text in the deleted file' /dev/sda1
ただし、複数の連続していないチャンクに存在する可能性があるより大きなファイルの場合は、次のようにします。
grep -a -b "text in the deleted file" /dev/sda1
13813610612:this is some text in the deleted file
これにより、一致する行のオフセット(バイト)が提供されます。次dd
から始めて、一連のコマンドを実行します。
dd if=/dev/sda1 count=1 skip=$(expr 13813610612 / 512)
また、このブロックの前後の一部のブロックを読みたいです。 UFSでは、ファイルブロックは通常8KBであり、通常、個々のファイルのブロックは他のファイルまたは利用可能なスペースの8KBブロックとインターリーブされ、かなり連続的に割り当てられます。 UFSのファイルの末尾には最大7つの1 KBの断片があり、これらの断片は連続的でもそうでない場合もあります。
もちろん、データを圧縮または暗号化するファイルシステムでは、回復はそれほど単純ではないかもしれません。
実際、Unixには既存のファイルブロックを上書きするユーティリティはほとんどありません。思い浮かぶのはですdd conv=notrunc
。もう一つはですshred
。
答え2
/var/tmp または大きい場所に十分なディスク容量があることを確認してください。
努力する
grep -i -a -B100 -A100 'a string unique to your file' /dev/sda1 |
strings > /var/tmp/my-recovered-file
ここで、/dev/sda1 はシステムのディスクです。
次に、my-recovered-fileで文字列を検索します。
それ可能ほとんどはそこにあります。行間隔、角かっこ、記号などが欠落していることを確認してください。
ファイルのデータ量を減らすには、ファイル内でかなり一意のクエリまたは文字列を使用します。 "echo"などの単語を検索すると、システムにはechoという単語を含む多くのファイルがあるため、多くの文字列が得られます。
答え3
私はいいえと答えます(大きな星印)。
データがディスクに保存される方法を考えてみましょう。データを含み、次のブロック(存在する場合)を指すブロックがあります。
データを上書きすると、ブロックの内容(またはファイルを拡張した場合は閉じるタグ)が変更されます。だから何もしなければならない回復が可能です(下記参照)。
ファイルを減らすと、古いブロックが失われ、非常に迅速にリサイクルされます。プログラマである場合は、オフ/削除操作を実行せずにリストの半分を「失う」接続リストを検討してください。データはまだ存在しますが、幸運を祈ります。
考えてみると興味深いのは断片化(fragmentation)です。
断片化は、不連続なデータを含むディスクに「穴」がある場合に発生します。これは、ディスクの元の場所に収まらないようにファイルを増減するなどのファイルの変更によって発生する可能性があります。
ファイルが元のサイズ(移動する必要がある時点)を超える場合は、ファイルシステムに応じて、ファイル全体を以前のデータがまだ残っている新しい場所(無料で表示)にコピーするか、古いエンドポインタを変更して新しい場所を指すようにします。 (ジッタが発生します)。
簡単に言うと、顕微鏡で観察する極端な法医学的プロセスを経ることなくデータが失われる可能性がありますが、それでもデータが残っている可能性があります。
答え4
私も同じ状況になっていました。 「mv FILE1.c FILE2.c」を実行しました。
「Linuxシステムに特別なプログラムがインストールされていません」をリクエストしました。他のシステムにこれらのツールをインストールするか、livediskを使用してこれを達成できます。
ディスクへの書き込みの停止または制限
この場合、保存するデータを実際に上書きする可能性があるため、現在のシステムへの書き込みを制限するのが最善です。
だから、まずデータが保存されているコンピュータでウェブを閲覧しないでください!
場合によっては、プロセス中にファイルがまだ開いている可能性があります。これが本当だと思ったら、まだ機械を止めないでください。データへのハンドルを見つける前に、ファイルを開いたままにしたプロセスをスリープモードに切り替えることができます。この場合、機械を停止する必要はありません。少なくとも1つの他の答えがこの方法を指摘しました。ファイルは通常、そのディレクトリに無効な名前を持ちます(ビューを使用してくださいls -lart
。最新のファイルが最後に表示され、日付は最良の推測のヒントを提供できます)。
回復システムの使用
次に、優先順位に従って次のいずれかを実行します。
ディスクを別のコンピュータに挿入したり、別のパーティション、USBフラッシュドライブ、またはLive CDから起動できる場合:
機械を停止し、あなた(およびあなたのシステム)が大丈夫である場合は、単にバッテリーの電源を切るか、オン/オフボタンを押し続けます。
停電が完全に発生すると、必要なファイルを上書きするリスクが高くなります。
他のシステムを起動できない場合:システムへの書き込みを制限します。ディスクに書き込むことができるプログラムを終了します。
「photorec」は「testdisk」と一緒にインストールされます。
ほとんどの場合、「testdisk」を使用します。私が知らない他の方法があるかどうかを確認してこのページを訪問するようになりました。
「testdisk」は、Ubuntu 16.04システムに常にプリインストールするツールセットです(適切な理由で「レガシー」)。
「Linuxシステムに特別なプログラムがインストールされていません」を要求します。他のシステムに「testdisk」をインストールし、そこから生のディスクを読み取ることができます。 USBディスクから起動することもできます。
それができない場合は、現在のシステムにインストールできます。このような場合は、しばらく前にダウンロードした大容量ZIPやISOなどの古い大容量ファイルを削除することをお勧めします。最新のデータがディスクの先頭ではなく最後にある傾向があると思うので、これを行います。
その後、次のようなものを使用して「testdisk」をインストールできます(例:debian)。
apt-get install testdisk
その後、「photorec」を起動し、データを含むデバイス(パーティション)以外のデバイス(パーティション)にファイルを復元します。場合によっては、USBドライブ、ネットワークドライブ、または/ tmpディレクトリ(RAMにマップされている場合)にすることもできます。
photorec /d PATH_TO_OTHER_DEVICE
復元するデバイスを選択したら、下部のメニューから「[ファイルオプション]」を選択してください。次に、すべてのオプションを選択解除し、探しているファイル形式のみを選択します。私の場合は「C」ファイルなので、「テキスト」を選択しました。 photorec
まだ.c
見つかったファイルを生成します。その後、宇宙[Search]
でのみ実行して見ることができますFree
。
再度実行され、次のコマンドを実行しました。
grep minTemp recup*/*.c
photorecは回復ディレクトリを作成するパスにあります。私のファイルに「minTemp」があることを知っており、acファイルを探しています。
ファイルのさまざまなバージョンに対して30個のエントリがあり、より大きなエントリを最初に確認しました。
photorec
まだ実行中ですが、今では「minTemp」の新しい一致があるので、必要なファイルがあると確信してプロセスを停止しました。
海外サービス
あなたの専門知識に従って仕事を下請することもできます。データ復旧に特化した企業がたくさんあります。彼らはディスクにツールをインストールしません。下請業者がデータを復元できる場合、最小費用は約500ドルです。
準備する
この状況に合わせて準備する! :
- データが発生する前に回復する方法を学び、回復が不要な場合は、一部のデータを回復してみてください。
- 必要になる前に、システムに「testdisk」をインストールしてください(testdiskをインストールするとすでにインストールされているため、データは上書きされません)。
- データをシステムファイルとは別のパーティションに保存します。いくつかは、/ tmpディレクトリに別々のパーティションを使用することをお勧めします。
- スナップショットを使用してください。スナップショットツール(rsnapshot)を使用して、「デバイス」レベル(zfs / btrfs)または以前のバージョンのファイルを保持できるプライベートクラウドでもこれを行うことができます。これらの機能が統合されたNASシステムもあります(「.snapshot」ディレクトリに以前のバージョンを見つけることができます)。
- ShadowProtectやAcronisなどのバックアップツールを使用すると、オンラインディスクの増分バックアップを頻繁に実行できます。
- 回復ツールと適切なライブオペレーティングシステムを含むUSBドライブを準備します。 [私は一つを持っています]。