Leia o final do arquivo para recuperar dados

Leia o final do arquivo para recuperar dados

Um arquivo .swp muito antigo reverteu um arquivo que eu estava editando, por isso agora é significativamente mais curto. Desde então, não fiz nada nesse diretório, portanto, os bytes imediatamente após o final do arquivo ainda devem conter meus dados. Que função posso usar para ler N bytes de um determinado endereço de memória? dde readpare nos limites do arquivo, a menos que eu tenha perdido uma opção em algum lugar.

O tamanho atual do arquivo é 3,2 KB. Não me lembro exatamente o tamanho do arquivo antes de ser truncado, mas provavelmente não mais que 10 KB. Como posso ler 10 KB desde o início do arquivo, ignorando os limites do arquivo? Não há problema se os dados não estiverem perfeitamente preservados, desde que não seja necessário começar do zero.

Responder1

Normalmente, quando os editores salvam arquivos, eles excluem ou truncam para 0, liberando assim o espaço alocado, e então gravam, o que aloca novo espaço. Isso faz com que o sistema de arquivos coloque os dados em um local físico completamente diferente. Portanto, sua ideia pode não funcionar.

Você pode obter a localização física de um arquivo usando filefragou hdparm --fibmape, em seguida, usar ddpara ler essa localização física diretamente. Descrevi esse processo em um contexto diferente aqui:https://unix.stackexchange.com/a/85880/30851


No seu caso, é mais provável que você precise de uma abordagem geral para encontrar dados textuais... algo como:

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

stringsprocurará dados ASCII consecutivos (também suporta algumas outras codificações, não tenho certeza sobre UTF-8. Se for código ou inglês você não precisará) e também imprimirá o deslocamento onde foi encontrado.

text snippetdeve ser uma amostra de texto exata e exclusiva que você lembra de estar na parte do arquivo que está procurando [em uma única linha]. (Se você não sabe exatamente, você pode usar expressões regulares.)

-n 12é o comprimento mínimo que stringsprocuraremos. 12deve ser o comprimento do seu text snippet. Este parâmetro é opcional, se fornecido, pode ajudar strings | grepa ir um pouco mais rápido.

Levará muito tempo para ler a partição inteira, mas se for bem-sucedido, você terá um deslocamento que poderá usar para ddcapturar a área geral e remover coisas que não pertencem.

Eu não fiz nada nesse diretório desde

Se o seu diretório não for um ponto de montagem ... a maioria dos sistemas de arquivos não reserva espaço "por diretório", então ... toda e qualquer gravação em todo o sistema de arquivos pode sobrescrever o bit que você está procurando. Em uma situação de recuperação de dados, você geralmente muda tudo para o modo somente leitura.

informação relacionada