Pourquoi un appareil RAID 10 doit-il être initialisé?

9

Lors de la création d'un périphérique raid logiciel Linux en tant que périphérique raid10, je ne comprends pas pourquoi il doit être initialisé. La même question s'applique vraiment à raid1 ou raid0.

En fin de compte, la plupart des gens placeraient un système de fichiers d'une sorte quelconque dessus, et ce système de fichiers ne devrait pas assumer aucun état des données du disque. Chaque écriture affectera les deux disques dans une configuration raid10 ou raid1, où les N miroirs sont écrits. Il ne devrait y avoir aucune raison pour qu'un raid10 soit initialisé initialement, car cela se produira avec le temps.

Je peux comprendre pourquoi pour une configuration raid5 / 6 où il y a une exigence de parité, mais même alors, il semble que cela pourrait être fait paresseusement.

Est-ce juste pour que les gens se sentent mieux à ce sujet?

Michael Graff
la source
1
Bonne question. Il est possible d'ignorer la synchronisation lors de la création du RAID, et j'ai rencontré des recommandations pour le faire dans le cas où un ou plusieurs périphériques sous-jacents sont des disques SSD. Je ne sais pas s'il existe des scénarios dans lesquels la synchronisation est nécessaire pour un fonctionnement correct.
kasperd

Réponses:

2

La synchronisation initiale est nécessaire car toute différence entre les miroirs apparaîtrait comme une erreur lors de la vérification périodique.

Et vous devriez faire des vérifications périodiques.

Simon Richter
la source
1
Je peux voir pourquoi des vérifications périodiques de la lisibilité des données peuvent être utiles. Mais à quoi sert un contrôle périodique des répliques identiques? De telles vérifications peuvent être utiles si elles sont effectuées par un système de fichiers qui contrôle les données. Mais à la couche RAID sans connaissance du système de fichiers, vous ne pouvez pas savoir laquelle des deux répliques différentes est bonne, vous ne pouvez pas savoir comment la différence s'est produite en premier lieu et vous ne pouvez pas savoir quel fichier (le cas échéant) est affecté. Il semble donc que les alertes sur les incohérences au niveau de cette couche sont pour la plupart inutiles car l'administrateur ne peut rien faire avec les alertes de toute façon.
kasperd
Comme vous devez de toute façon lire les données, le coût de leur comparaison est minime, mais cela peut vous montrer que l'un des disques a développé un problème autrement non détecté (par exemple, une mauvaise RAM dans le cache du lecteur). L'administrateur décompose ensuite la baie, examine manuellement les différences et choisit le lecteur à remplacer.
Simon Richter
Vous devriez alors développer cela dans votre réponse.
kasperd
Je sais que cela fait de nombreuses années, mais c'est la seule raison valable que je peux voir. Je ne pense pas que cela importe autrement si les données ne sont pas synchronisées, car ces données ne sont par définition pas encore écrites, donc le système de fichiers appliqué au lecteur RAID ne lira jamais à partir de ces blocs. S'assurer que les contrôles périodiques réussissent dès le départ, cependant, rend cela nécessaire. Merci!
Michael Graff
7

Raid 1, étant un miroir, dépend de tous les disques dans un miroir étant des copies exactes les uns des autres. Prenez votre disque dur aléatoire et un autre disque dur aléatoire, et vous disposez peut-être de données différentes, violant ainsi cette présomption. C'est pourquoi l'initialisation est nécessaire. Il copie simplement le contenu du premier lecteur sur d'autres. Notez que dans certaines conditions, vous pouvez vous en tirer sans initialiser les disques - généralement, les nouveaux appareils d'usine ont déjà des zéros partout, vous pouvez donc simplement ignorer cela. L' mdadmoption --assume-cleanfait cela, mais vous avertit:

   --assume-clean

Dites à mdadm que la baie préexistait et est connue pour être propre. Cela peut être utile lorsque vous tentez de récupérer après une panne majeure, car vous pouvez être sûr qu'aucune donnée ne sera affectée à moins que vous n'écriviez réellement dans la baie. Il peut également être utilisé lors de la création d'un RAID1 ou RAID10 si vous souhaitez éviter la resynchronisation initiale, mais cette pratique - bien que normalement sûre - n'est pas recommandée. N'utilisez ceci que si vous savez vraiment ce que vous faites.

Si vous ne le faites pas, il y a une différence entre les lecteurs et leur lecture, vous ne savez pas ce que le lecteur lira. Vous devriez être assez en sécurité avec un système de fichiers (mais notez ci-dessous), car vous écrivez probablement avant de lire quoi que ce soit sur cet appareil, puis vous êtes clair.

Notez qu'au moins Linux mdadminitialisera le tableau en arrière-plan. Vous pouvez facilement créer FS au-dessus de lui la première seconde. La performance va souffrir jusqu'à la fin de l'initialisation, mais c'est tout.

Mais:

a) Lorsque vous effectuez mkfscertains utilitaires, vérifiez s'il y a déjà quelque chose sur ce disque. Bien que cela ne touche que quelques régions bien connues du lecteur, il lit avant d'écrire quoi que ce soit, vous mettant ainsi en danger.

b) Si vous effectuez une resynchronisation périodique de votre baie, le périphérique RAID ne sait rien de votre FS. Il lit simplement chaque bloc de chaque appareil et les compare. Et si vous n'utilisez pas un FS de copie sur écriture (par exemple ZFS ou BTRFS) et ne remplissez jamais votre FS, il est parfaitement plausible qu'un bloc reste non initialisé du point de vue FS pendant des années.

Pourquoi resynchroniser avec des périphériques RAID1?

Pour la même raison, vous resynchronisez avec des périphériques RAID5 ou tout autre niveau (sauf RAID0). Il lit toutes les données et compare / vérifie les sommes de contrôle RAID (en RAID 5 ou 6). Si un peu a été retourné de quelque manière que ce soit (parce que la mémoire HD a été retournée spontanément, parce que les téléphones portables de vous et de vos 5 voisins viennent d'interférer accidentellement sur cette région particulière du plateau, peu importe), il détectera une incohérence, mais ne pourra pas T'aider. Si, OTOH, l'un des disques durs signale simplement "Je ne peux pas lire ce bloc", ce qui est plus probable avec un disque défectueux, vous venez de détecter une panne tôt et de réduire le temps que vous utilisez en mode dégradé (en comptant à partir de l'échec du lecteur, pas à partir du moment où vous le remarquez). Raid ne vous aidera pas si un disque tombe en panne et un mois plus tard, l'autre échoue si vous ne le faites pas.

RAID10

Maintenant, pour RAID10, tout ce qui précède est valable. Après tout, RAID10 n'est qu'un moyen intelligent de dire «Je mets mes deux périphériques RAID1 dans une paire RAID0».

Caveat:

C'est tout un comportement indéfini. Pourquoi j'ai vérifié sur Linux, en utilisant mdadm, d'autres implémentations RAID logicielles peuvent se comporter différemment. Les autres versions du noyau Linux et / ou des mdadmoutils que j'utilise peuvent également se comporter différemment.

Torinthiel
la source
1
Veuillez fournir une citation pour If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Je pense que cette déclaration est incorrecte. Fournissez au moins un exemple du message d'erreur tel qu'il est possible de consulter la source pour vérifier dans quelles circonstances il est produit.
kasperd
1
C'est mieux. Avez-vous vérifié la déclaration concernant l'écriture de zéros? Je pense qu'il n'écrit pas de zéros mais copie plutôt l'un des disques sur l'autre (s).
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.En danger de quoi? Je me rends compte que la lecture peut entraîner quelque chose, mais pourquoi cela entraînerait-il un danger pour l'utilisateur si (a) les informations lues ne sont utilisées nulle part et (b) une écriture est sur le point de se produire?
Vegard
1
@kasperd vous avez raison, il copie le premier appareil sur le second. Un test sur urandomun périphérique initialisé, avec Linux mdadm, montre que les premiers 80k restent différents, ainsi que les derniers 48k. Ce dernier est probablement dû à l'arrondissement de la taille du RAID à la taille du bloc. Je n'ai pas testé avec différentes tailles de périphérique, mais le 80 + 48 est exactement la différence de taille entre le périphérique RAID et le périphérique sous-jacent.
Torinthiel
1
Une chose à considérer est qu'en général lors de l'initialisation, le système de raid lit TOUJOURS le disque A et le copie sur le disque B. Pourquoi? Comme vous pouvez utiliser le disque pendant l'initialisation, vous pouvez avoir écrit des données au bloc 100 000. Une fois que le raid init a atteint ce bloc, A et B sont déjà identiques, donc rien ne se passe. S'il s'agissait plutôt de mettre à zéro des blocs, cela effacerait les bonnes données. Ainsi, encore une fois, je vois deux raisons de garantir que les blocs sont identiques: "c'est toujours fait" et "pour que vous puissiez exécuter une vérification plus tard" - je remets également en question l'utilité de cette vérification. Lire c'est bien, comparer? pas certain.
Michael Graff
5

N'oubliez pas que RAID 1 est un miroir et que RAID 10 est une bande de miroirs.

La question est, sur quel disque dans chaque miroir les données sont-elles valides? Dans un tableau fraîchement créé, cela ne peut pas être connu, car les disques peuvent avoir des données différentes.

Souvenez-vous également que le RAID fonctionne à un niveau très bas; il ne sait rien des systèmes de fichiers ni des données qui pourraient être stockées sur le disque. Il pourrait même ne pas être un système de fichiers en cours d' utilisation.

Ainsi, l'initialisation dans ces tableaux consiste à copier les données d'un disque dans chaque miroir telles quelles sur l'autre disque.

Cela signifie également que le tableau est sûr à utiliser dès la création et peut être initialisé en arrière-plan; la plupart des contrôleurs RAID (et Linux mdraid) ont une option pour cela, ou le font automatiquement.

Michael Hampton
la source
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Michael Hampton
1

En termes simples, deux nouveaux disques ne devraient pas être des copies parfaites l'une de l'autre dès le début.

Ils doivent être transformés en copies parfaites les uns des autres.

De plus, l'initialisation comprend également la configuration du superbloc de métadonnées avec des informations sur la configuration de la baie.

Le fichier / proc / mdstat devrait vous indiquer que le périphérique a été démarré, que le miroir est en cours de reconstruction et un ETA de la fin de la reconstruction. La reconstruction se fait en utilisant une bande passante d'E / S inactive. Ainsi, votre système doit toujours être réactif, bien que les voyants de votre disque affichent également beaucoup d'activité.

Le processus de reconstruction est transparent, vous pouvez donc réellement utiliser l'appareil même si le miroir est actuellement en cours de reconstruction.

HBruijn
la source
2
Mais pourquoi doivent-ils être des copies parfaites les uns des autres? Qu'est-ce qui pourrait éventuellement rompre si les deux sont incompatibles dans des secteurs qui n'ont jamais été utilisés par le système de fichiers?
kasperd
@kasperd RAID est implémenté à un niveau inférieur à tout système de fichiers. Donc la question devient, quel est le "système de fichiers" auquel vous vous référez.
Taemyr
@Taemyr Je ne fais référence à aucun système de fichiers spécifique. Choisissez ce que vous préférez et expliquez ce qui se briserait en l'utilisant sur un RAID-1 où les répliques n'étaient pas synchronisées avant d'initialiser le système de fichiers.
kasperd
@kasperd Il n'y a aucun système de fichiers à casser au niveau où le RAID fonctionne.
Taemyr
1
Dans mon cas, comme l'affiche originale, je me fiche de quel système de fichiers. Je ne connais aucun système de fichiers qui lira les secteurs qui n'ont jamais été écrits, donc aucun état indéterminé de ces secteurs non écrits n'a d'importance.
Michael Graff