¿Qué sucede cuando se producen errores de lectura o escritura en la tarjeta SD?

3

He estado felizmente haciendo copias de seguridad y copiando tarjetas SD (incluidas las tarjetas microSD y SDHC) desde una PC con Linux usando los siguientes comandos:

dd if=/dev/sdb of=sd.img bs=4096 conv=notrunc,noerror
dd if=sd.img of=/dev/sdc bs=4096 conv=notrunc,noerror

Sin embargo, sé que existe la posibilidad de que los bloques se dañen en la tarjeta SD. Supongo que este error puede ocurrir en lectura o en escritura.

Mi pregunta es, ¿qué sucede con un error de lectura? ¿Los bytes con errores se configuran en 0x00 en el archivo de imagen? ¿Se ponen a 0xFF? ¿O desaparecen (cambiando el tamaño del archivo)?

Del mismo modo, al escribir, ¿qué sucede cuando hay un error? ¿La tarjeta SD escribirá automáticamente los datos en otro bloque? ¿O sucederá algo más?

    
pregunta Chris Merck

2 respuestas

1

Si bien la forma en que Linux u otro sistema operativo maneja los bloques defectuosos varía tanto el sistema operativo, el tipo de unidad y el tipo de sistema de archivos, así como la aplicación utilizada (en su caso, DD), tendrá más suerte si intenta preguntar eso en Superuser.stackexchange. com

Pero solo por completar, DD cuando se ejecuta con el indicador noerror , saltará los bloques erróneos / errores de lectura, en lugar de detenerse. Sin el indicador sync , simplemente omitirá esos errores, por lo que su archivo de salida será más pequeño. La bandera de sincronización hace:

  

Rellene cada bloque de entrada con NULs a tamaño ibs; cuando se usa con bloqueo o desbloqueo, rellene con espacios en lugar de NUL   Entonces, si usa notrunc,noerror,sync , cualquier error de lectura se escribirá como \x00 o NUL , y la salida tendrá el mismo tamaño que la entrada.

En cuanto a la forma en que la tarjeta SD la maneja, las tarjetas SD son memoria Nand Flash con un controlador incorporado, que maneja la nivelación del desgaste, la gestión de bloques defectuosos y la asignación del sistema de archivos virtual a las ubicaciones físicas en la memoria Nand. Parte de esto es que los sectores de memoria tienen bloques de repuesto, ya que si algunos bloques en un sector mueren. Intenta escribir los datos en el bloque principal, volver a leer para verificar si son válidos, y si no, usa esos repuestos. Entonces marca el bloque malo como tal. Se desconoce si, cuando se usa una sección de bloque de repuesto, si todo el sector está marcado como incorrecto o no.

Pero todo esto está del lado del controlador interno del SD. Nada de esto se reporta al sistema operativo. Los bloques incorrectos en la Nand no son administrados por el usuario / aplicación.

    
respondido por el Passerby
1

Esto depende mucho del comportamiento exacto de muchas partes en el sistema, pero en mi experiencia de discos defectuosos obtienes algo devuelto del bloque defectuoso; El tamaño del archivo no será más corto. Los "datos incorrectos" podrían ser 00, FF o una versión codificada de los datos reales.

    
respondido por el pjc50

Lea otras preguntas en las etiquetas