Típico caso: Recuperación de datos, el medio ha sido sobreescrito con información reciente, con lo que no todos los archivos recuperables a bajo nivel salen sanos.

Lo que haría todo el mundo es abrir archivo por archivo de a uno verificando cuales estan sanos y cuales rotos lo que por resumirlo de alguna manera que englobe totalmente el concepto que quiero transmitir: Es un reverendísimo dolor de bolas.

Acción y efecto de probar todos los archivos recuperados uno por uno para detectar de forma manual cuales están corruptos

Acción y efecto de probar todos los archivos recuperados uno por uno para detectar de forma manual cuales están corruptos

Buscar de entre los miles de archivos que nos puedan interesar cuales salieron sanos y cuales se corrompieron de manera manual como hice toda la vida es la parte que mas tiempo y recursos (mentales) consume. Por suerte alguien en los foros de Gentoofuente de eterna sabiduría informática si las hay– tuvo la misma inquietud pero además fué un poco mas inteligente que yo, quería hacerlo automáticamente. Ya de entrada venía bien encaminado cuando dijo:

Hola,

Tengo un respaldo de archivos antiguos de mi trabajo (principalmente MSOffice), en algún momento varios archivos se corrompieron, por lo que hay archivos que se pueden abrir y otros que no hay caso.

Quiero eliminar los archivos corruptos.

Para diferenciarlos de los buenos se me ocurrió utilizar el comando «file»

Ahí fué que se me encendió la lamparita y vengo utilizando este método automático desde entonces exitosamente. Es que el comando «file«, puede diferenciar a la perfección un tipo de archivo de otro con lo que cualquier archivo que estuviera corrupto, ya sea una imagen, un video, música o un documento de office en lugar de ser identificado como corresponde, simplemente figurará como de tipo «data«.

Tan sencillo como eso, eliminar del directorio que contiene los archivos recuperados, todos aquellos que figuren como de tipo «data«, a lo que Stolz, moderador del foro y mago programador de Bash respondió con este sencillo script que navega subdirectorios recursivamente eliminando todos los archivos que sean de tipo «data»:

find . -type f | while read linea; do
  tipo=`file -b "$linea"`
  if [[ $tipo == "data" ]];then
    rm  "$linea"
  fi
done

Paso a paso:

Se crea un archivo dentro de /usr/bin para que contenga al script, lo llamaremos «borrador_de_archivos_corruptos«:

nano /usr/bin/borrador_de_archivos_corruptos

Se copia el contenido del script y se pega dentro del archivo que estamos editando con nano (o el que sea tu editor de texto de cabecera).

Se sale guardando los cambios.

Se convierte el archivo en ejecutable:

chmod +x /usr/bin/borrador_de_archivos_corruptos

Y ya estça listo para usar.

IMPORTANTE: Ejecutar borrador_de_archivos_corruptos únicamente dentro de la carpeta que contiene la información salvada del proceso de recuperación de datos. Ejecutar el script fuera de la misma te va a borrar archivos que son de tipo «data» por que tienen que serlo, te va a hacer mierda todo lo que encuentre a su paso, para que se entienda.

Ya tenés otro motivo mas para tener un Linux siempre a mano.


Si tu disco rígido se ve como este, ni te gastes en seguir leyendo por que no hace falta: ¡Es viejísimo! (Y no, no se pueden recuperar los correos electrónicos que tenías guardados ahí antes del holocausto nuclear)

Si tu disco rígido se ve como este, ni te gastes en seguir leyendo por que no hace falta: ¡Es viejísimo! (Y no, no se pueden recuperar los correos electrónicos que tenías guardados ahí antes del holocausto nuclear).

Este es mas viejo que la escarapela pero se me ocurrió que quizás no todos estén y/o estéan al corriente:

El sistema de automonitoreo y reporte de todos los discos rígidos, S.M.A.R.T. por las siglas en inglés de Self Monitoring And Reporting Tool lleva la cuenta de cuantas horas lleva encendido tu disco rígido. No tengo ni la mas putañera idea de como verificar esto en windows ni me interesa aprender tampoco pero en linux, tirando de la herramienta smartmontools, he aquí los resultados:

Para /dev/sda:

# smartctl -s on /dev/sda && smartctl -a /dev/sda | grep Power_On_Hours

9 Power_On_Hours          0x0012   093   093   001    Old_age   Always       –       4835

Mi disco rígido identificado como /dev/sda lleva un total de 4835 horas funcionando. Si hubieran sido de corrido, haría un total de casi 202 días sin apagarse nunca… Casi un año.

Mi /dev/sdb, por otro lado, Tiene mas agachadas que japonés con visitas:

# smartctl -s on /dev/sdb && smartctl -a /dev/sdb | grep Power_On_Hours

9 Power_On_Hours          0x0012   099   099   000    Old_age   Always       –       9271

Suma el solito 9271 horas, que si fueran todas de corrido harían un total de casi 387 días. Mas de un año.

¿Cuantas veces se apagó y encendió la PC en donde estuvo conectado este disco rígido?

# smartctl -s on /dev/sdb && smartctl -a /dev/sdb | grep Power_Cycle_Count

12 Power_Cycle_Count       0x0032   090   090   008    Old_age   Always       –       7165

Miren si habrá aguantado cascotazos el botón de encendido del gabinete: 7165 veces lo he presionado como mínimo y todavía sigue ahí como si nada. Ni vencido el resorte, ni despintado el plástico, nada… Gabinetes para PC eran los de antes.