Lea más allá del final del archivo para recuperar datos

Lea más allá del final del archivo para recuperar datos

Un archivo .swp muy antiguo revirtió un archivo que estaba editando, por lo que ahora es significativamente más corto. No he hecho nada en ese directorio desde entonces, por lo que los bytes que siguen inmediatamente al final del archivo aún deberían tener mis datos. ¿Qué función puedo utilizar para leer N bytes de una dirección de memoria determinada? ddy readdetenerme en los límites del archivo, a menos que me haya perdido una opción en alguna parte.

El tamaño del archivo actual es de 3,2 KB. No recuerdo exactamente qué tamaño tenía el archivo antes de ser truncado, pero probablemente no más de 10 KB. ¿Cómo puedo leer 10 KB desde el principio del archivo, ignorando los límites del archivo? Está bien si los datos no se conservan perfectamente, siempre y cuando no tenga que empezar de cero.

Respuesta1

Por lo general, cuando los editores guardan archivos, los eliminan o los truncan a 0, liberando así el espacio asignado, y luego escriben, lo que asigna nuevo espacio. Esto da como resultado que el sistema de archivos coloque los datos en una ubicación física completamente diferente. Entonces tu idea podría no funcionar.

Puede obtener la ubicación física de un archivo usando filefrago hdparm --fibmapy luego usar ddpara leer esa ubicación física directamente. He descrito este proceso en un contexto diferente aquí:https://unix.stackexchange.com/a/85880/30851


En su caso, es más probable que necesite el enfoque general para encontrar datos textuales... algo como:

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

stringsbuscará datos ASCII consecutivos (también admite otras codificaciones, no estoy seguro acerca de UTF-8. Si es código o inglés, no lo necesitará) y también imprimirá el desplazamiento donde se encontró.

text snippetDebe ser una muestra de texto exacta y única que recuerdes que se encuentra en la parte del archivo que estás buscando [en una sola línea]. (Si no lo sabe exactamente, puede utilizar expresiones regulares).

-n 12es la longitud mínima que stringsbuscaremos. 12debe ser la longitud de tu text snippet. Este parámetro es opcional; si se proporciona, podría ayudar strings | grepa ir un poco más rápido.

Tomará mucho tiempo leer toda la partición, pero si tiene éxito, tendrá un desplazamiento al que podrá alimentar para ddtomar el área general y luego eliminar lo que no pertenece.

No he hecho nada en ese directorio desde

Si su directorio no es un punto de montaje... la mayoría de los sistemas de archivos realmente no reservan espacio "por directorio", por lo que... todas y cada una de las escrituras en todo el sistema de archivos podrían sobrescribir el bit que está buscando. En una situación de recuperación de datos, generalmente cambia todo al modo de solo lectura.

información relacionada