Utilisateurs
Vous n'êtes actuellement pas authentifié sur le site.
Nom d'utilisateur:

Mot de passe:

Monter un RAID logiciel sous Linux
Cet article a été mis en ligne la première fois le 23 janvier 2007
Cet article a été mis à jour le 16 février 2007.
Sommaire
Pré requis
Pour mettre en place du RAID logiciel sous Linux, vous aurez besoin de:
  • Une installation de linux fonctionnelle (nous n'arborderont pas le boot sur du RAID logiciel).
  • Au moins deux disques dur de taille identique.
  • D'un minimum de connaissance sur la gestion des disques sous Linux et de l'outil fdisk.
  • De bonnes connaissances du noyau Linux. En effet, il faudra peut-être le recompiler.
Introduction
Certaines de mes données, comme chez beaucoup d'autres personnes, sont relativement importantes, soit au point de vue administratif (archives...) ou sentimental (photos...). Comme nous ne sommes jamais à l'abri d'un crash disque et d'une perte partielle ou totale des données qui se trouvaient dessus, j'ai décidé de mettre deux disques de 250 Go en RAID 1 (mirroring, voir plus loin), afin d'assurer un peu plus de sécurité à mes données, tout ceci sous Linux.
J'explique dans cet article toute la démarche pour rendre ceci possible.
Différents types de RAID
Il existe plusieurs types de RAID (Redundant Array of Independent Disks). Voici les plus utilisés:
  • RAID 0: Permet de créer une seule partition sur plusieurs disques. Utilisé quand les besoins sont des temps d'accès rapide. Aucune protection des données (un des disque lâche, tout le RAID est perdu).
  • RAID 1: RAID dit "mirroring". Permet d'utiliser deux disques physique de même taille, pour que l'un soit la copie de l'autre. Si l'un des deux lâche, les données ne sont pas perdues. Bien sûr, la capacité utile est égale à la taille d'un des disques.
  • RAID 5: Utile lorsque l'on a 3 disques ou plus. Utilise une partie de chaque disque pour la redondance. Si l'un des disques lâche, les données ne sont pas perdues.
Dans cet article, nous allons principalement nous intéresser au RAID 1, puisque c'est celui qui permet une bonne sécurité des données avec seulement 2 disques.
La mise en place de RAID 0 ou de RAID 5 n'est pas très différente, vous pouvez donc également suivre cet article, mais les procédure en cas de crash seront à tester par vous même puisque je n'ai jamais mis en place d'autres types de RAID que du "mirroring".
Modules noyaux et utilitaires
Avant de commencer à tout configurer, il nous faut compiler (si ce n'est pas déjà fait) quelques modules noyau et installer mdadm.
Pour les modules noyau, ils faut compiler ceux-ci, de préférence dans le noyau plutôt qu'en modules:
Device Drivers  --->
 Multi-device support (RAID and LVM)  --->
  [*] Multiple devices driver support (RAID and LVM)
   <*>   RAID support
   < >     Linear (append) mode (NEW)
   < >     RAID-0 (striping) mode (NEW)
   <*>     RAID-1 (mirroring) mode
   < >     RAID-10 (mirrored striping) mode (EXPERIMENTAL) (NEW)
   < >     RAID-4/RAID-5/RAID-6 mode (NEW)
   < >     Multipath I/O support (NEW)
   < >     Faulty test module for MD (NEW)
   <*>   Device mapper support (NEW)
Note: Je n'utilise ici que du RAID1. Compilez les autres si vous en avez besoin.
Il ne nous reste plus qu'à installer mdadm. Sous Gentoo, emergez-les:
emerge mdadm
Avec une autre distribution, utilisez le package manager de votre distrib!
Maintenant, nous sommes fins prêts à configurer et monter notre RAID.
Partitionnement
En premier, assurez-vous que vos disques sont bien utilisable par le système. Dans la suite, nous allons considérer que le premier disque est /dev/sda et le deuxième /dev/sdb. Dans mon cas, il s'agit d'un boîtier externe en USB contenant mes deux disques de 250 Go, mais peu importe qu'ils soient internes ou externes.
L'étape suivante est donc le partitionnement des disques. Nous allons le faire en ligne de commande avec l'utilitaires fdisk. Dans mon cas, il s'agit d'une seule partition par disque. L'important est de créer des partitions de taille identiques, et de leur attribuer le type "fd" ou "Linux raid autodetect". Voici comment procéder. En premier lancez fdisk, en tant que root:
fdisk /dev/sda
Ensuite, créez la partition, en utilisant l'invite de fdisk (en gras, les commandes à saisir. [Enter] veut simplement dire taper sur la touche Enter du clavier!). Si des anciennes partitions existent, tapez o à l'invite pour créer une table de partition vide.
Soyez prudent avec fdisk, car modifier ou supprimer des partitions signifie perdre toutes les données contenues sur celles-ci. Vous voilà avertis !
The number of cylinders for this disk is set to 30401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-30401, default 1): [Enter]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-30401, default 30401): [Enter]
Using default value 30401
Votre partition est faite, mais n'a pour l'instant pas le bon type. Pour le modifier, tapez la commande t à l'invite de fdisk:
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)
Il ne nous reste plus qu'à écrire cette table de partition, en tapant w dans l'invite de fdisk:
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
Une fois ceci effectué, faites la même chose pour le(s) autre(s) disque(s). Nous nous retrouvons donc avec une partition /dev/sda1 et une /dev/sdb1, de même taille.
Création du RAID
Voilà, nos partitions sont faites, il nous faut maintenant "construire" le RAID. C'est avec l'outil mdadm que nous allons le faire. Voici la commande à utiliser (toujours en root):
mdadm --create /dev/md0 --level 1 --raid-devices=2 /dev/sda1 /dev/sdb1
Typiquement, cette commande va créer un RAID 1 entre les partitions /dev/sda1 et /dev/sdb1. Pour créer un RAID 5 avec trois disques, vous utiliserez par exemple:
mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
Si la commande vous dit que le fichier /dev/md0 n'existe pas, vous devez le créer avec la commande suivante (en root):
mknod /dev/md0 b 9 0
Si vous créez plus qu'un système RAID (par exemple un RAID 1 et un RAID 5), il vous faudra utiliser /dev/md0 pour le premier et /dev/md1 pour le deuxième.
Une fois la commande lancée, mdadm va initialiser le RAID. Cette opération se passe en "background", (en arrière plan). Pour voir ce qui se passe, lisez le fichier /proc/mdstat, le résultat devrait être quelque chose de comparable à ceci:
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      244195904 blocks [2/2] [UU]
      [>....................]  resync =  0.6% (1620928/244195904) finish=410.1min speed=9856K/sec

unused devices: <none>
On voit que l'initialisation va prendre environ 410 minutes. C'est long (mais je suis connecté en USB aussi, hein...). Pour surveiller la progression, utilisez la commande:
watch cat /proc/mdstat
Une fois l'initialisation terminée, voici ce que me donne /proc/mdstat:
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      244195904 blocks [2/2] [UU]

unused devices: <none>
Pour obtenir plus d'informations sur un RAID, vous pouvez utiliser la commande suivante (en root):
mdadm --detail /dev/md0
Voici le résultat chez moi:
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Feb 13 12:17:07 2007
     Raid Level : raid1
     Array Size : 244195904 (232.88 GiB 250.06 GB)
    Device Size : 244195904 (232.88 GiB 250.06 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Wed Feb 14 09:34:50 2007
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 93db2df6:b180f004:f4d639ee:282c708b
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
Création de mdadm.conf
Note: Cette étape est optionelle, mdadm devrait être capable de trouver tout seul les systèmes RAID de votre système.
Maintenant que notre RAID est initialisé, nous pouvons créer le fichier /etc/mdadm.conf. Celui-ci va renseigner l'OS sur les systèmes RAID présents. La commande suivante va créer le fichier de configuration pour vous (à executer en root):
mdadm --detail --scan >> /etc/mdadm.conf
Formater et monter la partition RAID
Pour que vous puissiez monter et utiliser votre RAID, il faut encore le formater. J'ai choisi le système de fichier ext3, mais vous devriez pouvoir utiliser n'importe quel autre système de fichiers supporté par votre noyau (de préférence pas en module). Pour formater, utilisez la commande suivante (en root):
mkfs.ext3 /dev/md0
Puis, montez le RAID dans votre système de fichier, par exemple avec la commande suivante (toujours en root):
mkdir -p /mnt/raid
mount /dev/md0 /mnt/raid
Vous pouvez maintenant écrire des données dans /mnt/raid !
Vous pouvez demander au système de monter automatiquement le système RAID au boot via le fichier /etc/fstab. Par exemple, pour un système de fichier ext3, ajoutez la ligne suivante à votre /etc/fstab:
/dev/md0    /mnt/raid    ext3    defaults    0 0
En cas de crash
Vous pourriez penser que, vu que l'on peut maintenant écrire sur notre RAID, tout est fini. Oui, mais non ! Si on utilise du RAID (en tout cas pour moi), c'est pour avoir un peu plus de sécurité au niveau de mes données. Et si un disque lâche ? J'ai toujours mes données, certes, mais comment les récupérer et comment reconstruire mon RAID ? C'est ce que nous allons voir.
Dans un premier temps, j'ai copié quelques Gigas de fichiers sur mon RAID. Ensuite, je l'ai démonté proprement, j'ai sorti un des deux disques, et je l'ai formaté sur une autre machine. Cela simule le crash d'un disque. Le disque formaté sera considéré comme le nouveau disque remplacant le défaillant.
Donc, mon disque /dev/sdb a lâché. Il me faut donc un nouveau disque dur, sur lequel je vais recommencer l'opération de partitionnement. Faite votre partitionnement exactement comme à l'étape "Partitionnement" de cet article pour le nouveau disque. Ensuite, redémarrez votre machine.
Le RAID va repartir dans un mode dégradé. Vous ne pourrez peut-être même plus le monter. Pour "reconstruire" votre RAID, sortez le "nouveau" disque du système RAID pour l'instant (en root):
mdadm /dev/md0 -f /dev/sdb1 -r /dev/sdb1
Ceci va avoir pour effet de dire au système que /dev/sdb1 ne fonctionne pas correctementm et va le "sortir" du système RAID.
Si vous regardez le contenu de /proc/mdstat, vous devriez avoir quelque chose de similaire à ceci:
Personalities : [raid1]
md0 : active raid1 sda1[0]
      244195904 blocks [2/1] [U_]

unused devices: >none<
On voit qu'un disque sur deux est en fonction. Maintenant, vous devriez pouvoir monter votre RAID même si il ne tourne "que sur une patte".
Pour synchroniser votre nouveau disque, utilisez la commande suivante (encore en root):
mdadm /dev/md0 -a /dev/sdb1
Ceci va commencer la reconstruction du RAID. Vous pouvez, comme lors de la création, en suivre la progression à l'aide de la commande:
watch cat /proc/mdstat
Une fois la reconstruction terminée, votre RAID est à nouveau paré!
 
© Grégory Chanez / 2004 - 2010

W3C   W3C   Valid RSS