Remapeo de sectores defectuosos en discos duros modernos (I)

Los discos duros modernos son una maravilla tecnológica. Son dispositivos mecánicos muy baratos que almacenan terabytes de información de forma bastante fiable a pesar de girar 120 veces por segundo mientras está sometido a vibraciones y cambios de temperatura. Que un disco duro moderno funcione es sorprendente. Que funcione tan bien como lo hace es poco menos que milagroso.

Es normal que a lo largo de la vida útil de un disco duro se vayan desarrollando defectos. Si el crecimiento de defectos es lento y esporádico no significa que el disco duro esté fallando. Asegurémonos de tener los backups al día. Si el número de defectos crece muy rápidamente hay que reemplazar el disco duro lo antes posible.

Un defecto de disco puede ser temporal o permanente. Un defecto temporal típico ocurre cuando el campo magnético de un sector se ha debilitado tanto que ya no se puede leer. Si la superficie física del disco está bien podemos volver a escribir en esa parte del disco como si nada hubiera pasado. Tendríamos un defecto permanente si la superficie del disco está dañada y ya no podemos grabar datos en esa zona de forma fiable.

Un defecto permanente hace que haya una pequeña parte del disco duro que no se puede volver a utilizar. Históricamente algunos discos duros podían almacenar una lista de sectores dañados que el sistema operativo consultaba para evitarlos en el sistema de ficheros. Otra posibilidad era incluir la lista de defectos en el propio sistema de ficheros, gestionada por el sistema operativo.

En Linux, por ejemplo, tenemos la utilidad badblocks que revisa una partición y localiza los sectores defectuosos. Luego podemos usar dicha lista en herramientas como e2fsck o mke2fs para marcar esos sectores como no utilizables.

Todo esto, en realidad, es una herencia del pasado. Los discos duros modernos son auténticos ordenadores empotrados, con su propia RAM y sistema operativo. Son inteligentes. Un disco duro moderno contiene una pequeña área no utilizable de forma directa que se usa para "remapear" sectores defectuosos, de forma que de cara al sistema operativo el disco duro no contiene errores aunque, de hecho, estos van creciendo poco a poco. El disco duro seguirá proporcionando esa ilusión de perfección mientras no tengamos la mala suerte de solicitarle un sector defectuoso que aún no se ha remapeado o que el disco duro siga ganando defectos y el espacio de remapeo se haya agotado.

¿Cómo se remapea un sector?. Aunque nuestro disco duro utilice sectores de 512 bytes, por ejemplo, en disco duro se almacenan realmente más datos, digamos 512+64 bytes [1]. Los datos adicionales, calculados matemáticamente, proporcionan redundancia que permiten recuperar los 512 bytes originales aunque haya algunos errores de lectura en el disco. De hecho lo normal en un disco duro moderno es que ocurran errores constantemente, invisibles gracias a la redundancia añadida. Por ejemplo, en el disco duro de mi portátil veo esto:

Power_On_Hours          18879
Seek_Error_Rate         4878585481
Raw_Read_Error_Rate     116048711
Hardware_ECC_Recovered  115991920

El número de errores internos durante las 18879 horas de funcionamiento de mi disco duro impresiona. Pero son normales. Si no hubiese errores significaría que el disco duro podría grabar la información de forma más compacta aún, que no está aprovechando la física al límite.

Es normal que haya un cierto nivel de error. Los discos duros están diseñados para ello. La clave es que la redundancia añadida los haga invisibles.

Monitorizar el nivel de error es una buena manera de que el disco duro conozca su propia salud. Si la cantidad de matemáticas que tenemos que emplear para recuperar un sector determinado supera un umbral y va creciendo, está claro que ese sector tiene problemas. Todavía podemos leer los datos con normalidad pero puede ser buena idea que el disco duro vuelva a refrescar el sector o que emplee un sector del área de remapeo para guardar una copia.

Puede ocurrir, no obstante, que lleguemos demasiado tarde. El flujo magnético está tan degradado que los datos ya no están accesibles. Su nivel de error ha superado la capacidad de corrección de la redundancia. Podemos intentarlo unas cuantas veces, como hace SpinRite, y rezar para tener suerte una de ellas. En todo caso ese sector está dañado.

En un disco duro antiguo habría que marcar ese sector como "no utilizar" pero un disco duro moderno hace algo interesante: el disco duro sabe que ese sector es problemático así que si grabamos nueva información en él puede hacer algo similar a:

  1. Graba el dato en el sector problemático.

  2. Intentar leerlo de nuevo desde el disco.

  3. Si podemos leerlo con normalidad el problema del sector era un defecto temporal. La escritura ha creado un nuevo flujo magnético que parece aguantar.

  4. Si no podemos leer correctamente el sector que acabamos de escribir entonces nos encontramos hasta un defecto permanente. El disco duro graba el sector pendiente en un sector libre del área de remapeo y toma nota de la nueva dirección.

    A partir de ahora los accesos al sector antiguo se enviarán, automáticamente y de forma transparente, al sector nuevo del área de remapeo. El área dañada no se volverá a utilizar.

Todas estas operaciones son transparentes al sistema operativo. Es algo que hacen los discos duros modernos por su cuenta. Ya no es ni necesario ni útil marcar los sectores dañados del disco para el sistema operativo, porque el disco duro lo hace ya de forma interna.

La clave es que el remapeo de sectores se realiza al escribir en el disco duro. Esto será muy importante en mi siguiente artículo sobre este tema.

Todo esto se puede ver fácilmente mediante la monitorización S.M.A.R.T.. En concreto hay unos campos que nos interesan mucho:

  • Reallocated_Sector_Ct: Nos indica cuántos sectores ha remapeado el disco duro. Es normal que este número vaya subiendo poco a poco. Muy poco a poco. Una subida repentina debería asustarnos y suele ser el preludio de un fallo catastrófico del disco o, cuando menos, de una pérdida importante de información.

    En cualquier caso marca el fin de la vida útil del disco y debería reemplazarse.

  • Reallocated_Event_Count: Similar al contador anterior.

  • Current_Pending_Sector: Este contador es interesante. Nos indica el número de sectores que el disco duro ve como problemáticos y que intentará remapear automáticamente cuando se sobreescriban.

    Si escribimos sobre un sector que nos está dando errores pueden ocurrir dos cosas, como he descrito más arriba: Que el sector aguante o que el sector se considere perdido de forma permanente.

    En el primer caso el valor de Current_Pending_Sector bajará sin que Reallocated_Sector_Ct cambie. Hemos decido que el sector se puede seguir utilizando y nos damos por satisfecho.

    En el segundo caso el valor de Current_Pending_Sector también baja pero Reallocated_Sector_Ct sube porque se ha hecho un remapeo permanente.

En pocas palabras: un valor mayor de cero en Current_Pending_Sector implica que tenemos sectores con problemas pendientes. Normalmente tendremos que sobreescribirlos para resolver la situación, en un sentido u otro.

Actualización 20150112: Sigue leyendo: Remapeo de sectores defectuosos en discos duros modernos (II).

[1] Uno de los motivos por los que los discos duros modernos están migrando el tamaño de sector de 512 a 4096 bytes es reducir el porcentaje de redundancia necesaria para un nivel de calidad dado.