J'avais l'habitude d'écrire le firmware du disque pour WD, et j'ai écrit une fois le firmware qui a réaffecté les mauvais blocs.
Premièrement, la plupart des blocs défectueux sont détectés lors des lectures et non des écritures. Les écritures sont effectuées à l'aveugle, ce qui signifie que les données sont écrites sans être vérifiées. Ainsi, lors d'une écriture si le média est mauvais, vous ne le saurez pas tant que l'hôte n'aura pas lu ce secteur. Il y a une petite partie du secteur (l'en-tête du secteur) qui est lue sur les écritures pour localiser le secteur correct, de sorte que s'il y a une erreur dans la lecture de l'en-tête du secteur, le lecteur réaffectera le secteur et l'écrira avec les données reçues à partir de la commande d'écriture. Mais la grande majorité des blocs défectueux sont détectés lors des lectures, et ce n'est pas parce qu'une écriture réussit dans un secteur que le média est bon ou que le secteur a été réaffecté.
Passons maintenant à la mauvaise réaffectation des blocs (également appelée réallocation). Oui, normalement, le lecteur tentera de réaffecter un secteur si l'erreur est suffisamment grave (c'est-à-dire que la défaillance ECC est suffisamment grave), mais le lecteur pourrait toujours récupérer les données après la correction ECC. Habituellement, cela se fait automatiquement. La seule exception est que l'hôte aurait pu auparavant dire au lecteur de ne pas effectuer de réallocations automatiques, mais cela est rarement fait.
Que se passe-t-il si le lecteur effectue une lecture et ne peut pas récupérer les données? Rien. L'erreur est signalée à l'hôte, mais aucune réaffectation n'est effectuée. Le problème est que le lecteur pourrait réaffecter le secteur, mais il n'a pas la moindre idée des données à écrire dans le secteur nouvellement réaffecté. S'il écrivait juste un tas de zéros, disons, puis que le secteur était relu, il retournerait tous les zéros sans aucune indication que les données n'étaient pas valides. C'est essentiellement la même chose que la corruption de données. Le lecteur ne peut pas compter sur l'hôte pour garder une trace des erreurs pour diverses raisons (par exemple, que se passe-t-il si le lecteur a été déplacé vers un nouvel hôte?), La meilleure solution consiste donc à ne rien faire lorsque les données le peuvent. t être récupéré.
Les lecteurs modernes, cependant, enregistreront l'emplacement du secteur défectueux lorsqu'il ne peut pas être réaffecté. Le nombre de secteurs défectueux en attente de réaffectation peut être trouvé dans les données SMART. Ce qui se passe, c'est que si une écriture est effectuée sur l'un des secteurs défectueux en attente de réaffectation, la réaffectation est effectuée car le lecteur dispose désormais de données valides pour y écrire après la réaffectation. Ainsi, lorsque les gens disent qu'écrire dans un mauvais secteur le réaffectera, ce n'est vraiment que la moitié de l'histoire. Le lecteur doit être lu en premier afin que le lecteur puisse découvrir tous les secteurs défectueux qui ne peuvent pas être réaffectés automatiquement. Ainsi, vous pouvez écrire un lecteur entier, et les données SMART diront qu'il n'y a pas de mauvais secteurs en attente de réaffectation, mais vous n'avez pas nécessairement effacé le lecteur de tous les secteurs défectueux. Donc, si vous voulez vraiment effacer tous les secteurs défectueux,
Il existe d'autres façons de gérer les blocs défectueux qui ne peuvent pas être réaffectés. Si le disque fait partie d'une configuration RAID redondante (c'est-à-dire autre chose que RAID 0), le logiciel RAID devrait récupérer automatiquement les données pour un secteur défectueux des autres disques et les écrire dans le secteur réaffecté. Les disques SCSI ont une commande explicite de réaffectation de blocs que l'hôte peut utiliser pour forcer la réaffectation même lorsqu'il n'y a pas de données valides à écrire dans le bloc, mais son utilisation est plutôt bas.