Commandes pratiques pour gérer le RAID soft sous Linux

Introduction

Je vous propose ici un aide-mémoire aussi synthétique que possible pour découvrir ou retrouver les commandes les plus usuelles dans les cas de mise en place ou de maintenance d’un système de disque en RAID (0,1,4,5 …) logiciel.

Les outils de gestion du RAID logiciel (mdadm, etc.) sont supposés être installés au sein de votre système, ce qui est plutôt courant dans la majorité des distributions mises à disposition de nos jours (je parle de l’année 2010) ; ceci ne sera donc pas l’objet du présent article.

Il n’est pas non plus ici question d’expliquer ou de comparer les différents modes de RAID : 0, 1, 4, 5, 10, etc.

Voici donc les principales commandes (avec exemples) nécessaires à la gestion responsables de ses grappes RAID soft sous Linux.

Vérifier de l’état du RAID

Etat global

monlinux:~ #cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [linear]
md2 : active raid1 sdc3[1]
974656448 blocks super 1.0 [2/1] [_U]

md0 : active raid1 sdd1[4] sdc1[2]
1051636 blocks super 1.0 [2/2] [UU]
bitmap: 0/9 pages [0KB], 64KB chunk

md1 : active raid1 sdb3[0] sda3[1]
242093944 blocks super 1.0 [2/2] [UU]
bitmap: 8/462 pages [32KB], 256KB chunk

 

 

Autres commande pour avoir une identification des grappes avec des informations plus synthétiques :

monlinux:~ #mdadm --examine --scan

ARRAY /dev/md/0 metadata=1.0 UUID=e7d78e16:ac222ac5:4480ce5c:2fad9651 name=linux:0
ARRAY /dev/md/1 metadata=1.0 UUID=30967b39:e498bede:01964510:68b45134 name=linux:1
ARRAY /dev/md/2 metadata=1.0 UUID=017d152b:ad18a24b:5b3bfd84:ef1d8c26 name=linux:2

Ces informations doivent être conformes au contenu du fichier « /etc/mdadm/mdadm.conf » (ou « /etc/mdadm.conf » sous openSUSE par exemple). Dans le cas contraire, il est impératif de le mettre à jour comme suit :

( Sauvegarde datée de la version actuelle, en cas où !! )
monlinux:~ #cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_backup_AAAA-MM-JJ

( Mise à jour avec les info de la commande scan )
monlinux:~ #mdadm --examine --scan >> /etc/mdadm/mdadm.conf

monlinux:~ #cat /etc/mdadm/mdadm.conf

 

Penser à éditer ensuite le contenu de mdadm.conf afin de le nettoyer des lignes doublons éventuelles ou de l’enrichir d’options par défaut par exemple.

Pour vérifier le détail d’une grappe en particulier :

monlinux:~ #mdadm --detail /dev/md1
/dev/md1:
Version : 1.00
Creation Time : Tue Aug  3 02:21:56 2010
Raid Level : raid1
Array Size : 1460292296 (1392.64 GiB 1495.34 GB)
Used Dev Size : 1460292296 (1392.64 GiB 1495.34 GB)

Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Tue Aug  3 17:42:31 2010
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Name : linux:1
UUID : 30967b39:e498bede:01964510:68b45134
Events : 16262

Number   Major   Minor   RaidDevice State
0       8       19        0      active sync   /dev/sdb3
1       8       35        1      active sync   /dev/sdc3

 

 

Vérification de l’état d’un disque (device) :

monlinux:~ #mdadm --examine /dev/sda1
/dev/sda1:
 Magic : a92b4efc
 Version : 1.0
 Feature Map : 0x1
 Array UUID : e7d78e16:ac222ac5:4480ce5c:2fad9651
 Name : linux:0
 Creation Time : Tue Aug  3 02:21:55 2010
Raid Level : raid1
Raid Devices : 3

 Avail Dev Size : 3148648 (1537.68 MiB 1612.11 MB)
 Array Size : 3148648 (1537.68 MiB 1612.11 MB)
 Super Offset : 3148656 sectors
 State : clean
 Device UUID : 1e039ddb:be30d627:b6e36dd2:688d42d7

Internal Bitmap : -8 sectors from superblock
 Update Time : Tue Aug  3 17:42:02 2010
 Checksum : ef4b7dc8 - correct
 Events : 52

 Device Role : Active device 0
 Array State : AAA ('A' == active, '.' == missing)

 

 

Créer une grappe RAID

( Création d'une grappe RAID1 avec deux disques )
monlinux:~ #mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

( Création d'une grappe RAID1 de deux disque dont un est absent pour l'instant )
monlinux:~ #mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 missing

( Création d'une grappe RAID1 avec d'autres paramètres ... )
monlinux:~ #mdadm --create --verbose /dev/md0 --level=1 --name=xyz --metadata=1.0 (...)
            --raid-devices=2 /dev/sda1 /dev/sdb1
( nommage explicite de la grappe avec --name=xyz
  forçage du type de superblock  avec --metadata=1.0 )

J’attire spécialement l’attention sur le paramètre metadata=<version>. Il permet de préciser le mode de gestion du « superblock » RAID.

Version du superblock (métadonnée RAID)

Le « superblock » désigne l’ensemble des données stockées sur les disques et servant à fournir au système les informations lui permettant de gérer les grappes RAID. Le format et le mode de stockage de ces métadonnées sont indiqué par un numéro de version :

0.90 : valeur par défaut, sauf indication contraire dans mdadm.conf

1.0 : « superblock » stocké en fin de partition, cette valeur est utilisée automatiquement par le partitioneur de openSUSE pour une compatibilité avec l’amorçage du système avant montage des volumes en RAID (avec GRUB2 ou Lilo)

1.1 : « superblock » stocké en début de partition

1.2 : « superblock » stocké à 4K du début de la partition

Changer le nombre de disques dans une grappe

( Changement du nombre de disques de la grappe )
monlinux:~ #mdadm --grow --raid-devices=2 /dev/md0

( Ajout d'un disque (/dev/sdb1) à une grappe (/dev/md0) )
monlinux:~ #mdadm --add /dev/md0 /dev/sdb1


Changer la taille d’une grappe

( Changer l'espace disque utilisé par la grappe )
monlinux:~ #mdadm --grow /dev/md2 --size=max

Le paramètre –size=max indique qu’il faut passer à la capacité maximale possible en fonction des disques utilisés dans la grappe. Il est tout aussi possible de préciser une taille en Koctets.

Si la grappe à un « write-intent bitmap », il est fortement recommandé de supprimer le « bitmap » avant le changement de taille et de le reconstruire après. C’est en particulier nécessaire si la commande « grow » retourne le message d’erreur suivant : « Device or resource busy ».

monlinux:~ #mdadm --grow /dev/md2 --size=max

mdadm: Cannot set device size for /dev/md0: Device or resource busy

Cette précaution peut éviter la destruction de la grappe et de ses données, notamment si le bitmap existant n’est pas suffisamment grand et que l’augmentation de la taille de la grappe risque d’entrainer un changement de la taille des bloques (chunksize) du bitmap.

Augmentation de la taille avec régénération du bitmap :

( Suppresion du bitmap )
monlinux:~ #mdadm --grow /dev/md2 --bitmap none

( Changement de taille de la grappe à la valeur maximale )
monlinux:~ #mdadm --grow /dev/md2 --size=max

( Force à attendre la fin de l'action ci-dessus avant de lancer la suite )
monlinux:~ #mdadm --wait /dev/md2

( Reconstruction du bitmap (interne) )
monlinux:~ #mdadm --grow /dev/md2 --bitmap internal

 

Attention, il est nécessaire de redimensionner le système de fichier (Ext2, Ext3, Ext4, RaiserFS, etc.) ensuite pour finir la prise en compte du changement de taille.

Redimensionnement du système de fichier de type Ext2/3/4

( Vérifier ... )
monlinux:~ #e2fsck -f /dev/md2

( ... redimensionner ... )
monlinux:~ #resize2fs /dev/md2

( ... revérifier )
monlinux:~ #e2fsck -f /dev/md2


Retirer des disques d’un volume RAID

( Désactiver le disque )
monlinux:~ #mdadm /dev/md0 --fail /dev/sdb1

( Avant de le retirer de la grappe )
monlinux:~ #mdadm /dev/md0 --remove /dev/sdb1

( Si c'est un retrait définitif, il est nécessaire de supprimer le superblock du disque )
monlinux:~ #mdadm --zero-superblock /dev/sdb1

 

 

Arrêter et supprimer une grappe

( Arrêt de la grappe )
monlinux:~ #mdadm --stop /dev/md0

( Écrasement des superblocks pour finaliser la suppression de la grappe )
monlinux:~ #mdadm --zero-superblock /dev/sda1

( Pour tous les disques de la grappe )
monlinux:~ #mdadm --zero-superblock /dev/sdb1

( Un examine scan permet de férifier que la grappe a bien été définitivement supprimé )
monlinux:~ #mdadm --examine --scan

 

 

Actualiser la configuration

(Vu plus haut)

//Mise à jour du fichier mdadm.conf
monlinux:~ #mdadm --examine --scan >> /etc/mdadm.conf

 

 

Sources :

http://www.howtoforge.com/software-raid1-grub-boot-debian-etch
http://www.howtoforge.com/how-to-resize-raid-partitions-shrink-and-grow-software-raid
http://www.unixgarden.com/index.php/administration-systeme/la-souplesse-du-raid-logiciel-de-linux-2
https://raid.wiki.kernel.org/index.php/Growing

2 comments

  1. Dylan dit :

    Super blog, très complet et facile à comprendre!

    Mais je vous conseille de ne pas mettre les commandes en jaune!

    Sur mon écran en tout cas c’est quasiment illisible, il faut que je sélectionne le texte pour voir quelque chose

    Bonne continuation!

    • Hammed dit :

      Merci pour votre retour. Je suis content que le contenu vous ait servi.
      En effet le changement du thème de fond noir à fond blanc, rend les commandes jaunes illisibles ;-)
      Je vais remédier à ça.
      Bien cordialement.
      Hammed

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *