Cómo (intentar) recuperar tus datos tras un cuelgue
Seguimos extrayendo consecuencias prácticas del "ataque en frío"...
Aunque ya dediqué un artículo completo a valorar las repercusiones del famoso "ataque en frío", en esta nota iré un paso más allá, intentando que lo aprendido a partir de ese ataque pueda ser aprovechado en nuestro beneficio como usuarios comunes de ordenadores.
Supongamos que utilizas un sistema Linux y súbitamente el programa donde estabas escribiendo un valioso documento se cuelga. Otro caso mucho más frecuente es que pierdas por error todo lo que habías editado mediante Firefox (un artículo o un comentario para un blog, por ejemplo), tal vez simplemente porque cerraste la pestaña antes de guardar lo escrito. ¿Es posible recuperar esos datos de alguna manera, en vez de tener que recomenzar desde cero? ¿Qué puede hacerse?
Casi mejor empezaremos por decir lo que no debe hacerse. Lo que no debe hacerse es lo que todos solemos hacer: volver a arrancar el navegador (por ejemplo), para ver si los datos "mágicamente" son recuperados desde la caché y nuestra pesadilla se evapora. O arrancar de nuevo OpenOffice para ver si podemos recuperar algún rastro. ¿Por qué no es buena idea? Porque volver a arrancar ese programa eleva las posibilidades de que el espacio de memoria RAM donde aún estaban nuestros datos se sobreescriba, perdiéndolos así quizás definitivamente...
Para intentar recuperar datos desde la RAM hemos de procurar exactamente lo contrario: no arrancar ningún programa nuevo e intentar valernos del mínimo de procesos nuevos posible para tratar de recuperar la información.
En todo caso hay unos pocos comandos imprescindibles, aunque el riesgo de que sobreescriban el fragmento de RAM que nos interesa no es muy alto.
Algo que podemos hacer es obtener cuando antes el contenido de la memoria y volcarlo a un fichero en nuestro home mediante el siguiente comando:
dd if=/dev/mem of=/home/usuario/mi_ram
o también:
sudo cat /dev/mem > ~/mi_ram
Los anteriores comandos obtienen un volcado de la memoria completa. Si recordamos una cadena concreta (y lo más específica posible) del texto que estábamos tecleando, podemos hacer algo mucho más eficiente:
sudo cat /dev/mem | strings > ~/mi_ram
que almacenará solamente las cadenas ASCII imprimibles. A continuación podemos buscar en nuestro fichero mi_ram la cadena concreta mediante:
grep 'cadena' ~/mi_ram
En el (raro) caso de que conociéramos el identificador del proceso (PID) que se colgó, tendremos otra alternativa más directa a nuestro genérico comando cat:
sudo gcore -o ~/mi_coredump pid
que sólo nos volcará la memoria correspondiente a ese proceso concreto.
Otra posibilidad. Imaginemos que el cuelgue de la aplicación se debe a un fallo momentáneo en la corriente o a otra circunstancia que provoca un reinicio automático. En este caso, si estuviéramos prevenidos y dispusiéramos de reflejos suficientes, deberíamos procurar que el reinicio nuestro sistema linux se realizara en el modo single, para evitar la carga de las X y disponer de más memoria aún no reescrita. Como podemos ver, estamos cada vez más cerca de los supuestos iniciales del ataque en frío. De hecho quizás también podríamos recuperar algunos datos desde un reinicio en frío si sólo han transcurrido unos pocos segundos desde el apagado y hacemos además un arranque en modo single.
También es posible realizar un volcado de nuestra partición swap, donde también pudieran encontrarse los datos que tratamos de recuperar. Si no lo recordamos, localizamos cuál es nuestra partición en /etc/fstab (supongamos hda5) y lo volcamos a disco así:
dd if=/dev/hda5 of=/home/usuario/mi_swap
A continuación lo convertimos a texto con el comando strings y realizamos la búsqueda con grep como explicamos antes.
Por último, un experimento sencillo. Iniciamos la edición de un fichero (con vi o nano) sin darle siquiera nombre ni guardarlo en ningún momento, y tecleamos lacadenaabuscar. Cerramos abruptamente el terminal. Utilizamos luego cualquiera de los comandos expuestos y buscamos lacadenaabuscar en el volcado de memoria. En mi caso la pude localizar sin problemas.
Referencias:
Delicious
Digg
Reddit
Technorati