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? dd
y read
detenerme 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 filefrag
o hdparm --fibmap
y luego usar dd
para 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'
strings
buscará 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 snippet
Debe 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 12
es la longitud mínima que strings
buscaremos. 12
debe ser la longitud de tu text snippet
. Este parámetro es opcional; si se proporciona, podría ayudar strings | grep
a 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 dd
tomar 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.