¿Cómo verificar si un archivo está dañado o no?

13

¿Hay alguna solución general para verificar si un archivo está dañado o no? Por ejemplo, si un archivo de video es malo o si un archivo comprimido está dañado, etc.

LanceBaynes
fuente
1
¿Pregunta si hay un error físico en el disco o si la información en el archivo es incorrecta?
Thorbjørn Ravn Andersen
2
Verificar si la información en un archivo arbitrario es correcta es bastante complicado. echo "P = NP" >is-this-corrupt.txt:)
Tom Anderson

Respuestas:

10

No, no hay soluciones generales. La única forma de verificar si un archivo está dañado es intentar leerlo; solo el software que sabe leer ese formato en particular puede hacerlo.

Lo que puede hacer es usar filepara identificar el tipo de archivo y luego usar el tipo para elegir un programa apropiado para verificar el archivo. Podrías escribir un guión como este:

# /bin/bash -eu

FILENAME=$1

FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
    "gzip compressed data") CHECKER="gunzip -t" ;;
    # many, many more lines here
    *) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac

$CHECKER $FILENAME

Pero tendría mucho trabajo que hacer para completar la declaración del caso.

Es posible que alguien ya haya escrito dicho script (o programa), pero no sé de ninguno.

Tom Anderson
fuente
1
"solo el software que sabe leer ese formato en particular puede hacer eso" es una suposición falsa. Hay muchos programas que no les importa el tipo de archivo que les da. (Piense, por ejemplo grep, cat, tar...). Su solución es, por lo tanto, muy hinchada.
rozcietrzewiacz
44
Por "leer", me refería a "interpretar", debería haber sido más claro. No puede usar cat, ni ningún otro programa que trate un archivo simplemente como una secuencia no estructurada de bytes, para verificar si hay corrupción. No creo que mi solución esté hinchada.
Tom Anderson
Puede, como Caleb sugirió, tratar cada archivo como datos binarios y almacenar sumas de verificación para su posterior verificación. Esto es universal, simple y relativamente rápido.
rozcietrzewiacz
1
Pero ahora veo que su enfoque tiene el beneficio de que puede realizar la verificación incluso en archivos que no ha visto ni accedido anteriormente. Esto es definitivamente una ventaja: puede señalarlo en su respuesta.
rozcietrzewiacz
14

Si en algún momento sabe que el archivo es bueno, puede hacer una suma de verificación y usarlo para compararlo más tarde para asegurarse de que aún esté completo. Esto es útil antes de transferir archivos entre medios o redes.

Si no sabe sobre el buen estado de un archivo, no, no hay una forma universal de verificar la corrupción. Solo el formato de archivo específico en cada caso determina qué datos están corruptos o no.

Caleb
fuente
3

Si utiliza ZFS, puede leer el archivo y se garantiza que no está dañado o si tiene un error de lectura y lo está.

Editar Después de los sabios comentarios, aquí hay una aclaración de mi respuesta:

ZFS puede proteger y detectar contra la corrupción silenciosa de datos. por ejemplo: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Por supuesto, si el archivo ya está dañado en el momento en que se escribió inicialmente, no hay nada el sistema de archivos puede hacer.

Para protegerse contra la corrupción que ocurriría durante la transmisión del archivo, las técnicas habituales de uso general son md5sum o hashes similares.

jlliagre
fuente
wow, qué característica: O
LanceBaynes
1
Entonces, ¿si descargas un video de la web que está dañado? ZFS no hace nada para ayudarlo, solo verifica que el archivo corrupto no se modifique. ZFS es fantástico, pero no es una solución para buscar archivos corruptos.
Tom Anderson
Desafortunadamente, esto es solo una verificación de integridad del sistema de archivos, no una comprensión real de los archivos y si están corruptos. El uso más común que sospecho que @Lance busca es poder decidir si un archivo entrante descargado o transferido es válido o no. ZFS no puede decidir mágicamente si un archivo es bueno o no, solo promete que lo que le dé se guardará y devolverá en una sola pieza localmente.
Caleb
Como la pregunta está etiquetada / recuperación de datos y / sistemas de archivos, supuse que se trataba de corrupción silenciosa de datos, no de archivos ya rotos en primer lugar. Respuesta editada para aclarar ese punto.
jlliagre
@jiliagre: retuve esta pregunta con esa etiqueta (posiblemente erróneamente) aproximadamente una hora después de su respuesta. Cuando respondiste, simplemente estaba etiquetado como "linux".
Caleb