4 votes

D'où viennent les définitions des tableaux md ?

J'ai créé une matrice md dans un ordinateur ARM avec deux disques USB/SATA en RAID 1. J'ai ensuite déplacé les deux disques sur mon bureau Ubuntu et j'ai installé mdadm . L'installation a détecté le RAID et a ajouté la définition à /etc/mdadm/mdadm.conf . Alors, d'où vient-il ?

Plus tard, j'ai recréé le RAID à partir de mon bureau et maintenant (même après avoir redémarré) mdadm --examine --scan afficher les deux tableaux :

ARRAY /dev/md/0  metadata=1.2 UUID=19846240:ff2a5429:8b22a9bd:a3760e2e name=microserver.delrio.red:0
ARRAY /dev/md/0  metadata=1.2 UUID=49a26458:5449d0ff:4606e203:ddad2fe8 name=ubuntu:0

Lorsque vous créez une matrice RAID avec mdadm dans GNU/Linux, où est stockée la définition du tableau ?

Comment puis-je supprimer seulement le premier ?

3voto

dmourati Points 24230

Les métadonnées sont stockées dans le fichier superbloc .

Pour supprimer, je pense qu'il faut regarder mdadm --zero-superblock. Assurez-vous d'avoir une sauvegarde des métadonnées avant de commencer à bricoler.

3voto

peterh Points 4884

Il est très différent d'un système à l'autre. Le logiciel linux raid utilise un superbock raid, qui se trouve sur les derniers 64kB de chacun des périphériques membres.

Plus précisément, si la taille de l'appareil est de n octet, le superbloc du raid est à n&~65535-65536 .

Le superbloc raid se trouve à la fin, car dans les niveaux raid en miroir, il est plus facile d'utiliser un périphérique membre indépendamment de la matrice (parce que vous pouvez simplement le monter, bien sûr vous devez faire une récupération de la matrice après cela).

Le format exact des superblocs de raid est décrit en détail dans le document suivant ce wiki .

Ses données réelles en octets peuvent être visualisées/modifiées par n'importe quel éditeur hexa, par exemple dhex .

En pratique, il décrit l'ensemble de la configuration du raid (niveau du raid, somme de contrôle), ainsi que le périphérique membre de l'ensemble de la matrice.

Lors de l'initialisation du raid, le noyau lit les superblocs et examine leur cohérence. Les membres incohérents ne sont pas insérés dans le tableau.

mdadm --examine --scan affiche exactement ces informations sur les superblocs raid, sans l'intervention du pilote raid du noyau.

Dans votre cas, il y a une incohérence évidente dans votre tableau. D'ici, il n'est pas facile d'en trouver la cause. Mais vous disposez d'un RAID1, qui est un miroir, et il n'y a donc pas de risque réel de perte de données. Le plus simple est de faire ce qui suit :

  1. Vous détruisez le superbloc du raid sur l'un des membres du raid avec un mdadm --zero-superblock commandement,
  2. Puis réinsérer ce dispositif dans le tableau avec un mdadm --add .

Une nouvelle resynchronisation sera lancée.

P.s.#1 :

Je pense que le superbloc raid a déjà été réécrit par votre ubuntu, mais ce n'est pas sûr. Mettre à zéro le superbloc et réinsérer le périphérique devrait résoudre le problème.

P.s.#2 :

Le format du superbloc raid est indépendant de la plate-forme, il devrait être identique jusqu'au dernier octet entre les différentes architectures, même dans le cas d'une incompatibilité d'endianness. Votre problème n'est certainement pas une incompatibilité architecturale, mais une erreur d'écrasement du superbloc raid sur l'un de vos appareils.

0 votes

Merci, c'est très clair. Je me suis rendu compte que j'avais créé le premier tableau avec des disques (sda, sdb) et le second avec des partitions (sda1, sdb1), ce qui explique l'incohérence. J'ai résolu le problème en arrêtant le tableau ( mdadm --stop /dev/md0 ), en supprimant le superbloc du premier ( mdadm --zero-superblock /dev/sd{a,b} ) et le réassemblage du tableau ( mdadm --assemble /dev/md0 /dev/sd{a,b}1 ). Aucune resynchronisation n'est nécessaire.

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