Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.

mdadm , gestion de RAID logiciel

mdadm est le nom du paquet, et de la commande éponyme, qui permettent de gérer le raid logiciel sur un système GNU-Linux. Le raid “logiciel” s'oppose au raid “matériel” où un contrôleur matériel dédié gère la couche raid. Entre les deux on trouve le “fake raid” (faux raid), ce type de raid se trouve sur la quasi totalité des cartes mères grand public moyen à haut de gamme. Un contrôleur joue le rôle de contrôleur raid, mais il ne s'agit pas d'un véritable contrôleur raid matériel avec une puce dédiée, mais d'une émulation logicielle qui délègue au système et au processeur les calculs.

Le raid matériel est très performant, les contrôleurs sont très chers, les groupes raid créés ne sont pas “portables” sur un autre type de contrôleur (en cas de panne, de changement de matériel…). Le raid matériel est totalement transparent pour l'utilisateur et le système. Le “fake raid” n'a aucun avantage sur le raid logiciel, il est même moins souple et pas plus performant. Son seul atout pourrait-être une relative “transparence” pour l'utilisateur.

Reste celui qui nous intéresse ici, le raid purement logiciel, géré par le noyau Linux et mdadm.

Un signe “#” en début de commande indique que les droits root (su,sudo) sont nécessaires
<color red>Le signe ”#” ne fait pas partie de la commande.</color>

Installation

mdadm est présent dans les dépôts de (quasiment ?) toutes les distributions, sur Debian, Ubuntu ou dérivés de la famille deb un simple:

# apt-get install mdadm

règlera le problème de l'installation. Sur une distribution de la famille rpm comme Fedora ou Suse, respectivement “Yum install mdadm” ou “zypper in mdadm” auront le même effet. C'est beau la gestion de logiciels GNU-Linux !

Lors de l'installation quelques questions vous seront sans doute posées, parmi les plus importantes:

“Désirez-vous détecter, assembler et démarrer les volumes raid au démarrage du système?”
Sauf cas très particulier vous devez laisser le choix par défaut (oui).
“Quel est le destinataire des messages système de mdadm ?”
Là vous constaterez que c'est une très bonne idée d'avoir un MTA (mail transfert agent: “exim”, “courier”…) qui vous transmet les courriels système, et un client configuré pour relever les courriels des comptes locaux (mutt, Kmail…). Si vous n'avez pas de compte courriel système sur la machine, ou si les courriels adressés à root vous sont transférés, choisissez “root”.

En effet le démon de surveillance “mdadm –monitor” est démarré par défaut, il vous avertira de tout changement d'état de vos volumes raid, défaillance d'un disque, …etc. Il FAUT pouvoir lire et recevoir ces courriels système, sous peine qu'un problème critique passe inaperçu (panne d'un disque dans un volume raid1 ou raid5 sans disque de secours…).

Configuration

Si le fichier mdadm.conf n'a pas été créé lors de l'installation, il est possible de le créer après coup avec /usr/share/mdadm/mkconf. Par exemple sur Debian on indiquera le fichier de sortie /etc/mdadm/mdadm.conf avec:

# /usr/share/mdadm/mkconf force-generate /etc/mdadm/mdadm.conf

En dehors des options proposées à l'installation, il n'y a pas grand chose à faire. Sur Debian un fichier /etc/default/mdadm (équivalent sur d'autres distributions, voir “man mdadm”) permet d'accéder à la plupart des options:

# INITRDSTART:
#Liste des volumes raid qui doivent être démarrés automatiquement lors du chargement de
#"l'initial ram disk" (initrd). Cette liste *doit* contenir le volume raid qui supporte la
#racine du système "/".
#
#'all'  >> tous les volumes.
#'/dev/md*,/dev/md*'  >> listes des volumes raid à démarrer.
#'none'  >> aucun, démarrage manuel (ie. ni "/" ni "/boot" ne sont sur un volume raid).

INITRDSTART='all'

# AUTOSTART:
#mdadm démarre les volumes listés dans /etc/mdadm/mdadm.conf automatiquement ?

AUTOSTART=true

# AUTOCHECK:
#mdadm doit-il vérifier la concordance des données sur les composants des volumes raid ?
#Évite la corruption silencieuse des données sur l'un des disques. Voir /etc/cron.d/mdadm.

AUTOCHECK=true

# START_DAEMON:
#mdadm doit-il démarrer le démon de surveillance au démarrage (--monitor) ?

START_DAEMON=true

# DAEMON_OPTIONS:
#Autres options à passer au démon de surveillance.

DAEMON_OPTIONS="--syslog"

# VERBOSE:
#Si cette option est activée (true), mdadm donnera un peu plus de détails, i.e.
#lors de la création de l'initramfs (initrd).

VERBOSE=true

# MAIL_TO:
#Cette option est maintenant définie dans /etc/mdadm/mdadm.conf (MAILADDR).

Voir également /etc/mdadm/mdadm.conf (ou /etc/mdadm.conf)

/etc/mdadm/mdadm.conf
# mdadm.conf
#
#Merci de vous référez à "man mdadm.conf(5)".
#

#Par défaut, détecter toutes les partitions qui contiennent des superblocks ("partitions").
#Alternativement, préciser les disques à tester, les jokers ("wildcards") sont autorisés (*).

DEVICE partitions

#Créer automatiquement les volumes avec les permissions et attributs suivant:

CREATE owner=root group=disk mode=0660 auto=yes

#Automatiquement marquer les volumes comme appartenant au système local:

HOMEHOST <system>

#Adresse où envoyer les alertes du démon de surveillance ($(user)@ , root...):

MAILADDR user@localhost

#Détail des volumes MD existant:

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=4a5ffe63:63c5e41a:5e161464:86942050
   devices=/dev/sdb1,/dev/sda1
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=c02b4e8c:a6378d01:5e161464:86942050
   devices=/dev/sdb2,/dev/sda2

Pour mettre à jour les détails des volumes après une modification, on peut utiliser:

# mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf

ou pour ne pas avoir les volumes raid associés “en dur” aux disques, ne pas utiliser ”--verbose” mais:

# mdadm --misc --detail --brief /dev/md? >> /etc/mdadm/mdadm.conf

ça permet de ne pas devoir mettre à jour ce fichier en cas de changement/ajout/retrait de disques, c'est moins détaillé mais plus souple à l'usage.

:!: Avant de mettre à jour les informations de mdadm.conf, il faut avoir retiré les anciennes informations du fichier évidemment.

Commandes utiles

Création d'un volume raid 1 (miroir) à partir de deux disques, avec une taille de secteurs de 128k (défaut 64k):

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

Version “compacte” de la même commande:

# mdadm -C /dev/md0 -l1 -c128 -n2 /dev/sda1 /dev/sdb1

Pour créer un volume raid 1 avec un seul disque, on utilise la directive “missing” à la place du disque (utile pour intégrer plus tard le disque système existant par exemple):

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

L'ajout d'un disque supplémentaire après création se fera par défaut en mode “spare” (disque de secours). En cas de panne (ou marquage --fail) sur un disque principal du volume raid la reconstruction sur ce disque “spare” sera immédiate. On peut également préciser le nombre de disques de secours à la création avec l'option ”--spare-devices=” , ou en version compacte ”-x” . Le nombre de disques indiqués dans ”--raid-devices=” doit être le total actifs + spare.

Démarrer, arrêter les volumes raid

Démarrer/arrêter un volume:

# mdadm --start /dev/md0
mdadm --stop /dev/md0

Démarrer un volume non listé dans mdadm.conf (--assemble). Vous devez savoir que les disques indiqué composent un volume raid, (utilisez ”--query” sur les disques en cas de doute):

# mdadm -A /dev/md0 /dev/sda1 /dev/sdb1

Pour démarrer le volume dont le nombre mineur est “0” (zero), et l'assembler en /dev/md0:

# mdadm -Ac partitions -m0 /dev/md0

Pour examiner un volume raid:

# mdadm --query /dev/md0

ou plus détaillé

mdadm --detail /dev/md0

Informations sur l'ensemble des volumes raid, et les actions en cours comme le temps de reconstruction, statut (“clean”, “fail”, “missing” …):

# cat /proc/mdstat

mdadm écrit les informations relatives au volume dans un “superblock” d'environ 128K qui agit comme un marqueur, sur chaque disque qui compose le volume. Pour examiner les informations du superblock:

# mdadm --examine /dev/sda1

Les “superblock” sont persistent, même après retrait d'un disque d'un volume raid. Pour éliminer le “superblock” (indispensable avant de réutiliser le disque dans un volume raid):

# mdadm --zero-superblock /dev/sda1

Pour ajouter/retirer un disque:

Dans ces exemples on considère qu'il n'y a qu'une partition par disque, sinon il faut ajouter toutes les partitions du nouveau disque aux groupes raid, et marquer en ”--fail” et retirer toutes les partitions de l'ancien disque.

# mdadm /dev/md0 --add /dev/sdc1

Pour retirer un disque, on procède en deux étapes:

# mdadm /dev/md0 --fail /dev/sda1
mdadm /dev/md0 --remove /dev/sda1

Pour rapidement remplacer un disque on peut combiner les options:

# mdadm /dev/md0 --add /dev/sdc1 --fail /dev/sda1 --remove /dev/sda1

La reconstruction sur le disque nouvellement ajouté commencera immédiatement.

Utilisation avancée

Partager des disques de secours On peut préciser un groupe de volumes raid qui pourront se partager un “spare” (disque de secours) en cas de défaillance. Ça permet de toujours disposer de disques de secours sans pour autant en monopoliser un par volume raid. On ajoutera à /etc/mdadm/mdadm.conf:

DEVICE /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=25cd832e:6f1c45c0:163f7b98:1dc35ffe devices=/dev/sda1,/dev/sdb1
spare-group=group1

ARRAY /dev/md1 level=raid1 num-devices=2 UUID=aee5ac6c:ec9e36ab:51ac5e46:3b54ef58 devices=/dev/sdc1,/dev/sdd1,/dev/sde1
spare-group=group1

Ici le disque de secours /dev/sde1 qui appartient au volume raid1 /dev/md1 sera aussi disponible en cas de défaillance d'un disque du volume raid1 /dev/md0. Attention, la taille du volume du disque “spare” doit avoir une taille au moins égale au plus grand des volumes raid auxquels il est associé.

Augmenter la taille d'un volume raid

Si vous voulez remplacer les disques de 500GB qui composent votre raid1, par des disques de 1TB, ou si vous voulez ajouter un disque à un raid5, vous devrez étendre le volume raid puis le système de fichiers.

On considère un raid5 sur trois disques, auquel on ajoute /dev/sde1:

# mdadm /dev/md0 --add /dev/sde1
mdadm /dev/md0 --grow --raid-devices=4
e2fsck -fp /dev/md0
resize2fs /dev/md0
e2fsck -fp /dev/md0

Maintenant pour un raid1, on veut passer de disques de 160GB à des 500GB:

On considère que le raid est composé de /dev/md0 (/dev/sda1, /dev/sdb1), et /dev/md1 (/dev/sda2 et dev/sdb2), on ajoute les nouveaux disques un par un aux volumes raid, mais on considère qu'ils sont déjà installés dans la machine, et partitionnés:

# mdadm /dev/md0 --fail /dev/sda1
mdadm /dev/md1 --fail /dev/sda2
mdamd /dev/md0 --remove /dev/sda1
mdadm /dev/md1 --remove /dev/sda2

On ajoute le premier nouveau disque:

# mdadm /dev/md0 --add /dev/sdc1
mdadm /dev/md1 --add /dev/sdc2
cat /proc/mdstat

On attend que la reconstruction soit finie, puis on enlève l'ancien disque restant:

# mdadm /dev/md0 --fail /dev/sdb1
mdadm /dev/md1 --fail /dev/sdb2
mdamd /dev/md0 --remove /dev/sdb1
mdadm /dev/md1 --remove /dev/sdb2

On ajoute le second nouveau disque:

# mdadm /dev/md0 --add /dev/sdd1
mdadm /dev/md1 --add /dev/sdd2
cat /proc/mdstat

Quand la synchronisation est finie, on étend le volume raid sur l'ensemble de la taille disponible sur les nouveaux disques:

# mdadm --grow /dev/md0 --size=max
mdadm --grow /dev/md1 --size=max

Finalement on étend le système de fichier pour qu'il corresponde à la taille des volumes raid:

# resize2fs /dev/md0
resize2fs /dev/md1

N'oubliez pas d'effacer les superblock des anciens disques.

Il est conseillé de procéder sur un volume non monté (live-cd), ou à la rigueur en mode “single user” (appelé aussi “maintenance mode” ou “init 1”), et bien entendu d'avoir une sauvegarde à jour des données, des informations des superblock, et de mdadm.conf.

:!: Il est fortement recommandé de recréer un initrd (“Initial Ram Disk”) après ce genre de modifications, particulièrement si vous utilisez lvm au dessus du raid, ou si votre partition /root est sur le raid.

Solutionner une erreur de taille entre les superblocks et les tables de partitions des disques

Il arrive après création d'un volume raid sur des disques ayant un système de fichier qui occupe la totalité du disque, et/ou en mode “missing” avec ajout ultérieur du deuxième disque, que “fsck” refuse de s'exécuter, voir bloque le démarrage. La raison invoqué sera une différence dans la taille du volume raid reporté par les superblock, et la taille du système de fichier sous-jacent reporté par les table de partition des disques. Généralement la taille reportée par le superblock est plus importante, car elle “ajoute” artificiellement l'espace occupé par les superblocks lors de leur création au lieu de l'en soustraire.

Pour résoudre le problème:

# e2fsck -cc /dev/md0
resize2fs /dev/md0
e2fsck -fp /dev/md0

À effectuer sur un volume raid non monté (depuis un live-cd par exemple).

Liens

post-it/post-it_mdadm.txt · Dernière modification: 2009/06/23 20:25 par kinji
Piste: post-it_tunnel_ssh tutorial_installer_et_configurer_xcache safe_clfags tutorial_installer_et_configurer_mysql_phpmyadmin post-it_ubuntu_hard_drive_problem start tutorial_internet_la_tete_en_bas post-it_mdadm
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0