« RAID » : différence entre les versions
m (Lea a déplacé la page Admin-admin fs-raid vers RAID) |
|||
(6 versions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[ | [[Catégorie:Administration système]] | ||
= Raid logiciel sous Linux = | = Raid logiciel sous Linux = | ||
Ligne 7 : | 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 33 : | 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</ | # 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 </ | 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 98 : | 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 | <div class="code"># raidhotadd /dev/md[0-15] /dev/sdf1</div> | ||
ou | ou | ||
<code | <div class="code"># raidhotremove /dev/md[0-15] /dev/sdf1</div> | ||
== Mise en pratique == | == Mise en pratique == | ||
'''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 | '''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"> | ||
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</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 121 : | 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 </ | # mount /dev/md[0-15] /scratch </div> | ||
Pour stopper un device RAID : | Pour stopper 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 | <div class="code"># raidsetfaulty /dev/md[0-15] /dev/sdf1 </div> | ||
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 | ||
persistent-superblock 1 | persistent-superblock 1 | ||
chunk- | chunk-size 4 # voir en fin de document | ||
device/dev/sda1 | device/dev/sda1 | ||
raid-disk 0 | raid-disk 0 | ||
device/dev/sdb1 | device/dev/sdb1 | ||
raid-disk 1 | raid-disk 1 | ||
</ | </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 161 : | Ligne 166 : | ||
device/dev/sdc1 | device/dev/sdc1 | ||
spare-disk 0 | spare-disk 0 | ||
</ | </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 197 : | Ligne 202 : | ||
device/dev/md1 | device/dev/md1 | ||
raid-disk 1 | raid-disk 1 | ||
</ | </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 213 : | Ligne 218 : | ||
device/dev/sdd1 | device/dev/sdd1 | ||
spare-disk 0 | spare-disk 0 | ||
</ | </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 238 : | Ligne 243 : | ||
device/dev/sdf1 | device/dev/sdf1 | ||
spare-disk 0 | spare-disk 0 | ||
</ | </div> | ||
== Chunk Size == | == Chunk Size == | ||
Ligne 297 : | 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 313 : | 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 | ||
</ | </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 324 : | 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 | ||
</ | </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. | ||
</ | </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 362 : | 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 | |||
Layout : left-symmetric | Layout : left-symmetric | ||
Ligne 389 : | 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 | ||
</ | </div> | ||
'''Arrêter le volume RAID 5 ''' | '''Arrêter le volume RAID 5 ''' | ||
<code>mdadm --stop /dev/md0 </ | <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 | ||
</ | 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 | ||
</ | 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 | |||
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 431 : | 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> | |||
''' | <br/> | ||
<br/> | |||
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>''' | |||
<br/> | |||
<div class="merci">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.</div> | <div class="merci">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.</div> | ||
{{Copy|03/02/2001|Lionel Tricon|CC-BY-NC-SA}} | {{Copy|03/02/2001|Lionel Tricon|CC-BY-NC-SA}} |
Dernière version du 3 décembre 2023 à 21:33
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 raidraidtools-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) :
ou
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 disqueraid-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) :
- mkfs -t ext2 /dev/md[0-15] # on formatte la partition, ici en Ext2
- mount /dev/md[0-15] /scratch
Pour stopper un device RAID :
Pour mettre en faute un disque (et le retirer avec raidhotremove) :
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 :
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 :
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 :
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 :
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 :
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
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
Copyright
© 03/02/2001 Lionel Tricon
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/ |