3 votes

Le disque dur effectue-t-il une vérification en lecture en même temps qu'il écrit des données ?

Comme nous le savons tous, les disques durs modernes gèrent les secteurs défectueux à l'intérieur de leur microprogramme, c'est-à-dire que lorsque le disque détecte un secteur physique endommagé ou peu fiable, il remplace le secteur défectueux par un bon secteur provenant de la réserve de secteurs. Ce mécanisme élimine la nécessité pour le système d'exploitation de gérer lui-même les secteurs défectueux. Les utilisateurs peuvent connaître l'évolution du nombre de remplacement de secteurs à partir de l'élément S.M.A.R.T. appelé "nombre de secteurs réalloués".

Un exemple de disque dur avec trop de secteurs réaffectés (l'indice 133 passe sous le seuil 140) :

HDD SMART err1 (CrystalDiskInfo-6.5.2) HDD SMART err2

Ma question est la suivante : quand le microprogramme du disque dur détermine-t-il qu'un secteur doit être remplacé ? J'imagine une situation idéale :

Lorsque le disque dur écrit un secteur, il procède immédiatement à une vérification de la lecture (vérification de la somme de contrôle CRC et utilisation de l'ECC pour récupérer les bits d'erreurs logicielles). Si la vérification échoue ou si le secteur est jugé non fiable par le microprogramme, ce dernier peut immédiatement remplacer le secteur afin qu'aucune donnée utilisateur ne soit perdue (du moins pas au moment où elle est écrite sur le disque). C'est le moment idéal pour remplacer le secteur, car les données à écrire restent maintenant sûrement dans le cache interne du disque dur. Le lecteur peut essayer autant de secteurs "hot spare" qu'il le souhaite jusqu'à ce qu'il en trouve un bon.

Si mon idée ne correspond pas à la réalité, alors le disque dur ne peut vérifier le secteur écrit que la prochaine fois que l'utilisateur le récupère ; mais si la prochaine récupération échoue aux tests CRC et ECC, et que le cache correspondant a été supprimé, nous ne pouvons rien faire d'autre que de savoir que les données précédemment écrites ont été définitivement perdues.

Quel comportement est le vrai ? Existe-t-il des articles sur le web qui clarifient ce point ?

Le disque SSD doit faire face à la même situation, alors qu'en est-il du SSD ? Le cas du SSD semble plus facile à comprendre, car je peux facilement imaginer que le SSD peut faire une vérification rapide de la lecture après l'écriture, très rapidement ; cependant, un tel schéma est-il pratique pour un disque dur à broche ? Il semble que la tête du disque dur peut faire soit une lecture soit une écriture à un moment donné, donc pour vérifier l'écriture, il faut attendre un autre tour de rotation jusqu'à ce que le secteur écrit soit à nouveau positionné sous la tête - ce qui ralentirait considérablement le débit de données. -- Je suis déconcerté.

3voto

sysadmin1138 Points 129885

Les disques durs effectuent une forme de vérification de l'écriture, et ce depuis un certain temps. À l'époque des lecteurs bruyants, vous pouviez savoir à l'oreille si un lecteur était en train de broyer un mauvais bloc. Je ne peux pas expliquer le mécanisme exact, et je suis sûr que la façon exacte de le faire a un peu changé avec le temps. déplacé à travers les différentes technologies magnétiques . Mais la panne peut être détectée sur écrire et le secteur sera retiré de la réserve de réaffectation.

Il peut également être détecté en lecture, avec le cas d'échec que vous avez déjà identifié. Certaines matrices RAID haut de gamme (et bien sûr ZFS) ont des routines d'analyse en arrière-plan pour lire le stockage pendant les périodes d'inactivité afin de localiser ces erreurs. Dans un RAID paritaire ou en miroir, vous avez théoriquement une bonne copie ailleurs, ce qui facilite la récupération.

Une cellule SSD qui ne parvient pas à se programmer renverra un état d'échec similaire, et un nouveau bloc sera retiré du pool de réaffectation. Les cellules SSD usées ont tendance à passer en lecture seule, les données sont donc récupérables. Les cellules réellement cassées, c'est une autre histoire, tout comme un morceau de sable atterrissant sur un plateau de disque.

3voto

Anne van Rossum Points 226

Peut-être. Le lecteur peut ou non prendre en charge le jeu de fonctions Écriture-Lecture-Vérification. S'il s'agit d'un périphérique de type ATA et que hdparm est adapté au lecteur, vous pouvez essayer d'activer la fonction Write-Read-Verify à l'aide de la commande suivante :

sudo hdparm -R1 /dev/sdc

en supposant que le lecteur est sdc . Vous pouvez consulter lsblk pour savoir de quel lecteur il s'agit. -R0 pour le désactiver.

S'il vous dit write-read-verify = 2 alors la fonction est activée.

Sur l'un de mes disques seagate 7200 rpm enterprise sata, elle a réduit les performances d'écriture séquentielle à environ 12MB/sec. Vous pouvez vous attendre à ce que les disques avec cette fonction activée aient des performances d'écriture sévèrement dégradées lorsque le disque est saturé d'écritures.

Un lecteur a une liberté totale dans la façon dont cette fonction est mise en œuvre, la spécification n'insiste même pas sur une comparaison complète octet par octet, le lecteur est libre de faire aussi peu qu'un contrôle CRC s'il le souhaite, ou même rien, le contrôle est spécifique à la mise en œuvre.

Un lecteur peut ou non imposer qu'un échec de vérification entraîne une erreur d'écriture. Il est probable qu'un lecteur l'implémentera de manière à ce qu'un échec de la vérification entraîne une erreur d'écriture, car cela semble plus conforme à l'intention de l'utilisateur qui a activé cette fonction. Si le lecteur veut que vos succès d'écriture soient irréprochables, il vérifiera vraiment avant de réussir votre écriture. C'est ce que mon disque Seagate semblait faire.

Pour vérifier une écriture, il doit attendre que le disque tourne à nouveau, et attendre que les données écrites passent à nouveau devant la tête. Imposer une attente de rotation à chaque écriture dégrade gravement les performances. À 7200 tr/min, le plateau ne tourne que 120 fois par seconde. Vous pourriez être plafonné à 120 E/S par seconde, au moins périodiquement.

1voto

Rüdiger Stevens Points 5381

La vérification est effectuée à chaque lecture, car le microprogramme lit le secteur et son CRC/ECC et s'il ne correspond pas au secteur, il essaie de le relire (le réparer). L'article de Wikipedia Détection et correction des erreurs ne contient qu'une seule phrase :

Les disques durs modernes utilisent des codes CRC pour détecter et des codes Reed-Solomon pour corriger les erreurs mineures dans les lectures de secteur, et pour récupérer les données des secteurs qui ont "mal tourné" et stocker ces données dans les secteurs de réserve.

Mais la référence contient une explication détaillée :

Redondance structurée ECC jusqu'à 200 bits de 256/512 dans un secteur-CRC-Bits brouillés- RLL ajoute des bits pour provoquer des impulsions et la parité.

Lorsque les données sont écrites dans le lecteur, elles sont codées. Les données réelles ne sont jamais écrites, mais seulement l'interprétation des données. Si vous Si vous pensez qu'un lecteur contient des 0 et des 1, vous vous trompez. vous n'y pensez pas correctement. Les données ressemblent plus à une forme d'onde qui est écrite sur le disque. Elles doivent être réinterprétées à leur sortie avant qu'elles puissent Avant d'être écrites, les données sont randomisées. Cela permet d'éliminer les modèles qui pourraient être identiques afin que l'ECC ne soit pas confusion. Il est difficile de faire de la détection de modèle sur un modèle qui apparaît encore et encore. qui apparaît sans cesse. Les interférences électromagnétiques peuvent être réduites et avoir moins d'effet sur le stockage des bits et les commandes de synchronisation. stockage des bits et les commandes de synchronisation.

Le lecteur essaie de relire les données de plusieurs manières différentes avant de d'abandonner, la plupart d'entre elles utilisant l'ECC. Il est possible que l'ECC corriger de manière incorrecte les données dans certaines circonstances si les données se présentent dans un certain ordre. dans un certain ordre. Les commandes de lecture ECC utilisent une numérotation ODD d'au moins 3 afin de ne pas provoquer une chance sur deux dans la sélection de 2.

Read ignoring ECC est une commande LBA 28 "Read Long" et elle a été désactivée. dans 48 bits car il a été déterminé qu'il était obsolète dans les lecteurs de plus de 137 gigaoctets. Aucun ECC d'ignorance de lecture n'est disponible après 137 gigs. Les tentatives standard de tentatives sont essayées et sont généralement de 10 essais dans la plupart des disques durs. La lecture d'un disque ignorant l'ECC peut entraîner une corruption possible des données. données, mais c'est parfois le seul moyen d'obtenir les données dans ces secteurs en cas de problème avec le disque dur. secteurs s'il y a un problème avec le PCB ou si l'ECC ne peut pas lire les données correctement.

Si le secteur est jugé illisible par l'encodeur ECC alors le secteur est réessayé. Reed Solomon en conjonction avec le secteur secteurs, on s'attend à ce que les erreurs de données soient corrigées par l'ECC. Les bits de parité sont supprimés.

et :

Après l'écriture des données, un bloc de 4 octets de données ECC est écrit. Après la lecture des 512 octets, le lecteur calcule l'information ECC et lit les blocs de données ECC. lit les blocs de données ECC et les compare. S'ils ne sont pas égaux le lecteur relit les données jusqu'à ce qu'un dépassement de temps se produise, entraînant la perte des données ECC. de données. S'il n'est pas en mesure de relire et de corriger l'erreur, il va l'erreur, le drapeau UNC indique que les données en erreur ne peuvent pas être corrigées. Il est possible d'effectuer une récupération des données en ignorant l'ECC, mais vous n'aurez aucun moyen d'y parvenir. moyen de vérifier que les données lues étaient correctes. Ceci devrait être fait comme dernière phase pour capturer les données qui n'ont pas pu être lues autrement. d'une autre manière.

J'en conclus donc que non, le lecteur ne vérifie pas les données lors des opérations d'écriture en effectuant une lecture supplémentaire. Mais ce n'est pas un désastre total car il est possible de réparer les données grâce à l'ECC pendant la lecture (parfois ou la plupart du temps ?).

Mais enfin, nous ne savons pas ce que pourrait être une "reprise d'écriture". Peut-être seulement un désalignement de la tête pendant l'écriture, causé par des vibrations ? Ou un secteur physiquement endommagé qui ne peut pas être ciblé du tout ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X