Gestion du RAID avec mdadm

ven. 30 août 2013 by Marmotte

Le RAID permet de répartir les données entre plusieurs disques durs. Cela permet d'améliorer les performances, la tolérance aux pannes, ou les deux.

La plupart des niveaux de RAID se basent sur la taille du plus petit élément. Il est donc recommandé d'utiliser des disques de même taille.

Note : Cette note d'installation ne couvre que les opérations que j'ai effectuées sur mon ordinateur. Je ne décris donc que la mise en place du RAID, mais pas la modification d'un volume déjà créé (ajout d'un disque dans un volume, utilisation d'un disque de secours, etc.).

Installation

Sous Debian, il suffit d'installer le paquet mdadm.

$ sudo apt-get install --no-install-recommends mdadm

Partitionnement

Avant de partionner complètement un disque, je procède souvent à l'effacement des éventuelles informations de partitionnement précédentes.

$ sudo dd if=/dev/zero of=/dev/sdX bs=1M count=1
$ sudo dd if=/dev/zero of=/dev/sdY bs=1M count=1

Il faut ensuite partitionner le premier disque. Si les deux sont de taille différente, le premier disque partitionné sera le plus petit, afin de permettre la copie du partitionnement sur le second sans erreur.

$ sudo cfdisk /dev/sdX

Afin de ne pas gaspiller d'espace disque, le plus simple est de copier le partitionnement du premier directement sur le second disque. Nous sommes ainsi certains que les partitions des deux disques seront de même taille. L'utilitaire sfdisk est parfait pour cette tâche.

$ sudo sfdisk /dev/sdX --dump | sudo sfdisk /dev/sdY

Note : Comme les deux disques que j'utilise ont une légère différence (3.7 Go environ), il restait un peu d'espace inutilisé à la fin du second disque après cette opération. J'en ai profité pour y mettre la partition de SWAP, en créant une partition supplémentaire à la fin du second disque.

Création des volumes RAID

Comme pour le partitionnement, je préfère commencer par effacer les éventuelles informations de RAID déjà présentes sur les partitions avant de créer les volumes.

$ sudo dd if=/dev/zero of=/dev/sdX1 bs=1M count=1
$ sudo dd if=/dev/zero of=/dev/sdX2 bs=1M count=1
$ sudo dd if=/dev/zero of=/dev/sdY1 bs=1M count=1
$ sudo dd if=/dev/zero of=/dev/sdY2 bs=1M count=1

Nous pouvons ensuite passer à la création des volumes RAID proprement dite.

$ sudo mdadm --create /dev/md/root --level=1 --raid-devices=2 --name=marmotte:root /dev/sdX1 /dev/sdY1
$ sudo mdadm --create /dev/md/data --level=1 --raid-devices=2 --name=marmotte:data /dev/sdX2 /dev/sdY2

Description des paramètres utilisés :

Le paramètre --create permet de définir le nom du périphérique à créer. Il est posible de donner des noms classiques comme /dev/mdX ou des noms personnalisés comme dans mon exemple. Pour un volume qui sera utilisé pour l'installation d'un système, je préfère donner un nom personnalisé, qui permet d'y faire référence plus facilement, par exemple dans le fichier /etc/fstab.

Le paramètre --level définit le niveau de RAID utilisé. Dans mon exemple, j'utilise le niveau 1, qui correspond à du RAID miroir.

Le nombre de disques utilisés est défini par le paramètre --raid-devices. Dans mon exemple, j'utilise deux disques pour chaque volume.

Il est possible de donner un nom aux volumes avec le paramètre --name. Ce nom peut être omis, il est alors généré automatiquement de la forme hostname:index.

On ajoute ensuite la liste de toutes les partitions qui seront utilisées dans le volume créé. Si l'un des disques de la grappe est absent au moment de la création du colume, il est possible de le remplacer par le mod missing dans cette commande. Il faudra ensuite ajouter la partition manquante en utilisant mdadm --manage (partie non expliquée dans cet article).

Note : La création du volume peut afficher une alerte sur le format des méta-données utilisé, dans le cas d'un disque système. La version de grub2 distribuée pour Debian Wheezy semble gérer sans problème le format 1.2, cette alerte peut donc être ignorée.

Comme après la création de partitions standard, il faut ensuite formater les volumes RAID fraichement créés afin de pouvoir les utiliser.

$ sudo mkfs.ext4 /dev/md/root
$ sudo mkfs.ext4 /dev/md/data
$ sudo mkswap /dev/sdY3

Note : Le formatage est nécessaire uniquement si vous voulez utiliser directement ces volumes. Si votre but est d'utiliser LVM sur les volumes RAID, il est inutile.

Sauvegarde de la configuration RAID

Pour permettre au système de monter automatiquement les volumes RAID lors du démarrage, il faut indiquer la configuration dans le fichier /etc/mdadm/mdadm.conf. L'utilitaire mdadm peut écrire automatiquement les informations sur les volumes démarrés sur la sortie standard.

$ sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Note : Si des volumes RAID étaient déjà présents dans la configuration, il peut y avoir des doublons suite à cette commande. Dans ce cas, une édition manuelle du fichier est nécessaire.

Note : Si le disque de boot est sur un volume RAID, il faut installer le bootloader sur chacun des disques physiques qui compose la grappe (/dev/sdX et /dev/sdY dans l'exemple). De cette manière, si l'un des disques tombe en panne, le système pourra toujours démarrer depuis l'autre disque.

Vérification de l'état des volumes RAID

Après la création d'un volume RAID de grande taille, il faut attendre que les données soient synchronisées entre les différents éléments composant le volume. Il est possible de surveiller l'état des volumes RAID en regardant le contenu du fichier /proc/mdstat.