データ復旧のためにファイルの終わりを読む

データ復旧のためにファイルの終わりを読む

非常に古い.swpファイルが私が編集していたファイルを復元したので、今ははるかに短くなりました。それ以来、そのディレクトリで何もしなかったので、ファイルの最後の直後のバイトにはまだ私のデータを含める必要があります。指定されたメモリアドレスからNバイトを読み取るには、どの機能を使用できますか?どこかでオプションを見逃していない場合は、ファイルの境界で停止しますddread

現在のファイルサイズは3.2KBです。切り捨てる前のファイルのサイズは覚えていませんが、おそらく10KBを超えていないでしょう。ファイルの境界を無視し、ファイルの先頭から10KBを読み取るには?データが完全に保存されていなくても最初からやり直す必要がない限り、問題はありません。

ベストアンサー1

通常、編集者はファイルを保存するときに削除するか、ゼロに切り捨てて割り当てられたスペースを空にし、作成して新しいスペースを割り当てます。これにより、ファイルシステムはデータをまったく異なる物理的な場所に配置します。だからあなたのアイデアが動作しない可能性があります。

filefragまたは を使用してファイルの物理的な場所を取得し、 を使用してその物理的な場所をhdparm --fibmap直接dd読み取ることもできます。ここでは、このプロセスを他の文脈で説明します。https://unix.stackexchange.com/a/85880/30851


あなたの場合は、テキストデータを見つける一般的な方法が必要になる可能性があります。たとえば、次のようになります。

strings -n 12 -t d /dev/partition | grep -F 'text snippet'

strings隣接するASCIIデータを探して(他のエンコーディングもサポートされていますが、UTF-8についてはわかりません。コードまたは英語の場合は必要ありません)、見つかったオフセットも印刷します。

text snippet探しているファイルの一部にあったことを覚えている正確でユニークなテキストの例(1行)でなければなりません。 (わからない場合は、正規表現grepを代わりに使用できます。)

-n 12strings検索する最小長です。12それはあなたの長さでなければなりませんtext snippet。このパラメーターはオプションであり、指定されたstrings | grep場合は作業速度を上げるのに役立ちます。

パーティション全体を読み取るのに時間がかかりますが、成功すると、dd通常の領域をインポートして属していないものを削除するために供給できるオフセットが得られます。

それ以来、私はそのディレクトリに何もしませんでした

ディレクトリがマウントポイントではない場合...ほとんどのファイルシステムは実際には「ディレクトリごとの」スペースを予約しないため、ファイルシステム全体のすべての書き込み操作がユーザーが探しているビットを上書きできます。データ復旧状況では、通常、全体を読み取り専用モードに切り替えます。

おすすめ記事