« Mdadm » : différence entre les versions
Ligne 173 : | Ligne 173 : | ||
soit : | soit : | ||
<pre>/usr/share/mdadm/checkarray /dev/md0</pre> | <pre>/usr/share/mdadm/checkarray /dev/md0</pre> | ||
=Renommer un array= | |||
Prenons le retour de <code>mdadm --examine --scan</code> : | |||
<pre>ARRAY /dev/md/1 metadata=1.2 UUID=49d12632:66f8e6c9:34cc256c:4831d2f5 name=hostname:1</pre> | |||
Le champ <code>name</code> donne l'hostname de la machine sur laquelle l'array a été créé, et le numéro X d'array à utiliser (qui sera attribué en /dev/mdX). | |||
Si vous avez créez un array sur une autre machine, vous pourriez avoir besoin de modifier proprement le nom de l'array. Pour cela, il faut pouvoir stopper l'array avant d'en changer le nom : | |||
<pre> | |||
mdadm --stop /dev/md1 | |||
mdadm --assemble /dev/md1 --name=newhostname:0 --update=name /dev/sda1 /dev/sdb1 | |||
mdadm --examine --scan | |||
</pre> | |||
Mettez à jour le fichier /etc/mdadm/mdadm.conf avec la nouvelle définition de l'array (avec les informations contenues dans <code>mdadm --examine --scan</code>. C'est important sinon votre array pourrait ne plus démarrer au boot. | |||
Pour finir, mettez à jour votre initramfs : | |||
<pre>update-initrams -u</pre> | |||
=Supprimer les méta-données d'un ancien membre de raid= | =Supprimer les méta-données d'un ancien membre de raid= |
Version du 10 janvier 2021 à 12:58
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.
Cette étape est également indispensable si la partition est bootable
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
Ajout d'un troisième membre à un raid1
En disque actif :
mdadm --grow /dev/md0 --level=1 --raid-devices=3 --add /dev/sdc1
En spare :
mdadm --manage /dev/md0 --add /dev/sdc1
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.
Attention, à ce stade :
- sauf si des secteurs défectueux ont altéré le MBR du disque SDB ou le dossier /boot stocké sur la partition sdb1, le disque SDB reste bootable depuis le bios : le grub installé sur le MBR du disque SDB passe la main au grub stocké sur la partition SDB1 qui charge la configuration stockée sur SDB1, qui permet enfin de charger le kernel stocké sur le raid.
- Cependant, si vous effacez la partition SDB1, votre système risque de rester bloqué (le grub du MBR va essayer de charger en boucle le grub de SDB1 qui n'existe plus, et ne timeout pas).
- Si vous effacez le MBR du disque SDB, le disque ne sera plus bootable. La suite dépendra du comportement de votre bios : tentative d'un autre disque ou non
- De même, ne réinstallez pas grub sur SDB sans avoir resynchronisé le raid, sous peine de voir grub bloquer le boot sans passer la main a un autre disque !
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]
Enfin, si vous avez une partition de boot ou grub installé sur cette grappe, pensez à réinstaller grub sur sdb :
grub-install /dev/sdb
Vous n'aurez pas besoin de reconfigurer grub ou l'initramfs, l'ancienne configuration restera valide.
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
Renommer un array
Prenons le retour de mdadm --examine --scan
:
ARRAY /dev/md/1 metadata=1.2 UUID=49d12632:66f8e6c9:34cc256c:4831d2f5 name=hostname:1
Le champ name
donne l'hostname de la machine sur laquelle l'array a été créé, et le numéro X d'array à utiliser (qui sera attribué en /dev/mdX).
Si vous avez créez un array sur une autre machine, vous pourriez avoir besoin de modifier proprement le nom de l'array. Pour cela, il faut pouvoir stopper l'array avant d'en changer le nom :
mdadm --stop /dev/md1 mdadm --assemble /dev/md1 --name=newhostname:0 --update=name /dev/sda1 /dev/sdb1 mdadm --examine --scan
Mettez à jour le fichier /etc/mdadm/mdadm.conf avec la nouvelle définition de l'array (avec les informations contenues dans mdadm --examine --scan
. C'est important sinon votre array pourrait ne plus démarrer au boot.
Pour finir, mettez à jour votre initramfs :
update-initrams -u
Supprimer les méta-données d'un ancien membre de raid
Attention, à ne faire que si vous avez supprimé sdc1 de votre array et que vous acceptez de perdre les données stockées sur sdc1 :
mdadm --zero-superblock /dev/sdc1
Voir l'architecture des disques et partition
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT