RAID logiciel

Version imprimableEnvoyer par emailversion PDF


Logiciels - Exemples sous Windows

Microsoft Windows permet de créer un raid logiciel depuis la console (Démarrer > Exécuter) "diskmgmt.msc".

Deux logiciels offrent des possiblités similaires qui peuvent être utiles :


Principe - Exemple sous Linux

Création d'un RAID 5 logiciel avec 4 disques dur SATA II, branchés sur une carte mère n'ayant pas de raid matériel.

Nous n'arborderont pas le boot sur du RAID logiciel.


Modules noyau et utilitaires

Le noyau doit être compilé avec certaines options :

Device Drivers ---> Multi-device support (RAID and LVM) --->


  • Multiple devices driver support (RAID and LVM)

  • RAID support Linear (append) mode (NEW) RAID-0 (striping) mode (NEW) RAID-1 (mirroring) mode RAID-10 (mirrored striping) mode (EXPERIMENTAL) (NEW) RAID-4/RAID-5/RAID-6 mode (NEW) Multipath I/O support (NEW) Faulty test module for MD (NEW)

  • Device mapper support (NEW)

Sous Debian, l'installation de l'utilitaire suffit :

aptitude install mdadm


Partitionnement

Il faut créer les partitions sur chaque disque.

A savoir : /dev/sda /dev/sdb /dev/sdc /dev/sdd


Taper la commande : fdisk /dev/sda

Ensuite, créez la partition, en utilisant l'invite de fdisk.

Si des anciennes partitions existent, tapez o à l'invite pour créer une table de partition vide.


The number of cylinders for this disk is set to 30401. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n

Command action e extended p primary partition (1-4) p

Partition number (1-4): 1

First cylinder (1-30401, default 1): <Enter>

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-30401, default 30401): <Enter>

Using default value 30401


Votre partition est faite, mais n'a pour l'instant pas le bon type.

Pour le modifier, tapez la commande t à l'invite de fdisk:

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): fd

Changed system type of partition 1 to fd (Linux raid autodetect)


Il ne nous reste plus qu'à écrire cette table de partition, en tapant w dans l'invite de fdisk:

Command (m for help): w

The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.


Une fois ceci effectué, faites la même chose pour le(s) autre(s) disque(s). Nous nous retrouvons donc avec une partition /dev/sda1 et une /dev/sdb1 (sdc1, sdd1...), de même taille.


Création du RAID

Utilisation de mdadm : mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

Cette commande crée un RAID 5 en utilisant 3 disques : sda1, sdb1, sdc1. Pour créer un RAID 1, utilisez la commande suivante :

mdadm --create /dev/md0 --level 1 --raid-devices=2 /dev/sda1 /dev/sdb1

Si la commande vous dit que le fichier /dev/md0 n'existe pas, vous devez le créer avec la commande suivante (en root):

mknod /dev/md0 b 9 0


Si vous créez plus qu'un système RAID (par exemple un RAID 1 et un RAID 5), il vous faudra utiliser /dev/md0 pour le premier et /dev/md1 pour le deuxième.

Une fois la commande lancée, mdadm va initialiser le RAID.

Cette opération se passe en "background", (en arrière plan). Pour voir ce qui se passe, lisez le fichier /proc/mdstat, le résultat devrait être quelque chose de comparable à ceci:

Personalities : raid1 md0 : active raid1 sdb11 sda10 244195904 blocks 2/2 UU >.................... resync==0.6% (1620928/244195904) finish==410.1min speed==9856K/sec unused devices: none


Vous pouvez surveiller l'avancement avec la commande suivante :

watch cat /proc/mdstat

Une fois l'initialisation terminée, voici ce que me donne /proc/mdstat:

Personalities : raid1 md0 : active raid1 sdb11 sda10 244195904 blocks 2/2 UU unused devices: none


Pour obtenir plus d'informations sur un RAID, vous pouvez utiliser la commande suivante :

mdadm --detail /dev/md0

Voici le résultat d'un RAID 1 :

/dev/md0: Version : 00.90.03 Creation Time : Tue Feb 13 12:17:07 2007 Raid Level : raid1 Array Size : 244195904 (232.88 GiB 250.06 GB) Device Size : 244195904 (232.88 GiB 250.06 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Feb 14 09:34:50 2007 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 93db2df6:b180f004:f4d639ee:282c708b Events : 0.2 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1


Création de mdadm.conf

Note: Cette étape est optionelle, mdadm devrait être capable de trouver tout seul les systèmes RAID de votre système. Maintenant que notre RAID est initialisé, nous pouvons créer le fichier /etc/mdadm.conf.

Celui-ci va renseigner l'OS sur les systèmes RAID présents. La commande suivante va créer le fichier de configuration pour vous : mdadm --detail --scan >> /etc/mdadm.conf


Formater et monter la partition RAID

L'étape suivante est de formater la partition RAID.

mkfs.ext3 /dev/md0

Puis, montez le RAID dans votre système de fichier :

mkdir -p /mnt/raid mount /dev/md0 /mnt/raid


Vous pouvez demander au système de monter automatiquement le système RAID au boot via le fichier /etc/fstab.

Par exemple, pour un système de fichier ext3, ajoutez la ligne suivante à votre /etc/fstab:

/dev/md0 /mnt/raid ext3 defaults 0 0


En cas de crash

Supposition : le disque /dev/sdb a lâché.

Il me faut donc un nouveau disque dur, sur lequel recommencer l'opération de partitionnement.

Faite votre partitionnement exactement comme à l'étape "Partitionnement" de cet article pour le nouveau disque. Ensuite, redémarrez votre machine. Le RAID va repartir dans un mode dégradé. Vous ne pourrez peut-être même plus le monter.


Pour "reconstruire" votre RAID, sortez le "nouveau" disque du système RAID pour l'instant :

mdadm /dev/md0 -f /dev/sdb1 -r /dev/sdb1

Ceci va avoir pour effet de dire au système que /dev/sdb1 ne fonctionne pas correctementm et va le "sortir" du système RAID.


Si vous regardez le contenu de /proc/mdstat, vous devriez avoir quelque chose de similaire à ceci:

Personalities : raid1 md0 : active raid1 sda10 244195904 blocks 2/1 U_ unused devices: none


On voit qu'un disque sur deux est en fonction.

Maintenant, vous devriez pouvoir monter votre RAID même si il ne tourne "que sur une patte".

Pour synchroniser votre nouveau disque, utilisez la commande suivante :

mdadm /dev/md0 -a /dev/sdb1

Ceci va commencer la reconstruction du RAID.

Vous pouvez, comme lors de la création, en suivre la progression à l'aide de la commande:

watch cat /proc/mdstat


Une fois la reconstruction terminée, votre RAID est à nouveau paré!


Spécificité Debian

Vous pouvez remarquer, le premier dimanche de chaque mois, une activité étrange sur votre machine.


Deux processus qui consomment toute la mémoire :

md0_raid5 md0_resync


La faute est à ces lignes (qui se trouvent dans /etc/cron.d/mdadm) :

/etc/cron.d/mdadm:

# cron.d/mdadm -- schedules periodic redundancy checks of MD devices

/etc/cron.d/mdadm:57 0 * * 0 root -x /usr/share/mdadm/checkarray && $(date +\%d) -le 7 && /usr/share/mdadm/checkarray --cron --all --quiet


D'autres informations se trouvent dans :

/usr/share/doc/mdadm/README.checkarray


checkarray will run parity checks across all your redundant arrays. By default, it is configured to run on the first Sunday of each month, at 01:06 in the morning. This is realised by asking cron to wake up every Sunday with /etc/cron.d/mdadm, but then only running the script when the day of the month is less than or equal to 7. See #380425. ‘check’ is a read-only operation, even though the kernel logs may suggest otherwise (e.g. /proc/mdstat and several kernel messages will mention “resync”).


Autres informations contenues dans /usr/share/doc/mdadm/FAQ.gz :

21. Why does the kernel speak of ‘resync’ when using checkarray

Please see README.checkarray and http://www.mail-archive.com/linux-raid@vger.kernel.org/msg04835.html.


En bref, c'est un bug. checkarray n'effectue pas une resynchronisation, mais le kernel ne fait pas la différence entre les deux.


Liens


Internes


Externes

http://serendipity.ruwenzori.net/index.php/2007/08/06/mdadm-rebuild20-ev... http://www.nakan.ch/articles/article.php?id=10&no=all&print=1

 

 

Sponsors