Quelle est la granularité d'un disque dur URE (erreur de lecture irrécupérable)?


8

tl; dr dans le cas où un URE se produit sur un disque dur , vais-je perdre 1 bit, 1 octet ou la taille d'un secteur (512 octets ou 4096 octets AF)? et si possible expliquer pourquoi?

Contexte: La question se pose ici lorsqu'un disque dur a un problème de lecture des données. Un disque peut sûrement échouer, laissant toutes ses données perdues (DISK FAIL), mais le cas que je pose ici est que lorsqu'une petite partie seulement est perdue (URE, une erreur de lecture non corrigible).

Même si j'ai cherché des informations concernant l'URE, j'en ai découvert peu avec certitude. Cela pourrait avoir sa cause en ce que ce qui se passe en interne dans le lecteur, c'est-à-dire ce qui est caché de l'interaction directe de l'utilisateur comme la correction ECC, est pour moi difficile à relier à ce à quoi j'accède en tant qu'utilisateur - les secteurs.

Imaginons que le disque dur ait du mal à lire les données.

Dans cette situation, cela doit sûrement signifier que:

  • (a) certains bits du secteur ne peuvent pas être lus, ou
  • (b) tous les bits peuvent être lus, mais ils ne réussissent pas un test de somme de contrôle (bien sûr, en cas de problème, un secteur 4096 octets n'est pas seulement 8 * 4096 bits, mais quelques bits / octets supplémentaires pour la vérification / correction des erreurs (c'est-à-dire des bits de parité) ) (c) ????

Non, je crois que lorsque nous sommes dans la situation dans laquelle une combinaison de (a) et (b) s'est produite et qu'une reconstruction fiable des octets du secteur 4096 ne peut pas être effectuée, il est excessif de supposer que tous sont nécessairement des pages de garde , en fait, si nous étions conscients de la logique de correction d'erreur hdd interne, nous pourrions plutôt dire "regardez quelque chose ne vérifie pas, et avec un bon changement au moins 1,2,3, n bits / octets des données de bloc sont" faux " ". Si nous sauvegardions de manière redondante les chaînes d'octets ASCII "bonjour, bonjour ....., bonjour" dans ce secteur, nous pourrions avoir encore une bonne succession de "bonjour, bonjour ...." avant qu'il y ait un "... Uellohello ... "(c'est-à-dire" e "->" U ").

Quelle est donc la granularité d'un URE?

MISE À JOUR: il y a eu un commentaire introduisant l'idée d'un mauvais secteur (et suggérant que cela reflète la granularité d'un événement URE. Ce n'est pas absurde, de le suggérer et peut être utilisé pour répondre à la question. Pourtant, je viens de lire un autre connexe question demandant des secteurs illisibles en attente (ici /unix/1869/how-do-i-make-my-disk-unmap-pending-unreadable-sectors ) ce qui m'amène à penser que dans certains Dans les scénarios, il y a en effet une ligne plus floue entre les données perdues en cas d'URE.


Il s'agit généralement de dizaines de milliers de blocs endommagés à la fois dans le cas d'une tête écrasée. S'il s'agit de poussière, etc., l'accès à proximité de blocs peut propager les dégâts. Donc, c'est rarement aussi simple qu'une partie d'une plus grande zone peut être reconstruite.
JamesRyan

@JamesRyan bon indice, cela peut toujours être pire. Peut-être que je demandais simplement le moins mauvais cas possible (c'est seulement pour perdre un secteur, ou comme cela a été en partie résolu dans les bonnes réponses, une partie des données des secteurs, selon le type à l'intérieur de celui-ci). il faudra peut-être en savoir plus sur la genèse des erreurs illisibles (et leur persistance, c'est-à-dire la pourriture aléatoire des bits, par rapport à l'impact du crash de la tête). Mais nous voulons les questions pertinentes ici, donc je ne l' ai pas alourdissent inutilement la question plus
humanityANDpeace

Réponses:


8

Le code de correction d'erreur sur un disque dur est un bloc de données supplémentaire associé à chaque secteur matériel. Lors de l'écriture, le micrologiciel du lecteur calcule ces données et les écrit avec les données de l'utilisateur. Pendant la lecture, le micrologiciel lit l'ECC avec les données et les vérifie ensemble.

Pour un disque dur traditionnel, le secteur matériel est de 512 octets. Pour un lecteur au format avancé, c'est 4K octets (peu importe si le lecteur présente des secteurs de 512 octets ou 4K octets à l'interface, c'est-à-dire 512e contre 4kn).

Le résultat de la vérification après une lecture a essentiellement trois résultats possibles:

  • secteur a été lu sans erreur. Ce n'est en fait pas complètement courant sur les disques durs modernes; les densités de bits sont telles qu'elles dépendent du fonctionnement de l'ECC.

  • secteur a été lu avec des erreurs corrigibles. Comme indiqué ci-dessus, ce n'est pas rare; c'est attendu. Le lecteur renvoie les données, avec correction d'erreur appliquée, à l'utilisateur.

  • le secteur a été lu mais il y avait trop de "mauvais bits"; les erreurs n'ont pas pu être corrigées.

Dans ce dernier cas, le lecteur ne renvoie normalement aucun contenu; il renvoie simplement un état indiquant l'erreur. En effet, il n'est pas possible de savoir quels bits sont suspects, encore moins quelles devraient être leurs valeurs. Par conséquent, le secteur entier (bits ECC et tous) n'est pas fiable. Il est impossible de déterminer quelle partie du mauvais secteur est mauvaise, sans parler de son contenu. L'ECC est une "gestalt" qui est calculée sur l'ensemble du contenu du secteur, et s'il ne correspond pas, c'est l'ensemble du secteur qui n'est pas apparié.

SpinRite fonctionne en essayant simplement de lire le secteur défectueux encore et encore, en utilisant une fonction de "lecture de maintenance" qui renvoie les données (mais sans bits ECC) même si le lecteur dit "erreur non corrigible". Comme indiqué dans la description liée par DavidPostill, il peut réussir avec une lecture sans erreur (en fait "corrigeable" est plus probable); ou il peut être en mesure de déduire, essentiellement en faisant la moyenne des bits retournés ensemble, une estimation raisonnable du contenu du secteur. Il n'a pas plus de capacité de corriger précisément les erreurs à l'aide de l'ECC que le lecteur; c'est mathématiquement impossible.


Est-il encore mathématiquement impossible si les données à l'intérieur de la charge utile 4096Byte étaient elles-mêmes une combinaison d'une charge utile 4000Bytes et d'un autre ECC 96Byte au-dessus? (par exemple parce que j'étais prêt à sacrifier la capacité de récupération dans la disposition du magasin de données?).
humanityANDpeace

je suppose que ce n'est mathématiquement impossible que dans l'hypothèse implicite qu'il n'y a plus de redondance à l'intérieur des données, non? - et aussi une excellente réponse!
humanityANDpeace

1
Sûr. À ce stade, ce n'est qu'un autre canal peu fiable, mais s'il contient suffisamment de redondance. Le problème est que les pilotes de disque standard du système d'exploitation ne vous donneront pas du tout le contenu du secteur si le lecteur pense que les erreurs ne sont pas corrigeables. RAID-5 et les schémas de parité similaires font la même chose au niveau d'une "couche externe" plutôt qu'à l'intérieur des champs de données des secteurs existants.
Jamie Hanrahan du

« la prise » avec les pilotes os pour donner en retour (à la demande) tout, même des données non vérifiées est un problème, en tant qu'utilisateur non-windows je leur ai demandé ce spécifiquement unix.stackexchange.com/questions/228254/...
humanityANDpeace

3

Quelle est la granularité d'un URE?

Les erreurs de lecture irrécupérables (URE) sont des échecs de lecture de secteur. Si le secteur ne peut pas être lu sans erreur, peu importe qu'il s'agisse d'un seul octet ou de tous les octets du secteur.

La granularité est la taille du secteur .

Même si un seul octet a échoué, vous ne récupérerez normalement aucune des données de ce secteur sans utiliser de logiciel spécialisé.


Les données d'un secteur défaillant peuvent-elles être récupérées?

SpinRite dit:

SpinRite est même capable de récupérer la plupart des données dans un secteur qui ne peut jamais être parfaitement lu et que tout autre logiciel utilitaire rejette en totalité.

Voir Comment SpinRite Restaure Illisible données .


Avertissement.

Je ne suis en aucun cas affilié à SpinRite et je ne l'ai jamais utilisé.


1
J'ai tendance à penser que c'est une bonne réponse, non pas parce que je suis nécessairement d'accord que dans le cas d'un URE, il est nécessaire de perdre complètement un secteur (c'est-à-dire 4k de données), mais parce que le disque dur peut même rejeter cette part de la "mauvais secteur" qui aurait encore de la valeur. La présentation des arguments SpinWrite soutient cette idée, donc la réponse offre également des informations supplémentaires, super.
humanityANDpeace

2

Il n'y a rien de tel que "ne peut pas lire un peu", sauf si vous avez une erreur matérielle vraiment grave comme la tête ne pouvant pas rechercher la bonne piste, ou la piste d'asservissement est endommagée et le secteur correct ne peut pas être trouvé . De toute évidence, dans les deux cas, vous auriez, à tout le moins, tout un secteur illisible.

Sinon, vous récupérez toujours des bits, ce sont probablement des bits incorrects . C'est là qu'intervient le code correcteur d'erreurs; il ajoute un certain nombre de bits ECC supplémentaires à chaque secteur, de sorte que toute combinaison correcte de bits de données et de bits ECC respecte une règle algébrique. Si tous les bits ont été lus correctement, le code sera validé et les données pourront être retransmises directement. Si un petit nombre de bits n'a pas été lu correctement, le code ECC peut être utilisé pour déterminer exactement lesquels et les corriger, de sorte que toutes les données sont renvoyées correctement. Si un plus grand nombre de bits a été lu de manière incorrecte, le code ECC peut détecter qu'il y a eu une erreur, mais il n'a plus suffisamment d'informations pour déterminer quels bits sont incorrects; il s'agit d'une erreur de lecture non corrigible. Si unun très grand nombre de bits n'est pas lu correctement, alors le code peut être validé correctement "par accident" et le lecteur renverra des données corrompues, mais avec suffisamment de bits ECC, la probabilité que cela se produise peut être rendue aussi petite que vous le souhaitez.

Donc, pour répondre à la question, je pense que vous vouliez savoir - s'il y avait une erreur de lecture partielle mais suffisamment d'informations étaient disponibles pour déterminer où l'erreur s'est produite, alors elle peut également être corrigée, et l'ordinateur ne verra aucune erreur du tout . Cela se produit en fait constamment. Une erreur non corrigée se produit lorsqu'il n'est pas possible de déterminer quels bits de données sont valides et lesquels ne le sont pas, et puisque le code de correction d'erreur est calculé sur un secteur, cela se produit lors de la granularité du secteur.


1

Après l'avoir examiné et inspiré par la réponse https://superuser.com/a/969917/160771 de https://superuser.com/users/337631/davidpostill

Je voudrais répondre en présentant une réponse alternative quelque peu élargie. Tout d'abord, il est vrai que le disque dur et son micrologiciel sont à l'origine d'un événement URE, c'est-à-dire que les données ne peuvent pas être lues. De plus, il est vrai que les données sont écrites sur disque dans des secteurs de 512 ou 4096 octets de données utilisables et quelque 50 ou 100 octets respectifs de données supplémentaires qui devraient permettre la vérification et la correction des erreurs.

Parler d'un URE se fait donc naturellement dans le cadre d'un secteur de disque dur. Le terme mauvais secteur est certainement quelque peu lié, mais pas identique à la situation actuelle lorsque nous avons un secteur URE.

Un secteur avec quelques problèmes à lire sans erreur, n'est pas forcément totalement dénué de sens. Il se pourrait qu'en effet, les 4096 données soient corrompues, mais il se pourrait également que seulement 1 bit de plus que ce qui était corrigeable de manière fiable (via les données ECC supplémentaires redondantes ajoutées à chaque secteur) ait été corrompu.

En casese, dans lequel seuls quelques très peu d'octets de plus que hdd a pu corriger ont été corrompus, il y a des changements que la fraction des 4096 octets contient des données significatives.

Un exemple pourrait être que le 4096 représente les caractères ASCII de 2 phrases. Il est alors possible que le chapeau d'une phrase ou plus soit complètement intact. Il est également possible que chaque 2e ou 3e lettre ait été supprimée. Si les données de 4096 sont perdues dans un événement URE, cela dépend donc de l'interprétation et dépend des données. On pourrait imaginer que les données elles-mêmes avaient une autre couche de shell ECC, ce qui permettrait une récupération ultérieure.

Par conséquent, il est bon que la plupart des firmwares traitent les secteurs URE différemment des mauvais secteurs:

En règle générale, le remappage automatique des secteurs se produit uniquement lorsqu'un secteur est écrit. La logique derrière cela est probablement que même si un secteur ne peut pas être lu normalement, il peut toujours être lisible avec des méthodes de récupération de données. (sur https://en.wikipedia.org/wiki/Bad_sector )

Ou, dans une certaine mesure, il se pourrait qu'une partie du secteur contienne encore des données utilisables.


Notez que l'article est marqué comme "nécessite l'attention d'un expert", "contient peut-être des recherches originales" et cette déclaration particulière est marquée comme "une citation nécessaire". La façon dont il est écrit ("vraisemblablement" ??) donne également l'impression que quelqu'un spécule, plutôt que quelque chose qui peut être corroboré avec du matériel source de haute qualité.
un CVn du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.