Un sector ilegible pendiente es aquel que devolvió un error de lectura y que la unidad ha marcado para reasignarse en la primera oportunidad posible. Sin embargo, no puede hacer la reasignación hasta que ocurra una de dos cosas:
- El sector se vuelve a leer con éxito.
- El sector se reescribe
Hasta entonces, el sector sigue pendiente. Entonces tienes dos formas correspondientes de lidiar con esto:
- Sigue intentando releer el sector hasta que tengas éxito
- Sobrescribir ese sector con nuevos datos
Obviamente, (1) no es destructivo, por lo que probablemente debería probarlo primero, aunque tenga en cuenta que si el disco comienza a fallar de manera grave, es probable que la lectura continua de un área defectuosa lo haga fallar mucho más rápidamente . Si tiene muchos sectores pendientes y otros errores, y le preocupan los datos del disco, le recomiendo que los ponga fuera de servicio y utilice la excelente herramienta ddrescue para recuperar la mayor cantidad de datos posible. Luego deseche la unidad.
Si el sector en cuestión contiene datos que no le interesan o que puede restaurar desde una copia de seguridad, entonces sobrescribirlos es probablemente la solución más rápida y sencilla. A continuación, puede ver los recuentos reasignados y pendientes de la unidad para asegurarse de que se haya ocupado del sector.
¿Cómo saber a qué corresponde el sector en el sistema de archivos? Encontré un excelente artículo en el sitio web de smartmontools , aquí , aunque es bastante técnico y es específico para ext2 / 3/4 y sistemas de archivos reiser.
Un enfoque más simple, que utilicé en una de mis unidades (Mac), es utilizar find / -xdev -type f -print0 | xargs -0 ...
para leer cada archivo en el sistema. Tome nota del recuento pendiente antes de ejecutar esto. Si el sector está dentro de un archivo, recibirá un mensaje de error de la herramienta que utilizó para leer los archivos (por ejemplo, md5sum) que le muestra la ruta hacia él. Luego puede concentrar sus atenciones en volver a leer solo este archivo hasta que se lea con éxito. A menudo, esto resolverá el problema, si se trata de un archivo de uso poco frecuente que solo necesita volver a leerse varias veces. Si el error desaparece, o no encuentra ningún error al leer todos los archivos, verifique el recuento pendiente para ver si ha disminuido. Si es así, el problema se resolvió leyendo.
Si el archivo no se puede leer con éxito después de varios intentos (por ejemplo, 20), entonces debe sobrescribir el archivo, o el bloque dentro del archivo, para permitir que la unidad reasigne el sector. Puede usar ddrescue en el archivo (en lugar de la partición) para sobrescribir solo un sector, copiando a un archivo temporal y luego volviendo a copiar. Tenga en cuenta que simplemente eliminar el archivo en este punto es una mala idea, porque el sector defectuoso irá a la lista gratuita donde será más difícil de encontrar. Sobrescribir completamente también es malo, porque nuevamente los sectores entrarán en la lista libre. Necesita reescribir los bloques existentes. La notrunc
opción de dd
es una forma de hacer esto.
Si no encuentra errores, y el recuento pendiente no disminuyó, entonces el sector debe estar en la lista libre o en parte de la infraestructura del sistema de archivos (por ejemplo, una tabla de inodo). Puede intentar llenar todo el espacio libre con cat /dev/zero >tempfile
, y luego verificar el recuento pendiente. Si se cae, el problema estaba en la lista gratuita y ahora ha desaparecido.
Si el sector está en la infraestructura, tiene un problema más grave y probablemente encontrará errores simplemente recorriendo el árbol de directorios. En esta situación, creo que la única solución sensata es reformatear el disco, opcionalmente usando ddrescue para recuperar datos si es necesario.
Esté atento a la unidad. La reasignación del sector es un muy buen canario en la mina de carbón , lo que potencialmente le avisa de una unidad que está fallando. Al tomar medidas tempranas, puede prevenir un derrumbe catastrófico y doloroso posterior. No estoy sugiriendo que algunas reasignaciones de sector sean una indicación de que debe descartar la unidad. Todas las unidades modernas necesitan hacer una reasignación. Sin embargo, si la unidad no es muy antigua (<1 año) o si recibe nuevas reasignaciones frecuentes (> 1 / mes), le recomiendo que la reemplace lo antes posible.
No tengo pruebas empíricas para probarlo, pero mi experiencia sugiere que los problemas de disco se pueden reducir leyendo todo el disco de vez en cuando, ya sea con un dd
disco sin procesar o leyendo cada archivo usando find
. Casi todos los problemas de disco que he experimentado en los últimos años han surgido primero en archivos raramente usados, o en máquinas que no se usan mucho. Esto también tiene sentido heurísticamente, ya que si un sector se vuelve a leer con frecuencia, la unidad tiene la oportunidad de reasignarlo cuando detecta por primera vez un problema menor con ese sector en lugar de esperar hasta que el sector sea completamente ilegible. La unidad no puede hacer nada con un sector a menos que el host acceda de alguna manera, ya sea leyéndola, escribiéndola o realizando una de las pruebas SMART.
Me gustaría experimentar con la idea de un trabajo cron nocturno o semanal que lea todo el disco. Actualmente estoy usando un "RAID de pobre" en el que tengo un segundo disco duro en la máquina y hago una copia de seguridad del disco principal cada noche. De alguna manera, esto es realmente mejor que la duplicación RAID, porque si hago el tonto y elimino un archivo por error, puedo obtener la versión de ayer inmediatamente del disco de respaldo. Por otro lado, creo que un controlador RAID de hardware hace un buen trabajo en segundo plano para monitorear, informar y solucionar problemas de disco a medida que surgen. Mi script de respaldo actual se usa rsync
para evitar copiar datos que no han cambiado, pero en vista de la necesidad de releer todos los sectores, tal vez sería mejor copiar todo, o tener un script separado que lea todo el disco sin formato cada semana.