RAID logiciel
Un article de WindowsLinux.Net - Astuces pour Windows et Linux.
Sommaire |
Principe
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 (en gras, les commandes à saisir. [Enter] veut simplement dire taper sur la touche Enter du clavier!). Si des anciennes partitions existent, tapez o à l'invite pour créer une table de partition vide.
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 sdb1[1] sda1[0]
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 sdb1[1] sda1[0]
244195904 blocks [2/2] [UU]
unused devices: <none>
Pour obtenir plus d'informations sur un RAID, vous pouvez utiliser la commande suivante :
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 sda1[0]
244195904 blocks [2/1] [U_]
unused devices: >none<
On voit qu'un disque sur deux est en fonction. Maintenant, vous devriez pouvoir monter votre RAID même si il ne tourne "que sur une patte".
Pour synchroniser votre nouveau disque, utilisez la commande suivante :
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.
Sources
Internes
Externes
http://www.nakan.ch/articles/article.php?id=10&no=all&print=1

