Eu usaria strings
dessa maneira:
strings 400Gfile.bin | grep -C 10 searchstring
Para começar em um determinado deslocamento (por exemplo: 20G),
dd if=400Gfile.bin bs=20G skip=1 | strings | grep -C 10 searchstring
Qual é o caminho mais rápido para o arquivo binário 400gb grep? Eu preciso de um arquivo txt do HDD despejo e sei algumas seqüências de caracteres e quero encontrar esse arquivo no despejo.
Eu tentei usar o grep -a-C 10 searchstring, mas o grep trava com falta de memória quando ele tenta ler um grande bloco de dados sem símbolos de nova linha. Também gostaria de começar a pesquisar não desde o começo, mas de algum ponto do arquivo
Eu usaria strings
dessa maneira:
strings 400Gfile.bin | grep -C 10 searchstring
Para começar em um determinado deslocamento (por exemplo: 20G),
dd if=400Gfile.bin bs=20G skip=1 | strings | grep -C 10 searchstring
O problema com o grep é que ele precisa ter uma linha inteira na memória. Se essa linha é tão grande que não cabe na memória, que as bombas grep. A única maneira de contornar esse dilema é alimentar pequenos pedaços para o grep. (que é realmente o que o grep deve estar fazendo por si mesmo, mas não funciona)
Use dd
para que você possa especificar um deslocamento para iniciar em e use fold
ou grep --mmap
para evitar a falta de memória em uma linha maior que a RAM disponível. grep --mmap
impedirá o sistema de sufocar, mas pode ou não impedir que o próprio grep se sufoque. Isso seria bom para alguém testar. fold
permitirá que você insira uma nova linha em intervalos regulares, isso satisfaz os critérios para dividir a entrada em partes gerenciáveis.
dd if=bigfile skip=xxx | fold | grep -b -a string
O -b
fornece o deslocamento de bytes que você achará útil para saber onde suas cadeias de texto estão localizadas no arquivo.
Eu testei isso em um volume lógico de 100 GB em um dos meus hypervisors KVM, usando a string de pesquisa "Hard" e executando o vmstat em uma janela separada para monitorar o desempenho. O volume lógico é basicamente formatado como um disco rígido (partições e sistemas de arquivos) no qual uma VM Linux convidada está instalada. Não houve impacto no desempenho do sistema. Ele processou cada show em cerca de 33 segundos (claro que isso irá variar muito dependendo do seu hardware).
Você disse que queria um desempenho rápido. Isso deve dar a você o desempenho mais rápido do uso de utilitários em um script de shell. A única maneira de obter uma pesquisa mais rápida seria escrever um programa em C que busca um deslocamento, lê um chunksize especificado, alimenta esse fragmento em um algoritmo de correspondência de padrões, antes de passar para o próximo bloco. Parece que esse tipo de "grep aprimorado" já deveria estar em existência, mas pesquisando on-line eu não encontro um.
Tags grep data-recovery linux