大きなパーティションの「grep: out of memory」エラー

大きなパーティションの「grep: out of memory」エラー

Linuxコマンドメモを使用してテキストファイルを編集しているときに、テキストファイルの大部分が欠落していることがわかりました(おそらく貼り付けずにコピーしたようです)。問題は、すでに文書を保存していることです。 (シンプルなエディタなので隠しコピーはありません)

今、私はいくつかのブログ投稿を見つけました(特にこれは例) grep を使用してパーティションからテキスト文字列を簡単に検索する方法を示します。

$ sudo grep -a -C100 'sudo lshw -c' /dev/sdb2 > file.txt

しかししばらくして、私は次の事実を理解するようになりました。

grep: memory exhausted

私の理解はこの回答メモリより大きな行を読み取る作業なので、grep似たようなコードが必要だと思いましたfind

3TBハードドライブの2TB NTFSパーティション。

ベストアンサー1

grep プログラムは一度に 1 行ずつメモリに読み込みます。行は、1 つの改行文字から次の改行文字までのすべてとして定義されます。バイナリデータの場合、改行なしで大きなスペースがある可能性があります。

を試してみてくださいgrep -z。これは、grepに改行ではなく入力レコード区切り文字でnullバイトを処理するように指示します。非常に大きなバイナリデータブロックは、改行文字よりもヌルバイトを含む可能性が低いです。実際に改行文字がない可能性が最も高いデータブロックは、ディスクのまだ書き込まれていない領域にある長いヌルバイト文字列です。ヌルバイトを含まない大量のテキストデータは、メモリを消費するほど大きくない可能性があります。もう1つの利点grep -zは、出力に1行ではなくフルテキストブロック(通常1〜4kB)が含まれることです。

grepの代わりに専用ユーティリティを試すことができます。写真記録(部分テストディスク)。名前にもかかわらず、写真に限定されません。これらのユーティリティはファイルシステム構造を知っているため、連続していない複数のブロックにわたって削除されたファイルを回復することがあります。

もちろん、古いデータを回復できるという保証はありません。上書きされた可能性があります。

おすすめ記事