Mise en place d’un RAID-1 Logiciel

Objectif

L’objectif de ce tutoriel est la mise en place d’un RAID logiciel sous Linux. C’est-à-dire, l’installation et la configuration de l’outil mdadm.
Dans ce tutoriel, nous installerons un RAID-1. L’exemple pris est celui de deux disques durs de 1To en SATA.
L’avantage du SATA sur le IDE, est la possibilité du Hot-Plug, ou branchement à chaud, qui pourrait s’avérer utile dans l’avenir en cas de défaillance d’un des deux disques.

Pré-requis

Il vous faudra donc avoir 2 disques durs (au minimum, car il est possible de faire du RAID-1 avec plus de 2 disques) de même capacité et, de préférence, de même caractéristique. Dans notre cas, l’exemple se basera sur 2x 1To.

Il faut également installer et configurer Postfix (pour la supervision par mdadm de l’unité RAID).

Installation

Installation de mdadm

L’installation étant extrêment simple, je ne m’attarderais pas longtemps.

sudo apt-get install mdadm

Préparation du partitionnement

Le partitionnement sur les deux disques doit être strictement identique.

Dans mon exemple, le partitionnement sera le suivant:

  • 1 partition de 1000.2 Go sur le disque 1
  • 1 partition de 1000.2 Go sur le disque 2

L’outil de partitionnement (en ligne de commande) est fdisk.
Les commandes suivantes sont utilisées sur /dev/sda (premier disque) et seront identiques sur le second disque.

sudo fdisk /dev/sda

Le nombre de cylindres pour ce disque est fixé à 121601.
Il n’y a rien d’incorrect avec cela, mais c’est plus grand que 1024,
et cela pourrait causer des problèmes pour certaines installations:
1) logiciels qui sont exécutés à l’amorçage (i.e., vieilles versions de LILO)
2) logiciels d’amorçage et de partitionnement pour d’autres OS
(i.e., DOS FDISK, OS/2 FDISK)

Commande (m pour l’aide): m
Commande d’action
a   bascule le fanion d’amorce
b   éditer l’étiquette BSD du disque
c   basculer le fanion de compatibilité DOS
d   supprimer la partition
l   lister les types de partitions connues
m   afficher ce menu
n   ajouter une nouvelle partition
o   créer une nouvelle table vide de partitions DOS
p   afficher la table de partitions
q   quitter sans enregistrer les changements
s   créer une nouvelle étiquette vide pour disque de type Sun
t   modifier l’id de système de fichiers d’une partition
u   modifier les unités d’affichage/saisie
v   vérifier la table de partitions
w   écrire la table sur le disque et quitter
x   fonctions avancées (pour experts seulement)

En tapant la commande « m » vous obtenez la liste des commandes disponibles.

Dans notre cas, il va falloir créer la partition de 1000.2Go sur le disque et lui attribuer un type (Linux raid autodetect). Pour ce faire, tapez les commandes suivantes:

Commande (m pour l'aide): n
Commande d'action
e   étendue
p   partition primaire (1-4)
p
Numéro de partition (1-4): 1
Premier cylindre (366-121601, par défaut 1):
Utilisation de la valeur par défaut 1
Dernier cylindre, +cylindres or +taille{K,M,G} (1-121601, par défaut 121601):
Utilisation de la valeur par défaut 121601

Puis changez le type de la partition pour lui affecter Linux raid autodetect

Commande (m pour l'aide): t
Numéro de partition (1-4): 1
Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 2 à fd (Linux raid autodetect)

Pour finir, vous pouvez vérifier que la table de partition de ce disque correspond bien à la configuration souhaitée:

Commande (m pour l'aide): p

Disque /dev/sda: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Identifiant de disque : 0x0004260e

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1             1      121601   973828170   fd  Linux raid autodetect

Il ne reste qu’à écrire la nouvelle table des partitions sur le disque:

Commande (m pour l'aide): w
La table de partitions a été altérée!
Appel de ioctl() pour relire la table de partitions.
AVERTISSEMENT: la relecture de la table de partitions a échoué avec l'erreur 16: Périphérique ou ressource occupé.
Le noyau va continuer à utiliser l'ancienne table.
La nouvelle table sera utilisé lors du prochain réamorçage.
Synchronisation des disques.

Faire de même sur le second disque:

sudo fdisk /dev/sdb

On a présent deux partitions de 1000.2Go, une sur chaque disque.

Si comme dans mon exemple, vous obtenez à la fin le message indiquant que le périphérique est occupé, pensez à redémarrer votre machine.

Création du RAID-1

Selon la page d’aide du site Ubuntu-fr.org, il est nécessaire pour les versions Ubuntu antérieures à la 8.04 LTS de créer le fichier FIFO qui sera utilisé par le RAID. Ayant fait l’installation RAID sur une Ubuntu 9.04, je me suis passé de cette commande, car le fichier /dev/md0 a été créé automatiquement par la commande mdadm suivante.

sudo mknod /dev/md0 b 9 0

Pour créer l’unité RAID, on va lancer la commande suivante, permettant d’enregistrer les partitions /dev/sda2 et /dev/sdb2 comme éléments de l’unité RAID /dev/md0

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1

Dans la commande, on précise en premier lieu l’action (--create) puis le nom du fichier FIFO, le niveau de RAID désiré (dans notre exemple 1: --level=1), le nombre de devices composant le RAID, (--raid-devices=2) puis en dernier lieu la liste de ces devices, ici /dev/sda1 et /dev/sdb1 (/dev/sd[ab]1)

Si la question suivante vous est posée, répondez y (yes!)

mdadm: /dev/sda1 appears to contain an ext2fs file system
size=45897704K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=45897704K  mtime=Thu Jan  1 01:00:00 1970
Continue creating array? y
mdadm: array /dev/md0 started.

Voilà ! Le RAID a été initialisé.

Afin de permettre au RAID de démarrer à chaque reboot de la machine, tapez la commande suivante :

sudo mdadm --daemonise /dev/md0

Vous pouvez récupérer les informations sur ce RAID en tapant la commande suivante:

sudo mdadm --detail /dev/md0
/dev/md0:
Version : 00.90
Creation Time : Sun May 17 13:01:29 2009
Raid Level : raid1
Array Size : 976759936 (931.51 GiB 1000.20 GB)
Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun May 17 13:01:29 2009
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Rebuild Status : 1% complete

UUID : 40b24d1f:1b156d2e:0df45006:c5faa048 (local to host XXXXXX)
Events : 0.1

Number   Major   Minor   RaidDevice State
0       8        1        0      active sync   /dev/sda1
1       8       17        1      active sync   /dev/sdb1
Laissez la construction du RAID se faire jusqu’à la fin avant de continuer les étapes suivantes (LVM ou normal) !
Vous pouvez suivre la construction en tapant la commande précédente et voir la ligne: Rebuild Status : 19% complete
Une autre commande utile pour vérifier la construction du RAID est la suivante :

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0]
973828096 blocks [2/2] [UU]
[====>................]  resync = 24.4% (238117952/973828096) finish=116.7min speed=105061K/sec
unused devices: <none>

Dans cette commande, vous pouvez suivre plus en détails la construction du RAID, et surtout, intéressant, voir le temps qu’il reste !

Finalisation de la création

Redémarrez la machine.
Pour retrouver le bon device affecté à votre RAID, lancez la commande suivante :

sudo mdadm --detail --scan
mdadm: md device /dev/md/d0 does not appear to be active.

Une fois repérée, dans mon cas, l’unité RAID ne s’appelle plus /dev/md0 mais /dev/md/d0 (ou /dev/md_d0), il faut l’activer. Tapez la commande suivante :

sudo mdadm --manage /dev/md/d0 --run
mdadm: started /dev/md/d0

Lors de l’installation que j’ai réalisée, ma table des partitions n’était pas bonne. J’ai donc du lancer fdisk pour écrire une table de partition valide sur ce disque RAID.

sudo fdisk /dev/md_d0
Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valide
Création d'une nouvelle étiquette DOS avec id de disque 0xd75ab005.
Les modifications restent en mémoire jusqu'à ce que vous les écriviez.
Après quoi, bien sûr, le contenu précédent sera irrécupérable.
Le nombre de cylindres pour ce disque est fixé à 244189984.
Il n'y a rien d''incorrect avec cela, mais c'est plus grand que 1024,
et cela pourrait causer des problèmes pour certaines installations:
1) logiciels qui sont exécutés à l'amorçage (i.e., vieilles versions de LILO)
2) logiciels d'amorçage et de partitionnement pour d'autres OS
(i.e., DOS FDISK, OS/2 FDISK)
AVERTISSEMENT: fanion 0x0000 non valide dans la table de partitions 4, sera corrigé par w(écriture)

Commande (m pour l'aide): p

Disque /dev/md_d0: 1000.2 Go, 1000202174464 octets
2 têtes, 4 secteurs/piste, 244189984 cylindres
Unités = cylindres de 8 * 512 = 4096 octets
Identifiant de disque : 0xd75ab005

Périphérique Amorce  Début        Fin      Blocs     Id  Système

Commande (m pour l'aide): w
La table de partitions a été altérée!

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.
Si vous souhaitez utiliser LVM pour la gestion de cet espace RAID, veuillez arrêter le tutoriel à ce niveau et suivre le tutoriel suivant concernant LVM :Utilisation de LVM pour gérer un volume de disques
Sinon, lisez la suite pour finaliser la mise en place de la nouvelle partition RAID.

Formatage et Montage de la Partition RAID

Une fois la création du RAID terminée, il ne vous reste qu’à formater la partition en ext3 par exemple avec la commande suivante:

sudo mkfs.ext3 -j /dev/md/d0

Puis monter la partition dans le répertoire /mnt/raid1 en l’inscrivant dans /etc/fstab

sudo mkdir -p /mnt/raid1 && vim /etc/fstab

Et ajoutez la ligne suivante:

/dev/md/d0 /mnt/raid1 ext3 defaults 0 1

Au prochain démarrage, votre unité RAID de 1000.2Go sera directement accessible depuis /mnt/raid1/

Sources

Tutoriel sur ubuntu-fr.org: http://doc.ubuntu-fr.org/raid_logiciel
Howto The Software RAID-HOWTO: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
MDADM – Le Wiki de 2 Noisettes: http://www.noisette.ch/wiki/index.php/Mdadm

Laisser un commentaire

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