Linux : Raid 1

nyal

Cet article a pour but d'expliquer comment mettre en place le RAID 1 logiciel sous Linux. Bonne lecture.

- Titre : Linux : Raid 1

- Auteur : nyal

- Parution : 7 juillet 2004

- Mise à jour : 5 mai 2020

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 nyal. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Installation

- III. Configuration

- IV. Vérification de mise en place du système

- V. Conclusion

I - Introduction

Cet article a pour seul but d'expliquer comment mettre en place le RAID 1 logiciel (cela est sensiblement la même chose pour les autres RAID).
L'intérêt d'un tel dispositif est de permettre de prévenir la perte de données. Le RAID 1 (mirroring) duplique les données sur les disques spécifiés. Si vous n'avez pas besoin d'avoir des données synchronisées en temps réel, vous pouvez très bien mettre en place un système de sauvegarde qui se lance tous les soirs (par exemple) via cron. Il vous faut juste choisir le bon système, selon les données.

Avantages :

1. Haute disponibilité des données et du système (si ce sont les données du système qui sont en RAID) ;

2. Gain de performance en lecture.

Inconvénients

1. Perte de temps CPU ;

2. Perte de vitesse en écriture ;

3. Perte d'espace disque.

Pour mettre en pratique ce tutoriel, il vous faudra donc deux disques durs (SCSI ou IDE), voire davantage si vous voulez rajouter des disques de rechange (spare disque) qui permettront le remplacement d'un disque en panne.
Vous pouvez aussi très bien faire les manipulations sur un seul disque dur. Mais l'intérêt est très limité.
Il peut être utile, par exemple, de faire du mirroring d'une zone du disque possédant des clusteurs défectueux.

II - Installation

Pour utiliser le RAID software avec Linux, il faut vérifier que votre kernel dispose du support RAID 1.
Si ce n'est pas le cas, recompilez le noyau en mettant le support RAID 1 directement dans le kernel (pas en module) pour éviter de mettre en place initrd lors du démarrage.

Options à cocher dans le noyau :

Une fois cela fait, il faut installer les raidtools et créer le fichier /etc/raidtab. Ceux-ci vont permettre la configuration du RAID.

III - Configuration

L'exemple de configuration est réalisé avec trois disques durs IDE : respectivement /dev/hda, /dev/hdb et /dev/hdc. Le disque /dev/hda contient l'installation standard de Linux. On n'aura spécifié que deux partitions : /dev/hda1 pour la partition racine et /dev/hda2 pour la partition swap. Bien entendu, vous pourrez ensuite complexifier le système avec davantage de partitions (mais vous devrez faire autant de fois la manipulation suivante).

Vous allez rajouter les lignes suivantes dans le fichier /etc/raidtab :

raiddev /dev/md0 # on prend le 0, mais vous pouvez prendre un autre
raid-level 1
nr-raid-disks 2
nr-spare-disks 1
persistent-superblock 1
chunck-size 16
device /dev/hda1
raid-disk 0
device /dev/hdb1
raid-disk 1
device /dev/hdc1
spare-disk 0

Explication de la ligne persistent-superblock 1
L'ajout de cette ligne permet d'écrire un superblock au début de chaque partition des disques RAID. Cela permet au kernel de lire la configuration du RAID sans lire le fichier /etc/raidtab (il est donc déconseillé d'utiliser fsck sur les partitions, au risque de modifier ce superblock).

Il vous faut créer maintenant les partitions /dev/hdb1 et /dev/hdc1 avec fdisk ou cfdisk. Les partitions doivent avoir la même taille (très important) et être de type fd (pour le RAID) pour qu'elles soient reconnues au démarrage. (Il vous faudra rebooter votre machine si vous venez de les créer. Par contre si vous avez seulement changé le type de la partition, ce n'est pas la peine de rebooter).

La commande suivante initialise le volume RAID :

mkraid /dev/md0

Mais celle-ci va échouer, car votre partition racine (/dev/hda1) est montée et occupée. Il vous faut la démonter, mais c'est impossible pour la partition racine. Il est donc nécessaire d'éditer le fichier de configuration et remplacer :

device /dev/hda1

raid-disk 0

par :

device /dev/hda1

failed-disk 0

Comme la partition /dev/hda1 est en failed-disk, /dev/hdc1 deviendra la partition utilisée pour le RAID (c'est précisément la fonction d'un disque spare). Vous pouvez éviter cela en commentant son entrée dans le fichier /etc/raidtab, pour le décommenter à la fin de la manipulation.

Vous pouvez maintenant lancer la commande :

mkraid /dev/md0

Il vous faut à présent formater le volume pour permettre le montage du système RAID (pas de souci : /dev/hda1 ne sera pas formaté, car il est en failed-disk).
Tapez par exemple (un autre système de fichier peut être choisi) :

mkreiserfs /dev/md0

Montez la partition :

mount -t reiserfs /dev/md0 /mnt/tmp

Copiez à présent les fichiers de la partition racine vers le répertoire /mnt/tmp (utilisez la commande cp -cp pour garder les droits des fichiers).

Vous avez presque fini. Il vous reste trois choses à faire :

- Changez le type de la partition /dev/hda (type fd) ;

- Remplacez dans /etc/fstab :

/dev/hda3        /                reiserfs    defaults         1   1

par

/dev/md0        /                reiserfs    defaults         1   1

- Changez dans le fichier lilo.conf :

root = /dev/hda1

par :

root= /dev/md0

Et rechargez lilo (installation dans le mbr).

Rebootez la machine. Vous avez maintenant un système RAID fonctionnel. Vérifiez à l'aide de la commande df et regardez le fichier /proc/mdstat.

Il ne reste plus qu'à rajouter la partition /dev/hda1 dans le système RAID 1.
Éditez le fichier /etc/raidtab et remplacez :

failed-disk

par :

raid-disk

Vous pouvez maintenant activer le RAID avec la commande :

raidhotadd /dev/md0 /dev/hda1

Attendez que les disques durs soient synchronisés avant d'éteindre votre système.

Vous devez avoir, une fois la synchronisation finie, une sortie ressemblant à cela (spare-disk rajouté) :

# cat /proc/mdstat

Personalities : [raid1] read_ahead 1024

sectors md0 : active raid1 hdc1[2] hdb1[0] hda1[1]

51264 blocks [2/2] [UU]

Si vous voulez démarrer sur le disque /dev/hdb, installez lilo dans son mbr et rajoutez dans le fichier /etc/fstab son swap :

/dev/hdb2        swap             swap        defaults         0   0

IV - Vérification de mise en place du système

Pour vérifier les partitions du système RAID, tapez la commande :

$ lsraid -a /dev/md0

[dev   9,   0] /dev/md0          E6C062B6.88A7E659.9216712C.30FADE07 online

[dev   3,   7] /dev/hda1         E6C062B6.88A7E659.9216712C.30FADE07 good

[dev   3,  65] /dev/hdb1        E6C062B6.88A7E659.9216712C.30FADE07 good

[dev   3,  66] /dev/hdc1        E6C062B6.88A7E659.9216712C.30FADE07 spare

Si l'un des disques durs ne fonctionne plus (fichier /proc/mdstat), rebootez sur le disque dur qui fonctionne (en rajoutant un nouveau disque dur) puis ajoutez les partitions via la commande raidhotadd (sans oublier de refaire les manipulations sur la partition).
Si les deux disques durs ne fonctionnent plus, pas de chance ;)

V - Conclusion

La manipulation est un peu complexe à mettre en œuvre. C'est pour cela que je vous conseille de tester sur une partition avec des données non sensibles dans un premier temps. Ensuite, vous pourrez faire la manipulation sur une autre partition.
Pour des nouvelles partitions sans données, n'utilisez pas le failed-disk (cela ne sert à rien).
J'espère que ce petit article vous a aidé. N'hésitez pas à me contacter en cas d'erreur.
Merci à armatatuxa et stessy pour leur relecture et correction orthographique.