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? dd
e read
pare 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 filefrag
ou hdparm --fibmap
e, em seguida, usar dd
para 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'
strings
procurará 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 snippet
deve 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 strings
procuraremos. 12
deve ser o comprimento do seu text snippet
. Este parâmetro é opcional, se fornecido, pode ajudar strings | grep
a 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 dd
capturar 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.