Howto RAID sous Debian GNU/Linux

Voici un howto sur comment utiliser dur RAID5 avec mdadm sous Debian GNU Linux. Une version PDF est disponible.

Introduction

A Propos

Ce Howto a été écrit dans le but monter un serveur avec l’utilisation de RAID sous un système Debian  Lenny 5.0 GNU/Linux. Ce document est sous licence FDL v1.2. Ce Howto s’intègre dans une série de howto destiné a créé un RAID avec LVM et Quota.

Licence

Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto RAID LVM & Quota sous Linux”, and no Back-Cover Texts.  A copy of the license is included in the section entitled “GNU Free Documentation License”.

Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto RAID LVM & Quota sous Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.

Théorie

Un RAID est un ensemble de technique mise en œuvre sur plusieurs disques durs pour augmenter les performances, la sécurité ou la fault tolerance. Il y a 3 principaux types de RAID, le RAID 0, 1, 10 et 5.

RAID 0

Le RAID 0, aussi appelé striping consiste a répartir les données sur deux disque dur comme le montre le shema ci-dessous. Le premier bloc est sur sda et le second sur sdb. Sa capacité est egale a la taille du plus petit disque du RAID multiplié par le nombre de disque. Par exemple 1disque de 300Go et deux disque de 250Go en RAID 0 donnent une capacité totale de 750 Go (250 * 3). Malheureusement avec ce type de RAID il n’y a aucune redondance et donc, la perte d’un des disque provoque une perte de donnée.

RAID 1

Le RAID 1 ou mirroring consiste a utiliser n disque redondant (au minimum 2) et e copier sur chacun les mêmes données. Sa capacité est egale a celle du plus petit disque dur du RAID, au niveau de lka fiabilité par contre, le gain est évident. Elle accepte une déffaillance de n-1 disques. Ainsi, si nous mettons 4 disque de 200Go, nous aurons 200Go d’espace disponible et on pourra perdre 3 disque dur dans le RAID avant de perdre des données. Malheurement les couts sont proportionnelle au nombre de mirror alors que la capacité reste identique.

RAID 10 (ou RAID 1 + 0)

Ce type de RAID est un raid composé. Il consiste a créé un RAID 0 avec deux RAID 1. On a donc du striping de mirror. Il faut au minimum 4 disque pour créé un RAID 10. Sa capcité est egale a la taille du plus petit RAID1 multiplié par le nombre de RAID 1 dans le RAID0. Ainsi si je créé 2 RAID 1 composé de 2 disque de 200Go j’ai : 200Go * 2 = 400Go.

RAID 5

Le RAID5 se base sur le stripping et une parité. Chaque bande est donc constituée de N blocs de données et d’un bloc de parité. Ainsi, en cas de défaillance de l’un des disques de la grappe, pour chaque bande il manquera soit un bloc de données soit le bloc de parité. Si c’est le bloc de parité, ce n’est pas grave, car aucune donnée ne manque. Si c’est un bloc de données, on peut calculer son contenu à partir des N − 1 autres blocs de données et du bloc de parité. L’intégrité des données de chaque bande est préservée. Donc non seulement la grappe est toujours en état de fonctionner, mais il est de plus possible de reconstruire le disque une fois échangé à partir des données et des informations de parité contenues sur les autres disques. Le RAID5 utilise des Spare disque, disque qui sont mis en spool et monté puis reconstruit en cas de défaillance d’un des disque. Sa capacité est égale a la somme de la capacité des N – 1 disque. 3 disque de 200 Go en RAID5 fournissent donc 400 Go d’espace utile.

Mise en place sous Debian GNU Linux

L’outil mdadm

Cet outil sera utilisé pour créer et administrer notre RAID. S’il n’est pas présent sur votre système, installez le paquet.

root:~# apt-cache search mdadm
mdadm – tool to administer Linux MD arrays (software RAID)
root:~#

Son fichier de configuration se trouve dans /etc/mdadm/mdadm.conf sous Debian. Il est nécéssaire de formater les disque au type 0xFD (Linux RAID autodetect).

RAID 0

On va ici créer un RAID0, donc du striping. On aura donc un partie des données sur chacun des disques. Si vous utilisez une virtual machine mais en savez pas comment ajouter un disque dur, reportez-vous aux Annexes de ce HowTo pour VmWare Workstation et Oracle VirtualBox
Voici comment ce que l’on va faire :

On a donc deux partitions, sda et sdb que l’on montera en RAID 0.

root:~# mdadm –-create /dev/md0 –-level=raid0 –-raid-devices=2 /dev/sda /dev/sdb

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid0
root:~# mount –t ext3 /dev/md0 /mnt/raid0

RAID 1

Passons au RAID 1, ici les données sont dupliquées sur chaque disque du RAID

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb -–spare-devices=1 /dev/sdd

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID
–spare-devices=1      Nombre de disque de secoure
/dev/sdd              Disques de secour a utilisé

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid1
root:~# mount –t ext3 /dev/md0 /mnt/raid1

RAID 10

Passons au RAID 10, nous allons pour cela créé deux matrices RAID 1 que l’on vas regrouper sur une matrice RAID 0.

On vas créé les deux matrices RAID 1

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb
root:~# mdadm –-create /dev/md1 –-level=raid1 –-raid-devices=2 /dev/sdc /dev/sdd

Nos deux RAID 1 (/dev/md0 et /dev/md1) créé, on vas les regrouper dans un RAID 0

root:~# mdadm –-create /dev/md2 –-level=raid0 –-raid-devices=2 /dev/md0 /dev/md1

On peut maintenant créé notre filesystème sur le RAID0 de RAID1

root:~# mkfs –t ext3 /dev/md2
root:~# mkdir /mnt/raid10
root:~# mount –t ext3 /dev/md2 /mnt/raid10

RAID 5

Enfin le RAID 5, nous utiliserons ici 4  disques également dont un de secoure.

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid5 –-raid-devices=3 /dev/sda /dev/sdb /dev/sdc -–spare-devices=1 /dev/sdd

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid5
root:~# mount –t ext3 /dev/md0 /mnt/raid5

Administration

Verifier le RAID

Il y a deux possibilities pour verifier l’etat du thread. Le fichier /proc/mdstat et la commande mdadm.

root:~# watch cat /proc/mdstat

Every 2,0s: cat /proc/mdstat                                                                                                                    Tue Jan  4 03:06:33 2011

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

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2] sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active (auto-read-only) raid5 sdf[0] sdi[3](S) sdh[2] sdg[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

resync=PENDING

unused devices: <none>

Ou bien mdadm –detail <device>

root:~# mdadm –detail /dev/md0
/dev/md0:
Version : 00.90
Creation Time : Tue Jan  4 01:24:08 2011
Raid Level : raid5
Array Size : 208768 (203.91 MiB 213.78 MB)
Used Dev Size : 104384 (101.95 MiB 106.89 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Jan  4 01:46:14 2011
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 64K

UUID : b8c892c6:c59a3628:f0e976dc:8f6e00c0
Events : 0.10

Number   Major   Minor   RaidDevice State
0       8       16        0      active sync   /dev/sdb
1       8       32        1      active sync   /dev/sdc
2       8       48        2      active sync   /dev/sdd
3       8       64        –      spare   /dev/sde

Ajouter un disque dur

Pour ajouter un disque dur a la matrice de RAID on utilise l’option –a de mdadm :

root:~# mdadm /dev/md0 –a /dev/sdx
mdadm: hot added /dev/sdax

Avec cela on ajoute sdx au Raid md0

Suprimer un disque dur

Pour enlever un disque dur de la matrice de RAID on utilise l’option –d de mdadm :

root:~# mdadm /dev/md0 –d /dev/sdc
mdadm: hot removed /dev/sdc

Ainsi on suprimme /dev/sdc de md0

Simuler une panne et remplacer un disque

Pour tester le bon fonctionnement du RAID il est intéressant de créé des pannes.

root:~# mdadm /dev/md0 –f /dev/sdd
mdadm: set /dev/sdd to faulty in /dev/md0

Ainsi le disque sdc est passé en faulty :

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2](F) sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

Si un spare disk est présent, il sera automatiquement utilisé pour remplacer le disque déffecteux. Voici maintenant comment remplacer sdd, qui est maintenant « foutu » de notre RAID.

root:~# mdadm /dev/md0 –d /dev/sdd
mdadm: hot removed /dev/sdd

root:~# mdadm /dev/md0 –a /dev/sdr
mdadm: hot removed /dev/sdr

On a suprimer sdd du RAID et on a mis sdr a sa place. Si le RAID est complet, ce disque sera rajouté dans les spare disk en cas de futur panne.

Annexes

Annexe A : Ajout de disque dur sous VmWare Workstation

a.       Se rendre dans le menu de configuration du hardware de la VM. (Si elle est en exécution, double cliquer sur l’icône du disque dur en bas à droite)

b.      Cliquer sur Add

c.       Choisir Hard Disk puis suivant.

d.      Choisir Create a New Virtual Disk

e.      Choisir SCSI comme type de disque virtuel.

f.        Ici vous définissez la taille que vous désirez pour votre nouveau disque et cliquez sur suivant

g.       Sur la plupart du système, si vous ajoutez un disque, vous devrez redémarrer la VM.

Sources & Référence

3 thoughts on “Howto RAID sous Debian GNU/Linux

  1. Mdmarc

    Bonjour.

    Mon système est un dual boot Mac OsX/Linux débian
    J’ai créé une nappe Raid logiciel avec Mac OsX (pas de système dessus, uniquement du stockage de fichier) . Je voudrais l’utiliser quand je boot avec linux.
    Pour le moment, quand je monte les disques raid sous linux, les 2 disque du raid apparaisse avec les même fichier mais je n’ai pas les autorisation pour écire sur aucun d’eux Raid (généralement car j’ai réussi une fois ou 2 à avoir accès en écriture). Après 2 semaines, mon linux en viens à planter.

    Je commence à comprendre que je dois paramétrer linux mais je ne veux pas toucher à mes données qui sont stockées sur le Raid.

    une idée ?
    Merci

    Reply
  2. Pingback: HP Proliant Microserver Gen8 ou Synology DS415+? | Mac & Syno

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s