« RAID » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
(balises code)
Ligne 8 : Ligne 8 :
== Introduction ==
== Introduction ==


Le principe du [#RAID RAID] repose sur l'idée de combiner plusieurs disques durs bon marché (indifféremment IDE ou SCSI) dans le but de :
Le principe du [http://www.lea-linux.org/documentations/index.php/Glossaire#RAID RAID] repose sur l'idée de combiner plusieurs disques durs bon marché (indifféremment IDE ou SCSI) dans le but de :


* Etendre la capacité de stockage en ligne possible ;  
* Etendre la capacité de stockage en ligne possible ;  
Ligne 34 : Ligne 34 :
Vérifiez que les modules linear, raid0, raid1 et raid5 sont chargés. Au pire, ajoutez les dans le fichier /etc/modules :
Vérifiez que les modules linear, raid0, raid1 et raid5 sont chargés. Au pire, ajoutez les dans le fichier /etc/modules :


<code># modprobe linear
<div class="code">
# modprobe raid0
# modprobe linear
# modprobe raid1
# modprobe raid0
# modprobe raid5</code>
# modprobe raid1
# modprobe raid5</div>


On valide ensuite l'existence du fichier virtuel ''/proc/mdstat'' (Par défaut, le noyau est compilé avec le support du RAID) et on vérifie l'installation du package ''raidtools'' (format rpm sur la RedHat et la Mandrake) :
On valide ensuite l'existence du fichier virtuel ''/proc/mdstat'' (Par défaut, le noyau est compilé avec le support du RAID) et on vérifie l'installation du package ''raidtools'' (format rpm sur la RedHat et la Mandrake) :


<code># cat /proc/mdstat
<div class="code">
Personalities : [linear] [raid0] [raid1] [raid5] /* liste des drivers */
# cat /proc/mdstat
read_ahead not set
Personalities : [linear] [raid0] [raid1] [raid5] /* liste des drivers */
unused devices: <none>
read_ahead not set
unused devices: <none>


# rpm -qa | grep raid
# rpm -qa | grep raid
raidtools-0.90-8mdk </code>
raidtools-0.90-8mdk </div>


Le seule fichier que l'on aura à configurer pour tous les RAIDS sera le fichier ''/etc/raidtab'' (simple, non?) et le fichier ''/etc/fstab''.
Le seule fichier que l'on aura à configurer pour tous les RAIDS sera le fichier ''/etc/raidtab'' (simple, non?) et le fichier ''/etc/fstab''.
Ligne 99 : Ligne 101 :
Les RAIDS 1, 4 et 5 peuvent utiliser la notion de disques de rechange. Un disque qui va venir remplacer automatiquement un disque en faute. Linux autorise l'ajout on-line de disques de rechange (vous devez cependant les rajouter manuellement dans le fichier de configuration /etc/raidtab pour le cas d'un reboot) :
Les RAIDS 1, 4 et 5 peuvent utiliser la notion de disques de rechange. Un disque qui va venir remplacer automatiquement un disque en faute. Linux autorise l'ajout on-line de disques de rechange (vous devez cependant les rajouter manuellement dans le fichier de configuration /etc/raidtab pour le cas d'un reboot) :


<code multi># raidhotadd /dev/md[0-15] /dev/sdf1</code>
<div class="code"># raidhotadd /dev/md[0-15] /dev/sdf1</div>
  ou
  ou
<code multi># raidhotremove /dev/md[0-15] /dev/sdf1</code>
<div class="code"># raidhotremove /dev/md[0-15] /dev/sdf1</div>


== Mise en pratique ==
== Mise en pratique ==
Ligne 107 : Ligne 109 :
'''Mode linéaire'''<br /> Vous devez disposer de 2 disques ou plus, pas nécessairement de la même taille, pour implémenter le mode linéaire. Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant (vous pouvez configurer 16 RAIDs différents sur une machine, d'où la symbolique avec [0-15] ainsi que dans le reste du document) :
'''Mode linéaire'''<br /> Vous devez disposer de 2 disques ou plus, pas nécessairement de la même taille, pour implémenter le mode linéaire. Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant (vous pouvez configurer 16 RAIDs différents sur une machine, d'où la symbolique avec [0-15] ainsi que dans le reste du document) :


<code> raiddev /dev/md[0-15]
<div class="code">  
raid-level linear
raiddev /dev/md[0-15]
  nr-raid-disks 2 # disques impliqués
raid-level linear
  persistent-superblock 1 # on considère ici que
nr-raid-disks 2 # disques impliqués
                          # l'auto-détection du RAID
persistent-superblock 1 # on considère ici que
                          # dans le noyau Linux est activé
                          # l'auto-détection du RAID
device/dev/sda1 # premier disque
                          # dans le noyau Linux est activé
  raid-disk 0
device/dev/sda1 # premier disque
device/dev/sdb1 # second disque
raid-disk 0
  raid-disk 1</code>
device/dev/sdb1 # second disque
raid-disk 1</div>


'''Nota''' : vous ne disposez pas de disques de spare dans le mode linéaire. Si vous perdez un disque, alors vous perdez tout.
'''Nota''' : vous ne disposez pas de disques de spare dans le mode linéaire. Si vous perdez un disque, alors vous perdez tout.
Ligne 122 : Ligne 125 :
Pour activer le RAID (cette procédure va rester la même pour les autres RAID) :
Pour activer le RAID (cette procédure va rester la même pour les autres RAID) :


<code># mkraid /dev/md[0-15]
<div class="code"># mkraid /dev/md[0-15]
# mkfs -t ext2 /dev/md[0-15] # on formatte la partition, ici en Ext2
# mkfs -t ext2 /dev/md[0-15] # on formatte la partition, ici en Ext2
# mount /dev/md[0-15] /scratch </code>
# mount /dev/md[0-15] /scratch </div>


Pour stopper un device RAID :
Pour stopper un device RAID :


<code multi># raidstop /dev/md[0-15] # pour désactiver un device RAID </code>
<div class="code"># raidstop /dev/md[0-15] # pour désactiver un device RAID </div>


Pour mettre en faute un disque (et le retirer avec raidhotremove) :
Pour mettre en faute un disque (et le retirer avec raidhotremove) :


<code multi># raidsetfaulty /dev/md[0-15] /dev/sdf1 </code>
<div class="code"># raidsetfaulty /dev/md[0-15] /dev/sdf1 </div>
 


Normallement le device sera automatiquement activé lors du boot (dans le fichier ''/etc/rc.d/rc.sysinit'' sur la Mandrake 7.2 mais vous pouvez ajoutez la commande '''raidstart /dev/md[0-15]''' dans le fichier ''/etc/rc.d/rc.local'' sinon), il ne restera plus qu'à mettre à jour le fichier ''/etc/fstab'' pour le montage soit automatique. Cela va rester valide pour les autres RAIDS.
Normalement le device sera automatiquement activé lors du boot (dans le fichier ''/etc/rc.d/rc.sysinit'' sur la Mandrake 7.2 mais vous pouvez ajoutez la commande '''raidstart /dev/md[0-15]''' dans le fichier ''/etc/rc.d/rc.local'' sinon), il ne restera plus qu'à mettre à jour le fichier ''/etc/fstab'' pour le montage soit automatique. Cela va rester valide pour les autres RAIDS.


'''RAID 0'''<br /> Vous devez disposer de 2 disques ou plus, de la même taille, pour implémenter le striping. Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
'''RAID 0'''<br /> Vous devez disposer de 2 disques ou plus, de la même taille, pour implémenter le striping. Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
<code> raiddev /dev/md[0-15]
<div class="code"> raiddev /dev/md[0-15]
  raid-level 0
  raid-level 0
    nr-raid-disks 2
    nr-raid-disks 2
Ligne 146 : Ligne 150 :
  device/dev/sdb1
  device/dev/sdb1
    raid-disk 1
    raid-disk 1
</code>
</div>
'''Nota''' : vous ne disposez pas de disques de spare dans le RAID 0. Si vous perdez un disque, alors vous perdez tout.
'''Nota''' : vous ne disposez pas de disques de spare dans le RAID 0. Si vous perdez un disque, alors vous perdez tout.


'''RAID 1'''<br /> Vous devez disposer de 2 disques ou plus de la même taille pour implémenter le mode miroir et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
'''RAID 1'''<br /> Vous devez disposer de 2 disques ou plus de la même taille pour implémenter le mode miroir et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
<code> raiddev /dev/md[0-15]
<div class="code"> raiddev /dev/md[0-15]
  raid-level 1
  raid-level 1
    nr-raid-disks 2
    nr-raid-disks 2
Ligne 162 : Ligne 166 :
  device/dev/sdc1
  device/dev/sdc1
    spare-disk 0
    spare-disk 0
</code>
</div>
'''RAID 0+1'''<br /> Vous devez disposer d'un nombre de disques pairs de la même taille pour implémenter le RAID 0+1 mais vous ne pouvez pas utiliser de disques de spare individuels (je présume qu'il est possible de mettre un place un device de spare contenant le même nombre de disques que les autres). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
'''RAID 0+1'''<br /> Vous devez disposer d'un nombre de disques pairs de la même taille pour implémenter le RAID 0+1 mais vous ne pouvez pas utiliser de disques de spare individuels (je présume qu'il est possible de mettre un place un device de spare contenant le même nombre de disques que les autres). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
<code> raiddev /dev/md0
<div class="code"> raiddev /dev/md0
  raid-level 0
  raid-level 0
    nr-raid-disks 3
    nr-raid-disks 3
Ligne 198 : Ligne 202 :
  device/dev/md1
  device/dev/md1
    raid-disk 1
    raid-disk 1
</code>
</div>
'''RAID 4'''<br /> Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 4 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
'''RAID 4'''<br /> Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 4 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
<code> raiddev /dev/md[0-15]
<div class="code"> raiddev /dev/md[0-15]
  raid-level 4
  raid-level 4
    nr-raid-disks 3
    nr-raid-disks 3
Ligne 214 : Ligne 218 :
  device/dev/sdd1
  device/dev/sdd1
    spare-disk 0
    spare-disk 0
</code>
</div>
'''RAID 5'''<br /> Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 5 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
'''RAID 5'''<br /> Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 5 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier ''/etc/raidtab'' comme dans l'exemple suivant :
<code> raiddev /dev/md[0-15]
<div class="code"> raiddev /dev/md[0-15]
  raid-level 5
  raid-level 5
    nr-raid-disks 5
    nr-raid-disks 5
Ligne 239 : Ligne 243 :
  device/dev/sdf1
  device/dev/sdf1
    spare-disk 0
    spare-disk 0
</code>
</div>


== Chunk Size ==
== Chunk Size ==
Ligne 298 : Ligne 302 :


'''Les disques:'''
'''Les disques:'''
<code>
<div class="code">
*  Disk /dev/hde: 164.6 GB, 164696555520 bytes  
*  Disk /dev/hde: 164.6 GB, 164696555520 bytes  
255 heads, 63 sectors/track, 20023 cylinders
255 heads, 63 sectors/track, 20023 cylinders
Ligne 314 : Ligne 318 :
16 heads, 63 sectors/track, 159560 cylinders
16 heads, 63 sectors/track, 159560 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Units = cylinders of 1008 * 512 = 516096 bytes
</code>
</div>


'''Les partitions '''
'''Les partitions '''
6 Partitions de 78 Go
6 Partitions de 78 Go
<code>
<div class="code">
     * /dev/hde1 :  :  fd  Linux raid autodetect
     * /dev/hde1 :  :  fd  Linux raid autodetect
     * /dev/hde2 :  :  fd  Linux raid autodetect
     * /dev/hde2 :  :  fd  Linux raid autodetect
Ligne 325 : Ligne 329 :
     * /dev/hdg2 :  :  fd  Linux raid autodetect
     * /dev/hdg2 :  :  fd  Linux raid autodetect
     * /dev/hdh1 : SPARE  :  fd  Linux raid autodetect
     * /dev/hdh1 : SPARE  :  fd  Linux raid autodetect
</code>
</div>


'''Création du RAID 5 sur md0'''
'''Création du RAID 5 sur md0'''
<code>
<div class="code">
mdadm --create /dev/md0 --level=5 --raid-devices=5 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 --spare-devices=1 /dev/hdh1
mdadm --create /dev/md0 --level=5 --raid-devices=5 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 --spare-devices=1 /dev/hdh1
mdadm: /dev/hde1 appears to contain an ext2fs file system
mdadm: /dev/hde1 appears to contain an ext2fs file system
   size=160836448K  mtime=Sat Oct  1 18:05:35 2005
   size=160836448K  mtime=Sat Oct  1 18:05:35 2005
mdadm: /dev/hde1 appears to be part of a raid array:
mdadm: /dev/hde1 appears to be part of a raid array:
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hde2 appears to be part of a raid array:
mdadm: /dev/hde2 appears to be part of a raid array:
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdf1 appears to contain an ext2fs file system
mdadm: /dev/hdf1 appears to contain an ext2fs file system
   size=20479504K  mtime=Sat Oct  1 18:17:51 2005
   size=20479504K  mtime=Sat Oct  1 18:17:51 2005
mdadm: /dev/hdf1 appears to be part of a raid array:
mdadm: /dev/hdf1 appears to be part of a raid array:
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdg1 appears to contain an ext2fs file system
mdadm: /dev/hdg1 appears to contain an ext2fs file system
   size=2048256K  mtime=Sat Oct  1 15:18:46 2005
   size=2048256K  mtime=Sat Oct  1 15:18:46 2005
mdadm: /dev/hdg1 appears to be part of a raid array:
mdadm: /dev/hdg1 appears to be part of a raid array:
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdg2 appears to be part of a raid array:
mdadm: /dev/hdg2 appears to be part of a raid array:
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
   level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdh1 appears to contain an ext2fs file system
mdadm: /dev/hdh1 appears to contain an ext2fs file system
   size=51025432K  mtime=Sat Oct  1 15:18:56 2005
   size=51025432K  mtime=Sat Oct  1 15:18:56 2005
Continue creating array? y
Continue creating array? y
mdadm: array /dev/md0 started.  
mdadm: array /dev/md0 started.  
</code>
</div>


'''Informations sur le volume RAID'''
'''Informations sur le volume RAID'''
<code>
<div class="code">
mdadm --detail /dev/md0
mdadm --detail /dev/md0
/dev/md0:
/dev/md0:
       Version : 00.90.01
       Version : 00.90.01
  Creation Time : Sun Oct  2 15:18:17 2005
  Creation Time : Sun Oct  2 15:18:17 2005
Ligne 363 : Ligne 367 :
   Raid Devices : 5
   Raid Devices : 5
  Total Devices : 6
  Total Devices : 6
Preferred Minor : 0
Preferred Minor : 0
   Persistence : Superblock is persistent
   Persistence : Superblock is persistent


   Update Time : Sun Oct  2 15:18:17 2005
   Update Time : Sun Oct  2 15:18:17 2005
         State : clean, degraded, recovering
         State : clean, degraded, recovering
Active Devices : 4
Active Devices : 4
Working Devices : 6
Working Devices : 6
Failed Devices : 0
Failed Devices : 0
Spare Devices : 2
  Spare Devices : 2


         Layout : left-symmetric
         Layout : left-symmetric
Ligne 390 : Ligne 394 :
       5      34        2        4      spare rebuilding  /dev/hdg2
       5      34        2        4      spare rebuilding  /dev/hdg2
       6      34      65        -      spare  /dev/hdh1
       6      34      65        -      spare  /dev/hdh1
</code>
</div>


'''Arrêter le volume RAID 5 '''
'''Arrêter le volume RAID 5 '''
<code>mdadm --stop /dev/md0  </code>
<div class="code">mdadm --stop /dev/md0  </div>


'''Pour démarrer le volume RAID 5'''
'''Pour démarrer le volume RAID 5'''
<code>mdadm --assemble /dev/md0 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 /dev/hdh1
<div class="code">
mdadm: /dev/md0 has been started with 4 drives (out of 5) and 2 spares.
mdadm --assemble /dev/md0 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 /dev/hdh1
</code>
mdadm: /dev/md0 has been started with 4 drives (out of 5) and 2 spares.
</div>


<code>mdadm --detail --scan >> /etc/mdadm/mdadm.conf
<div class="code">
more /etc/mdadm/mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
DEVICE partitions
more /etc/mdadm/mdadm.conf
ARRAY /dev/md0 level=raid5 num-devices=5 spares=2 UUID=70714300:9da2e11b:a61a9c73:e2e1c245
DEVICE partitions
</code>
ARRAY /dev/md0 level=raid5 num-devices=5 spares=2 UUID=70714300:9da2e11b:a61a9c73:e2e1c245
</div>


Message lors de l'activation du volume RAID 5 dans dmesg
Message lors de l'activation du volume RAID 5 dans dmesg :
md: md0 stopped.
<div class="code">
md: bind<hde2>
md: md0 stopped.
md: bind<hdf1>
md: bind<hde2>
md: bind<hdg1>
md: bind<hdf1>
md: bind<hdh1>
md: bind<hdg1>
md0: WARNING: hdg2 appears to be on the same physical disk as hdg1. True
md: bind<hdh1>
md0: WARNING: hdg2 appears to be on the same physical disk as hdg1. True
     protection against single-disk failure might be compromised.
     protection against single-disk failure might be compromised.
md: bind<hdg2>
md: bind<hdg2>
md0: WARNING: hde1 appears to be on the same physical disk as hde2. True
md0: WARNING: hde1 appears to be on the same physical disk as hde2. True
     protection against single-disk failure might be compromised.
     protection against single-disk failure might be compromised.
md: bind<hde1>
md: bind<hde1>
raid5: device hde1 operational as raid disk 0
raid5: device hde1 operational as raid disk 0
raid5: device hdh1 operational as raid disk 4
raid5: device hdh1 operational as raid disk 4
raid5: device hdg1 operational as raid disk 3
raid5: device hdg1 operational as raid disk 3
raid5: device hdf1 operational as raid disk 2
raid5: device hdf1 operational as raid disk 2
raid5: device hde2 operational as raid disk 1
raid5: device hde2 operational as raid disk 1
raid5: allocated 5234kB for md0
raid5: allocated 5234kB for md0
raid5: raid level 5 set md0 active with 5 out of 5 devices, algorithm 2
raid5: raid level 5 set md0 active with 5 out of 5 devices, algorithm 2
RAID5 conf printout:
RAID5 conf printout:
--- rd:5 wd:5 fd:0
  --- rd:5 wd:5 fd:0
  disk 0, o:1, dev:hde1
  disk 0, o:1, dev:hde1
  disk 1, o:1, dev:hde2
  disk 1, o:1, dev:hde2
Ligne 432 : Ligne 439 :
  disk 3, o:1, dev:hdg1
  disk 3, o:1, dev:hdg1
  disk 4, o:1, dev:hdh1
  disk 4, o:1, dev:hdh1
 
</div>
== Glossaire ==
 
'''RAID'''<br /> Le mot RAID est un acronyme pour "Redundant Array of Inexpensive Disks".





Version du 21 mai 2012 à 23:37


Raid logiciel sous Linux

Raid logiciel sous Linux
Un petit tutoriel sur la configuration du Raid logiciel sous Linux.

Introduction

Le principe du RAID repose sur l'idée de combiner plusieurs disques durs bon marché (indifféremment IDE ou SCSI) dans le but de :

  • Etendre la capacité de stockage en ligne possible ;
  • Introduire une notion de redondance (pour autoriser une plus grande sécurisation des données) ;
  • Améliorer les performances.

En effet, la capacité des disques actuels, même si elle s'est singulièrement améliorée ces dernières années (on trouve couramment du 18 ou du 36 Gigas de nos jours), reste tout de même peu de chose lorsque l'on souhaite parler en Téra et non plus en Giga.

Même sans aller jusqu'à vouloir stocker de grandes quantités de données (soyons raisonnable, 9 Giga devrait suffire pour un petit serveur web ...), on peut vouloir utiliser la notion de redondance du Raid afin d'améliorer la tolérance aux pannes de son architecture : les données seront dupliquées sur des disques différents afin de pouvoir palier à la perte d'un disque.

Si la résistance aux pannes de l'architecture n'est pas une contrainte majeure (on peut envisager de sauvegarder sur bande tous les soirs son serveur de fichiers), on peut utiliser le Raid pour étendre simplement la capacité de stockage possible, et ce de manière transparente pour le système : 4 disques de 4,3Go donnant une partition utile de ~16Go.

On peut vouloir aussi gagner en performance sur les I/O disques : en effet, lire ou écrire sur de multiples disques permet de paralléliser les opérations (surtout sur des bus différents) et donc de gagner en performances.

En fait, il ne faut d'ailleurs pas parler d'un seul Raid, mais bien de plusieurs : [#linear Mode Linéaire], [#raid0 Raid 0], [#raid1 Raid 1], [#raid01 Raid 0+1], [#raid4 Raid 4] ou encore [#raid5 Raid 5]. Il conviendra donc d'analyser à l'avance ses besoins pour faire le bon choix.

Je n'aborderai que le Raid logiciel (software) dans ce document et non le Raid matériel (hardware). Le premier est supporté directement dans le code de l'OS alors que l'intelligence du second est déportée dans du hardware : que ce soit sous forme d'une carte à enficher dans le serveur (nécessite un driver) ou encore dans une baie extérieure (transparent pour l'OS). On peut dire que le Raid logiciel est moins performant, moins tolérant mais beaucoup plus accessible financièrement.

Nota : Dans presque tous les RAIDS que l'on va aborder (excepté le RAID linéaire et le raid 0), il sera possible de configurer des disques de rechange (spare disks) qui seront automatiquement utilisés pour reconstruire le RAID dans le cas de pannes disques (pas dans le cas de pannes sur le contrôleur IDE ou SCSI).

Le Raid et Linux

Le mieux est de directement utiliser le support RAID présent dans les distributions Linux récentes (version des RaidTools : 0.90) : j'ai personnellement testé la distribution Linux RedHat 6.1 sur plateforme Alpha et la Mandrake 7.2 Intel sans rencontrer de soucis majeurs.

Vérifiez que les modules linear, raid0, raid1 et raid5 sont chargés. Au pire, ajoutez les dans le fichier /etc/modules :

# modprobe linear
# modprobe raid0
# modprobe raid1
# modprobe raid5

On valide ensuite l'existence du fichier virtuel /proc/mdstat (Par défaut, le noyau est compilé avec le support du RAID) et on vérifie l'installation du package raidtools (format rpm sur la RedHat et la Mandrake) :

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] /* liste des drivers */
read_ahead not set
unused devices: <none>
# rpm -qa | grep raid
raidtools-0.90-8mdk

Le seule fichier que l'on aura à configurer pour tous les RAIDS sera le fichier /etc/raidtab (simple, non?) et le fichier /etc/fstab.

Si vous ne disposez pas de plusieurs disques vous pouvez utiliser des partitions à la place. Cela ne vous apportera ni amélioration de performance, ni haute disponibilité, mais au moins une grande satisfaction de pouvoir mettre en pratique vos connaissances ;-)

Niveaux de RAID disponibles sous Linux

Mode Linéaire [ [#linear_exemple exemple] ]
Cette solution est pertinente lorsque l'on souhaite étendre la capacité de stockage disponible en ligne sans introduire une notion de tolérance aux pannes. Cette solution combine les capacités de stockage d'un ensemble de disques existants (les données sont d'abord écrites sur le premier disque, puis lorsqu'il est plein sur le second, etc...) et permet d'utiliser 100% de l'espace disque utile.

  • Avantages :
    - Permet de disposer de 100% de l'espace disque dans une partition ;
    - Moins de temps CPU mobilisé par le RAID dans le noyau.
  • Inconvénients :
    - Pas de haute disponibilité : la perte d'un disque entraine la perte des données ;
    - Quasiment pas d'amélioration des performances (on peut cependant obtenir une amélioration si des I/O se produisent de manières concurrentes sur des disques différents).


RAID 0 [ [#raid0_exemple exemple] ]
Cette méthode (striping) est souvent utilisée lorsque la haute disponibilité des données n'est pas nécessaire (on doit disposer d'au moins 2 disques). Elle permet d'obtenir une amélioration des performances I/O (lecture et écriture) tout en restant très proche du mode linéaire. Elle permet en effet d'améliorer l'algorithme en dispatchant les données sur l'ensemble des disques (les données sont découpées puis dispersées sur les disques sans redondance).

  • Avantages :
    - Permet de disposer de 100% de l'espace disque dans une partition ;
    - Amélioration des performances I/O en lecture et écriture.
  • Inconvénients :
    - Pas de haute disponibilité : la perte d'un disque entraîne la perte des données.


RAID 1 [ [#raid1_exemple exemple] ]
Ce mode (mirroring) implémente une stricte duplication des données sur tous les disques présents dans le miroir (on doit disposer d'au moins 2 disques). L'information étant enregistrée N fois sur les disques (permet de gagner du temps en lecture même si on en perds lors de l'écriture), si on perds N-1 disques on ne perds pas les données. Il est à noter que l'on perds tout de même 50% de l'espace disque utile.

  • Avantages :
    - Haute disponibilité des données : survit à la perte de N-1 disques ;
    - Amélioration des performances en lecture.
  • Inconvénients :
    - Dégradation des performances en écriture ;
    - Mobilise un peu plus de temps CPU dans le noyau ;
    - Perte de 50% de l'espace disque.


RAID 0+1 [ [#raid01_exemple exemple] ]
Comme son nom l'indique, cette solution combine le RAID 0 et le RAID 1. Elle permet d'améliorer les performances I/O (Input/Output) en lecture tout en permettant une bonne disponibilité des données grâce à leur duplication sur l'ensemble des disques. Mais tout comme le mode miroir, on perd 50% de l'espace disque potentiellement disponible.

  • Avantages :
    - Haute disponibilité des données : survit à la perte d'un côté du miroir ;
    - Amélioration des performances en lecture et écriture.
  • Inconvénients :
    - Mobilise un peu plus de temps CPU dans le noyau ;
    - Perte de 50% de l'espace disque.


RAID 4 [ [#raid4_exemple exemple] ]
L'algorithme utilisé ici (striping) permet de dispatcher les I/O sur l'ensemble des disques (au moins 3) tout en réservant un disque pour sauvegarder une donnée supplémentaire de parité. De fait, si on perds un disque, on peut reconstituer l'information manquante. Cependant, l'utilisation d'un disque de parité ajoute un goulot d'étranglement au système (toute écriture va provoquer un accès au disque de parité), pour cela il est préférable d'utiliser à la place le Raid5.

  • Avantages :
    - Haute disponibilité des données : survit à la perte d'un disque ;
    - Amélioration des performances en lecture.
  • Inconvénients :
    - On perds l'équivalent d'un disque pour le stockage des données ;
    - On risque de plafonner le débit en écriture rapidement.


RAID 5 [ [#raid5_exemple exemple] ]
Le RAID 5 est sensiblement identique au RAID 4 mais améliore le procédé en stripant l'information de parité sur l'ensemble des disques.

  • Avantages :
    - Haute disponibilité des données : survit à la perte d'un disque ;
    - Amélioration des performances en lecture et écriture.
  • Inconvénients :
    - On perds l'équivalent d'un disque pour le stockage des données.

Disques de rechange (ou spare)

Les RAIDS 1, 4 et 5 peuvent utiliser la notion de disques de rechange. Un disque qui va venir remplacer automatiquement un disque en faute. Linux autorise l'ajout on-line de disques de rechange (vous devez cependant les rajouter manuellement dans le fichier de configuration /etc/raidtab pour le cas d'un reboot) :

# raidhotadd /dev/md[0-15] /dev/sdf1
ou
# raidhotremove /dev/md[0-15] /dev/sdf1

Mise en pratique

Mode linéaire
Vous devez disposer de 2 disques ou plus, pas nécessairement de la même taille, pour implémenter le mode linéaire. Modifiez le fichier /etc/raidtab comme dans l'exemple suivant (vous pouvez configurer 16 RAIDs différents sur une machine, d'où la symbolique avec [0-15] ainsi que dans le reste du document) :

raiddev /dev/md[0-15]
raid-level linear
nr-raid-disks 2 # disques impliqués
persistent-superblock	1 # on considère ici que
                         # l'auto-détection du RAID
                         # dans le noyau Linux est activé
device/dev/sda1 # premier disque
raid-disk 0
device/dev/sdb1 # second disque
raid-disk 1

Nota : vous ne disposez pas de disques de spare dans le mode linéaire. Si vous perdez un disque, alors vous perdez tout.

Pour activer le RAID (cette procédure va rester la même pour les autres RAID) :

# mkraid /dev/md[0-15]
  1. mkfs -t ext2 /dev/md[0-15] # on formatte la partition, ici en Ext2
  2. mount /dev/md[0-15] /scratch

Pour stopper un device RAID :

# raidstop /dev/md[0-15] # pour désactiver un device RAID

Pour mettre en faute un disque (et le retirer avec raidhotremove) :

# raidsetfaulty /dev/md[0-15] /dev/sdf1


Normalement le device sera automatiquement activé lors du boot (dans le fichier /etc/rc.d/rc.sysinit sur la Mandrake 7.2 mais vous pouvez ajoutez la commande raidstart /dev/md[0-15] dans le fichier /etc/rc.d/rc.local sinon), il ne restera plus qu'à mettre à jour le fichier /etc/fstab pour le montage soit automatique. Cela va rester valide pour les autres RAIDS.

RAID 0
Vous devez disposer de 2 disques ou plus, de la même taille, pour implémenter le striping. Modifiez le fichier /etc/raidtab comme dans l'exemple suivant :

raiddev /dev/md[0-15]
	raid-level 0
	  nr-raid-disks 2
	  persistent-superblock	1
	  chunk-size 4 # voir en fin de document
	device/dev/sda1
	  raid-disk 0
	device/dev/sdb1
	  raid-disk 1

Nota : vous ne disposez pas de disques de spare dans le RAID 0. Si vous perdez un disque, alors vous perdez tout.

RAID 1
Vous devez disposer de 2 disques ou plus de la même taille pour implémenter le mode miroir et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier /etc/raidtab comme dans l'exemple suivant :

raiddev /dev/md[0-15]
	raid-level 1
	  nr-raid-disks 2
	  nr-spare-disks 1
	  persistent-superblock	1
	  chunk-size 16
	device/dev/sda1
	  raid-disk 0
	device/dev/sdb1
	  raid-disk 1
	device/dev/sdc1
	  spare-disk 0

RAID 0+1
Vous devez disposer d'un nombre de disques pairs de la même taille pour implémenter le RAID 0+1 mais vous ne pouvez pas utiliser de disques de spare individuels (je présume qu'il est possible de mettre un place un device de spare contenant le même nombre de disques que les autres). Modifiez le fichier /etc/raidtab comme dans l'exemple suivant :

raiddev /dev/md0
	raid-level 0
	  nr-raid-disks 3
	  persistent-superblock	1
	  chunk-size 4
	device/dev/sda1
	  raid-disk 0
	device/dev/sdb1
	  raid-disk 1
	device/dev/sdc1
	  raid-disk 0
raiddev /dev/md1
	raid-level 0
	  nr-raid-disks 3
	  persistent-superblock	1
	  chunk-size 4
	device/dev/sdd1
	  raid-disk 0
	device/dev/sde1
	  raid-disk 1
	device/dev/sdf1
	  raid-disk 0
raiddev /dev/md2 # seul ce device pourra etre formate
	raid-level 1
	  nr-raid-disks 2
	  nr-spare-disks 0
	  persistent-superblock	1
	  chunk-size 16
	device/dev/md0
	  raid-disk 0
	device/dev/md1
	  raid-disk 1

RAID 4
Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 4 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier /etc/raidtab comme dans l'exemple suivant :

raiddev /dev/md[0-15]
	raid-level 4
	  nr-raid-disks 3
	  nr-spare-disks 1
	  persistent-superblock	1
	  chunk-size 32
	device/dev/sda1
	  raid-disk 0
	device/dev/sdb1
	  raid-disk 1
	device/dev/sdc1
	  raid-disk 2
	device/dev/sdd1
	  spare-disk 0

RAID 5
Vous devez disposer de 3 disques ou plus, de la même taille, pour implémenter le RAID 5 et vous pouvez utiliser 1 ou plusieurs disques de spares (optionnel). Modifiez le fichier /etc/raidtab comme dans l'exemple suivant :

raiddev /dev/md[0-15]
	raid-level 5
	  nr-raid-disks 5
	  nr-spare-disks 1
	  persistent-superblock 1
	  # Parity placement algorithm
	  # parity-algorithm	left-asymmetric
	  # parity-algorithm	right-asymmetric
	  # parity-algorithm	right-symmetric
	  parity-algorithm	left-symmetric
	  chunk-size 32
	device/dev/sda1
	  raid-disk 0
	device/dev/sdb1
	  raid-disk 1
	device/dev/sdc1
	  raid-disk 2
	device/dev/sdd1
	  raid-disk 3
	device/dev/sde1
	  raid-disk 4
	device/dev/sdf1
	  spare-disk 0

Chunk Size

Le choix de la "chunk size" dépends fortement du type de raid et du nombre de disques. Dans le cas d'un raid 0 de 2 disques, si on écrit 16KB avec une chunk size de 4KB, on va écrire 4KB sur le premier disque puis 4KB sur le second puis de nouveau 4KB sur le premier et pour finir 4KB sur le second ...

Vous obtiendrez généralement de bons résultats avec une chunk size à 32KB mais il est souvent bien utile d'expérimenter soi même pour obtenir le meilleur tuning. A noter que sur un environnement Alpha (64 bits), j'ai du mettre la chunk size à 16 au lieu de 4 car le raid 0 ne voulais pas s'initialiser.

Amélioration des performances

  • Il sera trés souvent intéressant de mettre les disques sur des controleurs IDE ou SCSI différents ;
  • La méthode la plus efficace pour améliorer drastiquement les performances I/O du système est le striping ;
  • Raid 4/5 : les performances seront bien meilleures si vous utilisez une chunk-size de 32 (8*4096=32KB) et un formattage du RAID 4/5 avec la commande : mke2fs -b 4096 -R stride=8 /dev/md[0-15] (l'option -R permet de passer des paramêtres utiles pour la construction du RAID, consulter le man pour avoir plus de détails) ;
  • Raid 5 : l'option parity-algorithm accepte plusieurs valeurs (left-asymmetric, right-asymmetric, left-symmetric ou right-symmetric). Il est préférable d'utiliser "left-symmetric" pour obtenir de meilleures performances ;
  • Penser à tuner la chunk size ...

Utiliser le RAID sur une partition de swap ?

Il est aberrant d'utiliser le raid sur une partition de swap. Plus simplement, Linux peut utiliser les partitions de swap de la même manière que le raid 0. Il suffit de donner à chaque partition le même niveau de priorité :

/dev/hdc1	swap	swap	defaults,pri=1 0 0
/dev/hdd1	swap	swap	defaults,pri=1 0 0
/dev/hde1	swap	swap	defaults,pri=1 0 0

Il est aussi trés utile de placer ces partitions au début de disque plutôt qu'à la fin. Vous obtiendrez de meilleurs résultats (la vélocité à cet endroit du disque est plus importante).

Précisions (contribution wiki) : La non nécéssite de mettre le swap sur une partition RAID 1 depends de la stabilité qu'on veut obtenir. En cas de crash d'un disque contenant une partition Swap non mirorée, il peut être difficile pour le systeme de continuer à fonctionner sans le redémarrer. En effet, sur cette partition il y a potentiellement des process swappé sur le disque que l'OS n'arrivera certainement pas à remonter en memoire en cas de nécessité.

Finalement :

  • Si la machine peut supporter un redémarage après un crash disque, alors oui il n'est pas nécessaire de mirrorer les partitions de swap, et dans ce cas on accepte que les services associés à celle-ci soient indiponibles jusqu'à ce que quelqu'un redémarre la machine.
  • Si la machine ne doit pas redémarrer (ce qui dans mon esprit correspond plus à la réalité d'une machine en production) alors il est obligatoire de mirorer les partitions swap.

Divers

  • Pensez à mettre à jour votre fichier de configuration (/etc/raidtab) si vous devez enlever ou ajouter des disques...
  • N'utiliser le RAID que pour des disques de données. Si vous souhaitez utiliser la partition système avec du RAID (uniquement 0 ou 1), lisez attentivement les HowTo car la mise en oeuvre demeure complexe.
  • Allez sur le site de Linas Vepstas qui regorge d'informations intéressantes (pas uniquement sur le RAID).
  • Allez aussi jeter un petit coup d'oeil sur le projet Linux Logical Volume Manager même si ce n'est pas vraiment du Raid. A lire absolument car disposer d'un tel outil sous Linux est une perspective fascinante car réservée auparavant aux Unix propriétaires HPUX, Tru64, AIX, etc ...
  • On pourrait aussi poser la question de la pertinence d'utiliser un système de fichiers journalisé en lieu et place de Ext2 (le gain lors d'un reboot violent est indéniable). Dans l'immédiat cela n'est pas possible (noyau 2.2.x) mais ouvrira à Linux de nouvelles et fascinantes perspectives...

Nouvel outil de RAID sous Linux: mdadm

La plupart des distributions proposent aujourd'hui mdadm, voici les différentes étapes pour mettre en place les différents niveau de RAID.

Voici les sources d'informations: http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-ig-s390-multi-fr-4/s1-s390info-raid.html

http://www.iteam.org/wiki/wakka.php?wiki=RaidBaal

http://www.frlinux.net/?section=systeme&article=146

http://xenfr.org/tiki-index.php?page=Stockage

Malheureusement, je n'ai fait les manipulations que pour un RAID 5 avec 4 disques de 6 partitions.

Voici la mise en place d'un RAID 5 avec 2 spares:

Les disques:

  • Disk /dev/hde: 164.6 GB, 164696555520 bytes

255 heads, 63 sectors/track, 20023 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

  • Disk /dev/hdf: 82.3 GB, 82348277760 bytes

16 heads, 63 sectors/track, 159560 cylinders Units = cylinders of 1008 * 512 = 516096 bytes

  • Disk /dev/hdg: 164.6 GB, 164696555520 bytes

255 heads, 63 sectors/track, 20023 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

  • Disk /dev/hdh: 82.3 GB, 82348277760 bytes

16 heads, 63 sectors/track, 159560 cylinders Units = cylinders of 1008 * 512 = 516096 bytes

Les partitions 6 Partitions de 78 Go

   * /dev/hde1 :  :  fd  Linux raid autodetect
   * /dev/hde2 :  :  fd  Linux raid autodetect
   * /dev/hdf1 : Sur rack disque (à changer si problème)
   * /dev/hdg1 :  :  fd  Linux raid autodetect
   * /dev/hdg2 :  :  fd  Linux raid autodetect
   * /dev/hdh1 : SPARE  :  fd  Linux raid autodetect

Création du RAID 5 sur md0

mdadm --create /dev/md0 --level=5 --raid-devices=5 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 --spare-devices=1 /dev/hdh1
mdadm: /dev/hde1 appears to contain an ext2fs file system
  size=160836448K  mtime=Sat Oct  1 18:05:35 2005
mdadm: /dev/hde1 appears to be part of a raid array:
  level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hde2 appears to be part of a raid array:
  level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdf1 appears to contain an ext2fs file system
  size=20479504K  mtime=Sat Oct  1 18:17:51 2005
mdadm: /dev/hdf1 appears to be part of a raid array:
  level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdg1 appears to contain an ext2fs file system
  size=2048256K  mtime=Sat Oct  1 15:18:46 2005
mdadm: /dev/hdg1 appears to be part of a raid array:
  level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdg2 appears to be part of a raid array:
  level=5 devices=5 ctime=Sun Oct  2 15:02:01 2005
mdadm: /dev/hdh1 appears to contain an ext2fs file system
  size=51025432K  mtime=Sat Oct  1 15:18:56 2005
Continue creating array? y
mdadm: array /dev/md0 started. 

Informations sur le volume RAID

mdadm --detail /dev/md0
/dev/md0:
      Version : 00.90.01
Creation Time : Sun Oct  2 15:18:17 2005
   Raid Level : raid5
   Array Size : 312495872 (298.02 GiB 320.00 GB)
  Device Size : 78123968 (74.50 GiB 80.00 GB)
 Raid Devices : 5
Total Devices : 6
Preferred Minor : 0
  Persistence : Superblock is persistent
  Update Time : Sun Oct  2 15:18:17 2005
        State : clean, degraded, recovering
Active Devices : 4
Working Devices : 6
Failed Devices : 0
 Spare Devices : 2
       Layout : left-symmetric
   Chunk Size : 64K

Rebuild Status : 1% complete

         UUID : 0a551c50:3da4f12a:5c9b3cdc:b9802273
       Events : 0.2
  Number   Major   Minor   RaidDevice? State
     0      33        1        0      active sync   /dev/hde1
     1      33        2        1      active sync   /dev/hde2
     2      33       65        2      active sync   /dev/hdf1
     3      34        1        3      active sync   /dev/hdg1
     4       0        0        -      removed
     5      34        2        4      spare rebuilding   /dev/hdg2
     6      34       65        -      spare   /dev/hdh1

Arrêter le volume RAID 5

mdadm --stop /dev/md0

Pour démarrer le volume RAID 5

mdadm --assemble /dev/md0 /dev/hde1 /dev/hde2 /dev/hdf1 /dev/hdg1 /dev/hdg2 /dev/hdh1
mdadm: /dev/md0 has been started with 4 drives (out of 5) and 2 spares.
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
more /etc/mdadm/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid5 num-devices=5 spares=2 UUID=70714300:9da2e11b:a61a9c73:e2e1c245

Message lors de l'activation du volume RAID 5 dans dmesg :

md: md0 stopped.
md: bind<hde2>
md: bind<hdf1>
md: bind<hdg1>
md: bind<hdh1>
md0: WARNING: hdg2 appears to be on the same physical disk as hdg1. True
    protection against single-disk failure might be compromised.
md: bind<hdg2>
md0: WARNING: hde1 appears to be on the same physical disk as hde2. True
    protection against single-disk failure might be compromised.
md: bind<hde1>
raid5: device hde1 operational as raid disk 0
raid5: device hdh1 operational as raid disk 4
raid5: device hdg1 operational as raid disk 3
raid5: device hdf1 operational as raid disk 2
raid5: device hde2 operational as raid disk 1
raid5: allocated 5234kB for md0
raid5: raid level 5 set md0 active with 5 out of 5 devices, algorithm 2
RAID5 conf printout:
 --- rd:5 wd:5 fd:0
disk 0, o:1, dev:hde1
disk 1, o:1, dev:hde2
disk 2, o:1, dev:hdf1
disk 3, o:1, dev:hdg1
disk 4, o:1, dev:hdh1




@ Retour à la rubrique Administration système

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Lionel Tricon le 03/02/2001.

Copyright

© 03/02/2001 Lionel Tricon

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/