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