« Mdadm » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 148 : Ligne 148 :
Tous les raids auto-détectés via les meta-données :
Tous les raids auto-détectés via les meta-données :
<pre>mdadm --assemble --scan</pre>
<pre>mdadm --assemble --scan</pre>
=Vérifier un raid=
soit :
<pre>echo check > /sys/block/md0/md/sync_action</pre>
soit :
<pre>/usr/share/mdadm/checkarray /dev/md0</pre>


=Voir l'architecture des disques et partition=
=Voir l'architecture des disques et partition=
<pre>lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT</pre>
<pre>lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT</pre>

Version du 23 octobre 2020 à 23:35


Création d'un array raid1 avec 2 disques

Créez les partitions sur les différents disques et définissez le type de partition à fd

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

Si vous avez écrit des zero (disque mécanique) ou trim/blkdiscard (disque SSD), vous pouvez ajouter l'option --assume-clean afin d'éviter la synchronisation initiale. Ne le faite pas si vous n'êtes pas sur de vous car un array non synchronisé peut avoir des conséquences très néfastes pour l'intégrité de votre array.

Ajoutez l'array fraîchement créé dans le fichier de configuration afin de conserver le nom (md0), puis régénérez l'initramfs :

mdadm --examine --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

Si l'array raid contient la partition /boot (ou la partition / sans partition boot dédiée) :

update-grub
grub-install /dev/sda
grub-install /dev/sdb

Monitoring

Manuel

#$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[1] sda1[0]
      9756672 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Le flag [UU] montre que tout est OK. S'il y avait un problème sur un des disques nous verrions par exemple [_U] ou [U_]

Vous pouvez avoir plus d'information avec cette commande :

mdadm --detail /dev/md0

Si vous lisez State : clean tout va bien, si vous lisez State : clean, degraded, c'est que l'un des disques pose problème. Vous pouvez identifier quel disque pose soucis grâce au statut tout en bas (active sync, faulty, spare ou removed)

Automatique

Assurez vous que le fichier /etc/default/mdadm contienne bien :

AUTOCHECK=true
START_DAEMON=true

Et définissez votre adresse mail dans /etc/mdadm/mdadm.conf :

MAILADDR adress@domain.tld

Si vous avez modifié la configuration, relancez mdadm :

/etc/init.d/mdadm restart

Pour tester l'envoi d'une notification :

mdadm --monitor --scan --test --oneshot

Remplacement d'un disque défectueux

Si vous vous rendez-compte de vous même avant mdadm qu'un disque est entrain de lâcher (après diagnostic smart par exemple), il devient importer de le remplacer. La première étape est de le marquer comme défectueux dans la grappe raid, puis supprimer le disque de la grappe. Après remplacement, vous pourrez ajouter le nouveau disque à la grappe.
Dans cet exemple nous avons une grappe raid md0 :

  • /dev/sda1 + /dev/sdb1 = /dev/md0

Sauf si mdadm a détecté de lui même le disque défectueux, la commande cat /proc/mdstat retournera :

Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24419868 blocks [2/2] [UU]

Sauf que dans le cas présent, vous avez des raisons sérieuses de penser que le disque sdb est entrain de lacher, on va donc le remplacer.

Marquer un disque comme défectueux

Pour marquer la partition sdb1 membre de la grappe raid md0 :

mdadm --manage /dev/md0 --fail /dev/sdb1

Une fois cela fait, la commande cat /proc/mdstat retournera :

Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1](F)
      24419868 blocks [2/1] [U_]

Notez le passage du code [UU] à [U_]

Supprimer le disque défectueux de la grappe

Supprimez la partition sdb1 de la grappe raid md0 :

mdadm --manage /dev/md0 --remove /dev/sdb1

La commande cat /proc/mdstat devrait retourner :

Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24419868 blocks [2/1] [U_]

Notez que la partition sdb1 a disparu de la grappe.

Changement du disque et ajout du nouveau disque au raid


Après avoir coupé la machine, changez le disque physique, puis partitionnez le à l'identique.

Si les disques sda et sdb étaient partitionné de manière identique, et uniquement dans ce cas, vous pouvez utiliser la commande suivante :

sfdisk -d /dev/sda | sfdisk /dev/sdb

Vérifiez éventuellement que les deux disques ont effectivement le même partitionnement avec fdisk -l

Une fois le (nouveau) disque sdb paritionné, vous pouvez ajouter la (nouvelle) partition sdb1 à la grappe raid :

mdadm --manage /dev/md0 --add /dev/sdb1

Désormais, votre raid va se resynchroniser. La sortie de cat /proc/mdstat devrait ressembler à cela :

Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24419868 blocks [2/1] [U_]
      [=>...................]  recovery =  9.9% (2422459/24419868) finish=2.9min speed=127415K/sec

Et une fois la synchronisation terminée, vous devriez retrouver la sortie habituelle :

Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24419868 blocks [2/2] [UU]

Pensez à mettre à jour /etc/mdadm/mdadm.conf avec le contenu de mdadm --examine --scan

Enfin, si vous avez une partition de boot ou grub installé sur cette grappe, pensez à réinstaller grub sur sdb !

Examiner les métadonnées

mdadm --examine /dev/sdb1

Cela vous permet, par exemple, de récupérer les informations d'une grappe si vous avez perdu le fichier /etc/mdadm/mdadm.conf.

Stoper un raid

mdadm --stop /dev/md0

Note : pour couper une grappe, il faut que les systèmes de fichier qui y sont présents soient démontés, et les éventuels volumes LVM désactivés (vgchange -an pour les désactiver tous par exemple)

(re)démarrer un raid

Spécifiquement :

mdadm --assemble /dev/md0

Tous les raids auto-détectés via les meta-données :

mdadm --assemble --scan

Vérifier un raid

soit :

echo check > /sys/block/md0/md/sync_action

soit :

/usr/share/mdadm/checkarray /dev/md0

Voir l'architecture des disques et partition

lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT