Tengo un archivo ISO, que grabé en un CD. Ahora, ¿cómo puedo verificar si el CD se creó correctamente? Me gustaría un comando que calcule la suma hash que puedo usar para verificar con la suma hash que calculo en el archivo ISO. Idealmente, el comando debería:
- Funciona independientemente del archivo ISO:es decir, no quiero mantener una lista de sumas hash para cada archivo en el disco, ni recordar la cantidad de bloques
- Sea relativamente breve:un comando de una línea es excelente, una cadena de comandos de dos líneas está bien, un script que abarca una página no lo es
- Ser bastante eficiente:por ejemplo,
dd
el disco vuelva a un archivo y luego ejecutemd5sum
en el archivo es inaceptable
Si no hay una respuesta que no pueda satisfacer a todos, también apreciaré la coincidencia más cercana. Aún mejor si me puedes decir por qué no es tan sencillo.
Respuesta aceptada:
El problema básico es que queremos tomar el md5sum de exactamente la misma información que estaba originalmente en el ISO. Cuando escribe la ISO en un CD, es probable que haya un espacio en blanco al final del disco, lo que inevitablemente cambia el md5sum. Por lo tanto, el camino más corto:
md5sum /dev/cdrom
no funciona . Lo que funciona (y es común en la documentación en línea) es solo leer la cantidad exacta de bytes del dispositivo y luego hacer md5sum
. Si conoce la cantidad de bytes, puede hacer algo como:
dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum
donde 'xxxxx' es el tamaño de la iso en bytes.
Si no conoce la cantidad de bytes, pero aún tiene la iso en su disco, puede obtenerlos usando ls haciendo algo como lo siguiente (tomado de aquí):
dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum
Hay muchas otras construcciones de una línea que deberían funcionar. Note que en cada caso estamos usando dd
para leer los bytes del disco, pero no los canalizamos a un archivo, sino que los entregamos directamente a md5sum.
Se pueden realizar posibles mejoras de velocidad haciendo algunos cálculos para usar un tamaño de bloque más grande (el bs=
en el dd
comando).