Recuperar código borrado

Volvemos con los problemas de la semana. Esta vez un poco de sys-admin.

A todos nos ha pasado alguna vez perder ficheros de código por accidente [hacer un rm con argumentos erróneos, usar mal el comando zip (@Erful lo sabe muy bien xD), editar y cerrar un archivo remoto (por FTP, SSH) y que un paquete se pierda por mala conexión y se destruya la copia remota y la original se sincronice vacía, etc).

Ante esto, si lleváis días o semanas trabajando en el código y no tenéis copias de seguridad, llegará el momento del pánico. Pero si mantenemos la calma y usamos todos nuestros conocimientos, hay distintas formas de recuperar el contenido perdido.

Problema: Crear un archivo con al menos unas 50 líneas de código, borrarlo, y después volver a recuperarlo (1)..

(1) Para borrarlo podemos ejecutar rm sobre él o editarlo, borrar todo el contenido y guardar (a vuestra elección).

¡Tiempo! (tic, tac, tic, tac).


Si te gusta esta entrada... compártela! 😉
Tweet about this on TwitterShare on Facebook0Share on Google+0Share on Tumblr0Pin on Pinterest0Share on LinkedIn0Share on Reddit0

1 comentario

  1. LaNsHoR

    Esta vez todo el mundo ha estado bastante perdido, pero la solución está al alcance de lo que cualquier sysadmin debería conocer; sólo se trataba de unir las piezas.

    El único requisito es recordar un fragmento de código distintivo (un comentario, un “class XXX” si en ese fichero definimos la clase, etc).

    Al borrar el archivo, como es bien sabido sólo se borra su referencia de la tabla de inodos del sistema de archivos, pero la información sigue estando ahí hasta que el espacio que ocupa se asigne a otro archivo. Lo normal, es que al guardar sobre el mismo archivo, se creen múltiples copias del mismo por todo el disco (aunque sólo una esté referenciada en la tabla de inodos).

    De esta forma, si la partición de nuestro archivo borrado es /dev/sda2, y en ese archivo teníamos un texto “class XXX”, podemos escanear toda la partición en crudo hasta buscar la secuencia de bytes que coincida con el texto dado, y volcar a un archivo las X líneas anteriores a la coincidencia y las Y líneas posteriores a la misma (si el archivo tiene unas 500 líneas podemos usar márgenes de 1000 o 1500 que luego eliminaremos manualmente.

    Todo esto lo podemos hacer con grep (el comando más útil y versátil del mundo después de sed):

    grep -i -a -B20 -A2000 'class XXX' /dev/sda2 > dump
    

    Donde:

    -i Ignora mayúsculas/minúsculas durante la búsqueda
    -a Procesa una entrada binaria como si fuera texto
    -BX Añade a la línea de coincidencia las X líneas anteriores
    -AX Añade a la línea de coincidencia las X líneas posteriores

    Por defecto el resultado va a salida estándar, así que lo volcamos en un archivo “dump”.

    Y listo, muchas horas de trabajo recuperadas en unos minutos (si la partición es grande el proceso de búsqueda puede tardar un poco, pero nunca más que tú mismo volviendo a hacer el trabajo ;))

Responder

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Límite de tiempo se agote. Por favor, recargar el CAPTCHA por favor.