Vous êtes sur la page 1sur 24

Gérer des disques RAID sous Linux

Cet article présente la création d'un disque RAID logiciel sous Linux. Les exemples ont été mis en
oeuvre avec Linux Ubuntu. La forme logicielle est intéressante dans certains cas mais ne peut
jamais se substituer à la mise en oeuvre d'un RAID matériel, ne serait-ce que pour des raisons de
performance. Nous présentons presque tous les cas de RAID logiciel. Nous renvoyons le lecteur qui
le souhaite aux HOWTO pour connaître toutes les subtilités de réalisation. Sauf exception, tous les
noyaux Linux d'aujourd'hui sont compilés avec le support des disques RAID. Selon les
distributions, vous aurez parfois à installer le « package » pour accéder aux commandes et
éventuellement installer le pilote (« driver »).

1) Un peu de vocabulaire

Objet Description
L'ensemble des disques du RAID forment un seul disque. Les données sont écrits
Linéaire
linéairement sur les disques.
L'ensemble des disques du RAID forment un seul disque. Les données, logiquement
contiguës, sont écrites sur des bandes réparties uniformément sur les disques
RAID 0 physiques. Cela permet d'augmenter la rapidité en écrivant les bandes d'un bloc de
données simultanément sur plusieurs disques du RAID.
RAID 1 Il y a une redondance d'informations. Les disques sont en miroir.
On cumule les avantages du RAID 0et du RAID 1. Une bande de parité assure la
RAID 5
redondance de l'information. Un disque défaillant est reconstruit à partir des autres.
En RAID 6, il y a deux bandes de parité. Le RAID6 supporte la défaillance de deux
RAID 6
disques du RAID.
Le RAID 10 (1+0) met en RAID 0 des disques en RAID 1. On peut avoir la
RAID 10
défaillance simultanée de disques de plusieurs miroirs.
C'est un paramètre du RAID. Il désigne la plus petite quantité d'informations qui peut
chunk size
être écrite sur un disque. Dans Linux, il est de 64Ko par défaut.
Les disques qui font partie d'un RAID, généralement des partitions, sont de type "fd".
Ce type est positionné avec les commandes fdisk ou parted. Le pilote des disques
RAID les détecte automatiquement au moment du boot. Pour qu'il active les RAID
Persistent
sans que vous interveniez, il faut qu'il trouve sur ces disques les metadata qui
super block
décrivent le RAID auquel elles appartiennent. Ces informations sont stockées dans le
"Persistent super block". Si vous créez un RAID sans "Persistent super block", vous
aurez la tâche moins aisée de l'activer manuellement.
Les disques de secours ("spare disk") constituent une réserve de disques dans lesquels
le noyau puise automatiquement pour remplacer et reconstruire un disque défaillant. Si
Spare Disk le RAID n'a pas de "spare disk", c'est à l'administrateur d'ajouter manuellement au
RAID le disque qui remplace le disque défaillant. Il faut espérer qu'il n'y ait pas de
nouvelles défaillances avant le remplacement.

Page 1 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

2) Les outils
Depuis que Linux supporte le RAID logiciel, presque tout ce qui touche aux disques RAID contient
les lettres md (« Multiple Disks »). Il en est ainsi des noms des disques RAID : /dev/md* et du
pilote. Il n'en est pas de même pour les commandes. Les premières commandes disponibles étaient
nombreuses et connues sous le nom générique de « raidtools ». Dans pratiquement toutes les
distributions, elles ont été abandonnées au profit de la seule commande mdadm qui gère toutes les
fonctionnalités du RAID. C'est, vous vous en doutez, cette commande que nous allons présenter.
Commande
mdadm La commande qui administre les disques RAID.
Fichiers
/etc/mdadm/mdadm.conf Le fichier qui contient les paramètres du(es) RAID(s)
La table du système, pseudo fichier de /proc, qui contient la description
/proc/mdstat
du(es) RAID vus par le noyau Linux.

Pour connaître la syntaxe complète de mdadm, nous renvoyons le lecteur aux pages du manuel
(man mdadm, man mdadm.conf) Nous mentionnons les éléments les plus significatifs qui
permettent la lecture des exemples.

mdadm [ --mode ] /dev/mdx [ --options ...] [ /dev/disque ...]


La commande mdadm gère tous les cas de figure. Le mode indique à mdadm la
nature de l'opération à réaliser. Nous mentionnerons principalement :
Create (--create) Pour créer un RAID.
Assemble (--assemble) Pour activer un RAID existant.
--mode Manage (--manage) Pour réaliser des opérations de gestion. C'est d'ailleurs le
mode par défaut.
Le mode Build (--build) nécessite un bon degré de pratique. C'est le mode qui
permet de fabriquer un RAID à partir de disques qui n'auraient pas de "Persistent
Super Block".
C'est le nom du disque qui sera associé au RAID. Il existe aussi sous la forme
/dev/mdx
/dev/md/x.
Les options de la commande. Il existe des options communes à tous les modes et
certaines qui sont spécifiques à un mode en particulier.
Nous mentionnons l'option --level qui indique, utilisée avec le mode "Create", le
--options type de RAID à construire.
--level=linear,raid0, 0, stripe,raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10,
multipath, mp.
Les écritures --level=5 et --level=raid5 sont donc synonymes.
Ces arguments désignent les disques (ie. les partitions de type fd) qui
/dev/disque
interviennent dans le RAID.

Page 2 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

3) Un exemple
L'exemple a été réalisé sur un système Linux Ubuntu où le le logiciel n'est pas installé. C'est la
première étape à effectuer.
# apt-get install mdadm
L'installation nous met à disposition la commande mdadm mais a aussi mis à jour le fichier initrd
pour que le noyau puisse charger le pilote des disques RAID's. Bien que cette opération soit
transparente, il nous semble utile d'en montrer quelques aspects. La lecture du prochain encadré
peut être reportée à plus tard.
# ls -l /boot/initrd*
-rw-r--r-- 1 root root 7493465 2007-10-08 21:03 /boot/initrd.img-2.6.20-16-generic
-rw-r--r-- 1 root root 8309695 2008-04-02 12:13 /boot/initrd.img-2.6.22-14-generic
-rw-r--r-- 1 root root 8043038 2008-03-21 13:36 /boot/initrd.img-2.6.22-14-generic.bak

Consultons le contenu du fichier initrd installé pour mdadm

# gunzip < /boot/initrd.img-2.6.22-14-generic > initrd


# file *
initrd: ASCII cpio archive (SVR4 with no CRC)
# cpio -itv < initrd | grep md
-rw-r--r-- 1 root root 274 Jul 13 2007 etc/udev/rules.d/85-mdadm.rules
-rw-r--r-- 1 root root 914 Jul 13 2007 etc/udev/rules.d/65-mdadm.vol_id.rules
drwxr-xr-x 2 root root 0 Apr 2 2008 etc/mdadm
-rw-r--r-- 1 root root 668 Apr 2 2008 etc/mdadm/mdadm.conf
-rwxr-xr-x 1 root root 183488 Jul 13 2007 sbin/mdadm
drwxr-xr-x 2 root root 0 Apr 2 2008 lib/modules/2.6.22-14-generic/kernel/drivers/md
-rw-r--r-- 1 root root 148496 Feb 12 05:32 lib/modules/2.6.22-14-
generic/kernel/drivers/md/raid456.ko
-rw-r--r-- 1 root root 10712 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
linear.ko
-rw-r--r-- 1 root root 13832 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
raid0.ko
-rw-r--r-- 1 root root 28952 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
dm-snapshot.ko
-rw-r--r-- 1 root root 37280 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
raid1.ko
-rw-r--r-- 1 root root 129568 Feb 12 05:32 lib/modules/2.6.22-14-
generic/kernel/drivers/md/md-mod.ko
-rw-r--r-- 1 root root 16400 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
multipath.ko
-rw-r--r-- 1 root root 10072 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
xor.ko
-rw-r--r-- 1 root root 36576 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
raid10.ko
-rw-r--r-- 1 root root 98368 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/

Page 3 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

dm-mod.ko
-rw-r--r-- 1 root root 36656 Feb 12 05:32 lib/modules/2.6.22-14-generic/kernel/drivers/md/
dm-mirror.ko
Il faut ensuite rebooter. Nous vérifions que le démon mdadm est actif et que tous les liens
symboliques ont été créés pour automatiser l'arrêt et le démarrage du service.
# ps -e | grep mdadm
6725 ? 00:00:00 mdadm
# updatedb
# locate mdadm
/etc/default/mdadm
/etc/udev/rules.d/85-mdadm.rules
/etc/udev/rules.d/65-mdadm.vol_id.rules
/etc/rc1.d/K25mdadm
/etc/cron.d/mdadm
/etc/rc3.d/S25mdadm
/etc/rc2.d/S25mdadm
/etc/rc4.d/S25mdadm
/etc/mdadm
/etc/mdadm/mdadm.conf
/etc/init.d/mdadm
/etc/logcheck/violations.d/mdadm
/etc/logcheck/ignore.d.server/mdadm
/etc/rc5.d/S25mdadm
/etc/rc0.d/K25mdadm
/etc/rc6.d/K25mdadm
...
/sbin/mdadm

Nous pouvons maintenant passer à la création des RAID's. Dans un premier temps, nous allons
créer les partitions que nous allons utiliser. Pour cela, nous disposons de quatre disques SCSI de
512 Mo /dev/sdb,/dev/sdc,/dev/sdd et /dev/sde. Sur chacun d'eux, nous allons créer une partition
/dev/sdx1 qui occupe tout le disque.
# fdisk /dev/sdb

Command (m for help): p

Disk /dev/sdb: 536 MB, 536870912 bytes


64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0x53f985ee

Device Boot Start End Blocks Id System


Command (m for help): n
Command action
e extended

Page 4 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

p primary partition (1-4)


p
Partition number (1-4): 1
First cylinder (1-512, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-512, default 512):
Using default value 512

Command (m for help): t


Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
...
# fdisk -l /dev/sde

Disk /dev/sde: 536 MB, 536870912 bytes


64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0xe5856016

Device Boot Start End Blocks Id System


/dev/sde1 1 512 524272 fd Linux raid autodetect

4) Création d'un RAID 0

Nous créons un RAID 0 avec les partitions /dev/sdb1 et /dev/sdc1. Le pseudo fichier /proc/mdstat
nous montre la vision des disques RAID par le noyau. Pour le visualiser, nous ferons exécuter
périodiquement la commande 'cat /proc/mdstat' par la commande watch. Nous utilisons le mode
Create et nous indiquons que le niveau de RAID est zéro et qu'il y a deux disques dans le RAID.

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1


mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

# watch -n1 'cat /proc/mdstat'


Every 1,0s: cat /proc/mdstat Wed Apr 2 14:12:09 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]


md0 : active raid0 sdc1[1] sdb1[0]
1048320 blocks 64k chunks

unused devices: <none>


Une fois le disque RAID créé, son utilisation est identique à celle d'une partition ou d'un volume
logique. Nous allons créer un système de fichiers ext3 sur /dev/md0 et ensuite visualiser les attributs
du système de fichiers avec mount et df et du disque RAID avec mdadm –query et mdadm

Page 5 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

--detail.
# ls -l /dev/md*
brw-rw---- 1 root disk 9, 0 2008-04-02 14:11 /dev/md0
# mkfs.ext3 /dev/md0
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262080 blocks
13104 blocks (5.00%) reserved for the super user
...
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md0 /mnt/repertoire/
# mount
/dev/mapper/ubuntu-root on / type ext3 (rw,errors=remount-ro)
...
/dev/md0 on /mnt/repertoire type ext3 (rw)
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu-root
12G 3,1G 7,5G 29% /
...
/dev/md0 1008M 18M 940M 2% /mnt/repertoire

# mdadm --query /dev/md0


/dev/md0: 1023.75MiB raid0 2 devices, 0 spares. Use mdadm --detail for more detail.

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Wed Apr 2 14:11:12 2008
Raid Level : raid0
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Wed Apr 2 17:09:15 2008


State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Page 6 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Chunk Size : 64K

UUID : a413fd3f:6c1d572d:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.3

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
Nous allons arrêter le disque RAID /dev/md0.
# mdadm --manage /dev/md0 –stop
# mdadm --detail /dev/md0
mdadm: md device /dev/md0 does not appear to be active.

Nous aurions pu écrire plus simplement :

# mdadm --stop /dev/md0


mdadm: stopped /dev/md0

Nous allons redémarrer le disque RAID /dev/md0.


# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1
mdadm: /dev/md0 has been started with 2 drives.

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Wed Apr 2 14:11:12 2008
Raid Level : raid0
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
...
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1

5) Création d'un RAID 1

Sans disque de réparation (« spare »)


Le premier exemple n'utilise pas de disque de réparation (« spare disk »). Nous mettons en miroir
les deux partitions /dev/sdb1 et /dev/sdc1. Nous ne présentons pas cette fois la commande de
visualisation des attributs du RAID. Vous nous faites confiance. Vous noterez cependant que la
place disque disponible est, cette fois, de 512 Mo, du fait du miroir.

Page 7 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

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


Par contre, nous allons étudier le comportement du RAID en cas de panne. Pour cela, nous simulons
la défaillance d'un disque en le déclarant en erreur. L'option –set-faulty nous le permet. Nous
retirons ensuite le disque du RAID avec l'option –remove. Le RAID est toujours actif mais ne
fonctionne plus qu'avec un seul disque.
# mdadm --set-faulty /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 08:02:22 2008
Raid Level : raid1
Array Size : 524160 (511.96 MiB 536.74 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:04:00 2008


State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0

UUID : b777e616:9667b4ad:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.10

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed

2 8 33 - faulty spare /dev/sdc1

# mdadm --remove /dev/md0 /dev/sdc1


mdadm: hot removed /dev/sdc1

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 08:02:22 2008
Raid Level : raid1
Array Size : 524160 (511.96 MiB 536.74 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)

Page 8 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:06:24 2008


State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : b777e616:9667b4ad:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.14

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed

#watch -n2 'cat /proc/mdstat'


Every 2,0s: cat /proc/mdstat Thu Apr 3 08:11:17 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid1 sdb1[0]
524160 blocks [2/1] [U_]

unused devices: <none>


Nous avons un disque inutilisé, ici /dev/sdd1. Ajoutons le au RAID pour le réparer. L'ajout du
disque au RAID déclenche automatiquement la reconstruction.
# mdadm --add /dev/md0 /dev/sdd1
mdadm: added /dev/sdd1
#watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 08:12:10 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid1 sdd1[2] sdb1[0]
524160 blocks [2/1] [U_]
[=>...................] recovery = 7.8% (41792/524160) finish=1.7min spe
ed=4643K/sec

unused devices: <none>


# mdadm --detail /dev/md0
/dev/md0:

Page 9 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Version : 00.90.03
Creation Time : Thu Apr 3 08:02:22 2008
Raid Level : raid1
Array Size : 524160 (511.96 MiB 536.74 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:13:50 2008


State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : b777e616:9667b4ad:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.22

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 49 1 active sync /dev/sdd1
Avec disque de réparation (« spare »)
Nous allons maintenant créer le même RAID 1 avec les partitions /dev/sdb1 et /dev/sdc1 et un
disque de « spare », ici /dev/sdd1. Après avoir la défaillance de /dev/sdc1, nous constaterons que le
disque /dev/sdd1 est automatiquement utilisé pour la reconstruction du RAID.
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 /dev/sdb1 /
dev/sdc1 /dev/sdd1
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Wed Apr 2 18:11:45 2008
Raid Level : raid1
Array Size : 524160 (511.96 MiB 536.74 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Wed Apr 2 18:11:45 2008


State : clean, resyncing
Active Devices : 2
Working Devices : 3

Page 10 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Failed Devices : 0
Spare Devices : 1

Rebuild Status : 31% complete

UUID : 0678558c:f2512ffb:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.1

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1

2 8 49 - spare /dev/sdd1
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
524160 blocks [2/2] [UU]

unused devices: <none>


# mdadm --set-faulty /dev/md0 /dev/sdc1
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 08:15:54 2008
Raid Level : raid1
Array Size : 524160 (511.96 MiB 536.74 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:18:05 2008


State : active, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 1
Spare Devices : 1

Rebuild Status : 4% complete

UUID : 7c8354f4:7bbc19a9:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.9

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1

Page 11 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

2 8 49 1 spare rebuilding /dev/sdd1

3 8 33 - faulty spare /dev/sdc1

# watch -n2 'cat /proc/mdstat'


Every 2,0s: cat /proc/mdstat Thu Apr 3 08:18:24 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid1 sdd1[2] sdc1[3](F) sdb1[0]
524160 blocks [2/1] [U_]
[===>.................] recovery = 18.7% (98496/524160) finish=1.3min spe
ed=5184K/sec

unused devices: <none>

6) Création d'un RAID 5

Nous allons créer un RAID 5 avec les trois disques /dev/sdb1 /dev/sdc1 et /dev/sdd1. Nous
présentons le détail pendant la construction et après qu'elle soit terminée. Vous remarquerez que la
place disque disponible est de 1 Go. En effet, l'un des trois disques contient les bandes de parité.
# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1
/dev/sdd1
mdadm: array /dev/md0 started.

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 08:25:26 2008
Raid Level : raid5
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:25:26 2008


State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric

Page 12 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Chunk Size : 64K

Rebuild Status : 30% complete

UUID : 3773fadf:b1c498ea:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.1

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 49 2 spare rebuilding /dev/sdd1
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 08:27:21 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
1048320 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[==============>......] recovery = 71.8% (377216/524160) finish=0.6min sp
eed=3489K/sec

unused devices: <none>

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 08:25:26 2008
Raid Level : raid5
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 08:28:05 2008


State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 64K

UUID : 3773fadf:b1c498ea:e368bf24:bd0fce41 (local to host ubuntu)

Page 13 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Events : 0.8

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
Utilisons le disque /dev/md0 pour un système de fichiers ext3.
# mkfs.ext3 /dev/md0
# mount /dev/md0 /mnt/repertoire
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md0 1031832 17692 961724 2% /mnt/repertoire
Sur ce RAID 5, nous allons simuler une corruption des données. Pour la simuler, nous n'avons pas
d'autres ressources que de corrompre le « Persistent super block ». En effet, la corruption de
données résulte d'une écriture qui renvoie une erreur d'IO. Ecrire avec la commande dd sur un
disque génère une corruption du système de fichiers mais n'en est pas une au niveau du RAID. Nous
allons simuler cette erreur avec l'option –zero-superblock du mode « –misc ». Le RAID continue à
fonctionner. Lors du redémarrage, nous allons constater la reconstruction automatique. Vous noterez
aussi que nous profitons de cet exemple pour montrer comment forcer le démarrage du RAID avec
deux disques seulement. Nous utilisons l'option –assemble, déjà vue, en conjonction avec l'option
–force.
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --misc /dev/md0 --zero-superblock /dev/sdc1

# mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdd1


mdadm: /dev/md0 has been started with 2 drives (out of 3).
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 10:30:38 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid5 sdb1[0] sdd1[2]
1048320 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>


# mdadm --add /dev/md0 /dev/sdc1
mdadm: added /dev/sdc1
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 10:32:18 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid5 sdc1[3] sdb1[0] sdd1[2]
1048320 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

Page 14 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

[=>...................] recovery = 7.0% (37248/524160) finish=4.3min spe


ed=1862K/sec

unused devices: <none>


Comme nous l'avons fait avec le RAID 1, simulons la défaillance d'un disque.
# mdadm --set-faulty /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
# mdadm --remove /dev/md0 /dev/sdc1
mdadm: hot removed /dev/sdc1
# mdadm --re-add /dev/md0 /dev/sdc1
mdadm: re-added /dev/sdc1

# watch -n2 'cat /proc/mdstat'


Every 2,0s: cat /proc/mdstat Thu Apr 3 10:38:52 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid5 sdc1[3] sdb1[0] sdd1[2]
1048320 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
[>....................] recovery = 4.8% (26112/524160) finish=4.4min spe
ed=1865K/sec

unused devices: <none>

7) Création d'un RAID 6

Le RAID 6 utilise deux bandes de parité. Pour cela, il lui faut au moins quatre disques et il peut
donc résister à la défaillance de deux disques. C'est l'objet de l'exemple, rien d'autre.
# mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1
/dev/sdd1 /dev/sde1
mdadm: array /dev/md0 started.
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 11:23:48 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid6 sde1[3] sdd1[2] sdc1[1] sdb1[0]
1048320 blocks level 6, 64k chunk, algorithm 2 [4/4] [UUUU]
[>....................] resync = 3.7% (19688/524160) finish=6.4min speed
=1312K/sec

unused devices: <none>

# mdadm --set-faulty /dev/md0 /dev/sdc1 /dev/sdd1

Page 15 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

mdadm: set /dev/sdc1 faulty in /dev/md0


mdadm: set /dev/sdd1 faulty in /dev/md0
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 11:31:51 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid6 sde1[3] sdd1[4](F) sdc1[5](F) sdb1[0]
1048320 blocks level 6, 64k chunk, algorithm 2 [4/2] [U__U]

unused devices: <none>

# mdadm --remove /dev/md0 /dev/sdc1 /dev/sdd1


mdadm: hot removed /dev/sdc1
mdadm: hot removed /dev/sdd1
# mdadm --re-add /dev/md0 /dev/sdc1 /dev/sdd1
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 11:34:09 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid6 sdd1[4](S) sdc1[5] sde1[3] sdb1[0]
1048320 blocks level 6, 64k chunk, algorithm 2 [4/2] [U__U]
[>....................] recovery = 4.8% (25984/524160) finish=4.4min spe
ed=1856K/sec

unused devices: <none>

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 11:23:33 2008
Raid Level : raid6
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 11:33:56 2008


State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2

Page 16 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Chunk Size : 64K

Rebuild Status : 24% complete

UUID : ec87b848:595d7e68:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.16

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
5 8 33 1 spare rebuilding /dev/sdc1
2 0 0 2 removed
3 8 65 3 active sync /dev/sde1

4 8 49 - spare /dev/sdd1
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 11:38:58 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra


id10]
md0 : active raid6 sdd1[4] sdc1[1] sde1[3] sdb1[0]
1048320 blocks level 6, 64k chunk, algorithm 2 [4/3] [UU_U]
[>....................] recovery = 3.9% (20992/524160) finish=6.3min spe
ed=1312K/sec

unused devices: <none>

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 11:23:33 2008
Raid Level : raid6
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 11:38:41 2008


State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Page 17 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Chunk Size : 64K

Rebuild Status : 10% complete

UUID : ec87b848:595d7e68:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.26

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 spare rebuilding /dev/sdd1
3 8 65 3 active sync /dev/sde1

8) Création d'un RAID 10 (1+0)

Un RAID 10, c'est un RAID 0 construit à partir de deux RAID 1. Ce type de RAID autorise la
défaillance de deux disques, à condition qu'ils n'appartiennent pas au même RAID 1. Cette solution
est moins souple, à priori, que le RAID 6 où les disques défaillants peuvent être quelconques.
Créons le RAID 10 et construisons un système de fichiers ext3. Vous ne serez pas étonné de voir
que notre RAID offre un espace utile de 1Go pour un espace total de 2Go.
# mdadm --create --verbose /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1
/dev/sdd1 /dev/sde1
mdadm: array /dev/md10 started.

# mkfs.ext3 /dev/md10
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=

This filesystem will be automatically checked every 36 mounts or


180 days, whichever comes first. Use tune2fs -c or -i to override.

# mount /dev/md10 /mnt/repertoire/


Simulons la défaillance d'un disque pour vérifier que tout est correct. Notons que si le disque que
l'on ajoute occupe la même position que celui que l'on a retiré, nous pouvons utiliser l'option
–re-add de la commande mdadm.
# mdadm --set-faulty /dev/md10 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md10
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md10 1031832 17692 961724 2% /mnt/repertoire

# ls /mnt/repertoire/
lost+found
# mdadm --remove /dev/md10 /dev/sdb1
mdadm: hot removed /dev/sdb1

Page 18 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

# mdadm --re-add /dev/md10 /dev/sdb1


mdadm: re-added /dev/sdb1
# ls /mnt/repertoire/
lost+found
# mdadm --detail /dev/md10
/dev/md10:
Version : 00.90.03
Creation Time : Thu Apr 3 13:02:27 2008
Raid Level : raid10
Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 10
Persistence : Superblock is persistent

Update Time : Thu Apr 3 13:08:51 2008


State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : near=2, far=1


Chunk Size : 64K

Rebuild Status : 89% complete

UUID : 3b8541e5:d7c35568:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.20

Number Major Minor RaidDevice State


4 8 17 0 spare rebuilding /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 65 3 active sync /dev/sde1
Simulons la défaillance de deux disques n'appartenant pas au même RAID 1 et vérifions, là encore,
que tout est correct. Entre le retrait et le remplacement des disques défaillants, nous modifions le
contenu du répertoire /mnt/repertoire sur lequel le RAID est monté. Pendant que la reconstruction
s'opère, nous démontons et remontons le système de fichiers.
# mdadm --set-faulty /dev/md10 /dev/sdb1 /dev/sdd1
mdadm: set /dev/sdb1 faulty in /dev/md10
mdadm: set /dev/sdd1 faulty in /dev/md10
# ls /mnt/repertoire/
lost+found

Page 19 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

# mdadm --remove /dev/md10 /dev/sdb1 /dev/sdd1


mdadm: hot removed /dev/sdb1
mdadm: hot removed /dev/sdd1
# ls /mnt/repertoire/
lost+found
# cp /etc/g* /mnt/repertoire
# mdadm --re-add /dev/md10 /dev/sdb1 /dev/sdd1
mdadm: re-added /dev/sdb1
mdadm: re-added /dev/sdd1
# ls /mnt/repertoire/
gai.conf gnome-vfs-mime-magic group group- gshadow gshadow- lost+found
# umount /mnt/repertoire/
# mount /dev/md10 /mnt/repertoire/
# ls /mnt/repertoire/
gai.conf gnome-vfs-mime-magic group group- gshadow gshadow- lost+found
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 13:18:52 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]


md10 : active raid10 sdd1[4] sdb1[0] sde1[3] sdc1[1]
1048320 blocks 64K chunks 2 near-copies [4/3] [UU_U]
[===================>.] recovery = 97.2% (510208/524160) finish=0.0min
speed=2958K/sec

unused devices: <none>


Réalisons des opérations similaires mais, cette fois, avec deux disques contigus. Vous constatez que
l'ajout de deux nouveaux disques ne déclenche pas de reconstruction. Le système de fichiers ne peut
être remonté.
# mdadm --set-faulty /dev/md10 /dev/sdb1 /dev/sdc1
mdadm: set /dev/sdb1 faulty in /dev/md10
mdadm: set /dev/sdc1 faulty in /dev/md10
# ls /mnt/repertoire/
lost+found
# mdadm --remove /dev/md10 /dev/sdb1 /dev/sdc1
mdadm: hot removed /dev/sdb1
mdadm: hot removed /dev/sdc1
# ls /mnt/repertoire/
lost+found
# mdadm --re-add /dev/md10 /dev/sdb1 /dev/sdc1
mdadm: re-added /dev/sdb1
mdadm: re-added /dev/sdc1
# watch -n2 'cat /proc/mdstat'
Every 2,0s: cat /proc/mdstat Thu Apr 3 14:39:17 2008

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

Page 20 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

md10 : active raid10 sdc1[4](S) sdb1[5](S) sdd1[2] sde1[3]


1048320 blocks 64K chunks 2 near-copies [4/2] [__UU]

unused devices: <none>


# ls /mnt/repertoire/
lost+found
# umount /mnt/repertoire/
# mount /dev/md10 /mnt/repertoire/
mount: you must specify the filesystem type

9) MULTIPATH

La technique du « multipath » (chemin multiple) est utile si vous disposez d'un disque ou d'une baie
de disques, connecté à plusieurs contrôleurs. Il existe alors plusieurs chemins, un par contrôleur,
pour accéder au disque. La création d'un « multipah » permet de regrouper à tous les noms
physiques existants (/dev/sdx, /dev/sdy...) un nom logique unique (/dev/mdx). Pour nommer le
disque, vous utilisez le nom logique (/dev/mdx). C'est le système qui choisit le chemin physique à
emprunter (/dev/sdx). En cas de défaillance d'un chemin, c'est un autre qui prend le relais. Le
multipath que nous traitons ici est bien le multipath logiciel intégré au noyau Linux depuis la
version 2.6.13. Pour sa mise en oeuvre réelle, il faut bien entendu disposer d'un matériel élaboré tel
qu'une baie de disque externe (« SAN, Storage Area Network »), accessible par par fibre optique via
au moins deux « switch's ». Dans notre exemple, les noms /dev/sdx que nous utilisons sont associés
à des disques SCSI différents. Son seul intérêt est d'illustrer la syntaxe et le comportement du
noyau.

Procédons à la création du « multipath ».


# mdadm --create /dev/md0 --level=multipath --raid-devices=4 /dev/sdb1 /dev/sdc1
/dev/sdd1 /dev/sde1
Continue creating array? y
mdadm: array /dev/md0 started.

Visualisons le journal /var/log/messages.


# tail /var/log/messages
Apr 3 17:20:43 ubuntu kernel: [35339.838866] md: bind<sdb1>
Apr 3 17:20:43 ubuntu kernel: [35339.903746] md: bind<sdc1>
Apr 3 17:20:43 ubuntu kernel: [35339.942480] md: bind<sdd1>
Apr 3 17:20:43 ubuntu kernel: [35339.956378] md: bind<sde1>
Apr 3 17:20:43 ubuntu kernel: [35340.078531] multipath: array md0 active with 4 out of 4 IO
paths

Utilisons le disque /dev/md0.


# mkfs.ext3 /dev/md0
mke2fs 1.40.2 (12-Jul-2007)

Page 21 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Filesystem label=
OS type: Linux
...

# mount /dev/md0 /mnt/repertoire/


# df -h /mnt/repertoire/
Filesystem Size Used Avail Use% Mounted on
/dev/md0 496M 11M 460M 3% /mnt/repertoire

Un, puis deux chemins ne sont plus valides. Le disque est toujours opérationnel.
# mdadm --set-faulty /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0

# tail /var/log/messages
Apr 3 17:41:11 ubuntu kernel: [36565.566009] ^IOperation continuing on 3 IO paths.
Apr 3 17:41:11 ubuntu kernel: [36565.570440] MULTIPATH conf printout:
Apr 3 17:41:11 ubuntu kernel: [36565.570448] --- wd:3 rd:4
Apr 3 17:41:11 ubuntu kernel: [36565.570454] disk0, o:1, dev:sde1
Apr 3 17:41:11 ubuntu kernel: [36565.570457] disk1, o:1, dev:sdd1
Apr 3 17:41:11 ubuntu kernel: [36565.570460] disk2, o:0, dev:sdc1
Apr 3 17:41:11 ubuntu kernel: [36565.570463] disk3, o:1, dev:sdb1
Apr 3 17:41:11 ubuntu kernel: [36565.581758] MULTIPATH conf printout:
Apr 3 17:41:11 ubuntu kernel: [36565.581773] --- wd:3 rd:4
Apr 3 17:41:11 ubuntu kernel: [36565.581779] disk0, o:1, dev:sde1
Apr 3 17:41:11 ubuntu kernel: [36565.581782] disk1, o:1, dev:sdd1
Apr 3 17:41:11 ubuntu kernel: [36565.581785] disk3, o:1, dev:sdb1

# mdadm --set-faulty /dev/md0 /dev/sdb1


mdadm: set /dev/sdb1 faulty in /dev/md0

# tail /var/log/messages
Apr 3 17:44:17 ubuntu kernel: [36751.413857] ^IOperation continuing on 2 IO paths.
Apr 3 17:44:17 ubuntu kernel: [36751.417758] MULTIPATH conf printout:
Apr 3 17:44:17 ubuntu kernel: [36751.417766] --- wd:2 rd:4
Apr 3 17:44:17 ubuntu kernel: [36751.417771] disk0, o:1, dev:sde1
Apr 3 17:44:17 ubuntu kernel: [36751.417774] disk1, o:1, dev:sdd1
Apr 3 17:44:17 ubuntu kernel: [36751.417778] disk3, o:0, dev:sdb1
Apr 3 17:44:17 ubuntu kernel: [36751.425503] MULTIPATH conf printout:
Apr 3 17:44:17 ubuntu kernel: [36751.425514] --- wd:2 rd:4
Apr 3 17:44:17 ubuntu kernel: [36751.425520] disk0, o:1, dev:sde1
Apr 3 17:44:17 ubuntu kernel: [36751.425523] disk1, o:1, dev:sdd1

# cp /etc/passwd /mnt/repertoire/
# mkdir /mnt/repertoire/rep1
# umount /mnt/repertoire/

Page 22 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

# mount /dev/md0 /mnt/repertoire/


# ls /mnt/repertoire/
lost+found passwd rep1

10) Le fichier /etc/mdadm/mdadm.conf

Le fichier /etc/mdadm/mdadm.conf est le fichier qui, par défaut, est utilisé pour décrire les RAID's
connus de Linux. Il n'est pas systématiquement utilisé pour démarrer les RAID's au moment du
boot, si les disques d'un RAID sont en « autodetect » avec un « Persistent Super Bloc ». Par contre
son usage s'avère pratique pour économiser la syntaxe de démarrage d'un RAID en mode interactif,
après qu'il ait été arrêté.

Nous renvoyons le lecteur à la commande man mdadm.conf pour connaître toutes les directives de
définition d'un RAID. C'est la clause ARRAY qui est fondamentale. Il existe un moyen simple pour
renseigner un RAID dans le fichier, c'est à dire créer la ligne ARRAY associée, c'est de le faire faire
par la commande mdadm. Il suffit de rediriger la sortie de la commande mdadm --examine –scan
à la fin du fichier mdadm.conf.
# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb1 /
dev/sdc1 /dev/sdd1 /dev/sde1
Continue creating array? y
mdadm: array /dev/md0 started.

# mdadm --examine --scan


ARRAY /dev/md0 level=raid5 num-devices=3 UUID=c3dd94d9:744e620b:e368bf24:bd0fce41
spares=1

# mdadm --examine --scan >> /etc/mdadm/mdadm.conf


# tail /etc/mdadm/mdadm.conf
...
# definitions of existing MD arrays
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=c3dd94d9:744e620b:e368bf24:bd0fce41
spares=1
Si nous redémarrons le système après avoir commenté la ligne ARRAY, nous constatons que le
RAID a été correctement redémarré.
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[0] sde1[3](S) sdd1[2] sdc1[1]
1048320 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

# mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.03
Creation Time : Thu Apr 3 14:55:38 2008

Page 23 aasoftware.eu ©Gilles GOUBET – 2008


Gérer des disques RAID sous Linux

Raid Level : raid5


Array Size : 1048320 (1023.92 MiB 1073.48 MB)
Used Dev Size : 524160 (511.96 MiB 536.74 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Apr 3 15:00:46 2008


State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 64K

UUID : c3dd94d9:744e620b:e368bf24:bd0fce41 (local to host ubuntu)


Events : 0.8

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1

3 8 65 - spare /dev/sde1

La commande mdadm --assemble permet d'activer un RAID préalablement arrêter. Avec l'option
--scan, la commande explore le fichier pour déterminer les RAID à démarrer.
# mdadm --stop /dev/md0
# mdadm --assemble --scan
mdadm: /dev/md0 has been started with 3 drives and 1 spare.

Bonne chance
Gilles GOUBET

Page 24 aasoftware.eu ©Gilles GOUBET – 2008