Gérer une pile RAID et LVM sous Fedora 10

Sécuriser ses données avec du RAID logiciel

RAID est l’acronyme pour Redundant Array of Inexpensive Disks, c’est-à-dire « Matrice Redondante de Disques peu Onéreux« . Il s’agit d’une technologie utilisant plusieurs disques durs pour stocker des données afin de les sécuriser, ces données étant copiées sur tous les disques (de façons différentes suivant la configuration RAID utilisée : 1, 5, 1+0, 0+1, 6, etc), en cas de panne d’un disque, la machine reste opérationnelle et les données sont toujours accessibles. Avec certains pré-requis, il est même possible de changer le disque défaillant à chaud sans arrêter la machine, la couche RAID se chargeant de la reconstruction (synchronisation) des données.
Il existe également le RAID 0, mais qui diffère des autres RAID dans son fonctionnement.

Cet article parle du RAID logiciel, sur une machine en Fedora 10.

Mise en place d’un RAID 1 logiciel

Je dispose de deux disques SATA 500Go que je désire utiliser en RAID 1, celui-ci fonctionne avec 2 disques (ou plus). Il s’agit d’une simple copie des données d’un disque sur l’autre, de façon transparente. Après avoir installé ces deux disques, je vérifie qu’ils soient reconnus par le système :

$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 déc. 28 21:37 /dev/sda
brw-rw---- 1 root disk 8,  1 déc. 28 21:37 /dev/sda1
brw-rw---- 1 root disk 8,  2 déc. 28 21:37 /dev/sda2
brw-rw---- 1 root disk 8,  3 déc. 28 21:37 /dev/sda3
brw-rw---- 1 root disk 8, 16 déc. 28 21:37 /dev/sdb
brw-rw---- 1 root disk 8, 17 déc. 28 21:37 /dev/sdb1
brw-rw---- 1 root disk 8, 32 déc. 28 21:37 /dev/sdc
brw-rw---- 1 root disk 8, 33 déc. 28 21:37 /dev/sdc1
brw-rw---- 1 root disk 8, 48 déc. 28 21:37 /dev/sdd
brw-rw---- 1 root disk 8, 64 déc. 28 21:37 /dev/sde

Il faut maintenant créer une partition physique sur ces disques et placer l’identificateur de ces partitions comme étant de type Linux RAID, ceci avec fdisk :

# fdisk /dev/sdd
Puis taper ces commandes pour un disque neuf :
n
p
1
<entrée>
<entrée>
t
fd
w

Faire de même pour le deuxième disque. Au final un fdisk -l devrait donner quelque chose comme ça :

Disque /dev/sdd: 500.1 Go, 500107862016 octets
255 heads, 63 sectors/track, 60801 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b9726
Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sdd1               1       60801   488384001   fd  Linux raid autodetect
Disque /dev/sde: 500.1 Go, 500107862016 octets
255 heads, 63 sectors/track, 60801 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b9726
Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sde1               1       60801   488384001   fd  Linux raid autodetect

Il est temps de combiner ces deux disques en une seule unité RAID 1, ceci par l’intermédiaire de la commande à tout faire mdadm :

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

La syntaxe est assez explicite : création d’une pile RAID qui sera en md0, de niveau 1 utilisant les 2 disques préparés auparavent. Et voilà, le RAID 1 est crée! Petite vérification :

# mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Sun Dec 28 21:24:39 2008
Raid Level : raid1
Array Size : 488383936 (465.76 GiB 500.11 GB)
Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Mon Dec 29 08:33:06 2008
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : d6b46a36:85a45c5f:5232c6b9:3d8a986e
Events : 0.8
Number   Major   Minor   RaidDevice State
0       8       49        0      active sync   /dev/sdd1
1       8       65        1      active sync   /dev/sde1

Si la ligne State rapporte bien clean, alors tout est en principe bon.

LVM sur le RAID

Le RAID fonctionne, il faut maintenant l’utiliser. Nous allons gérer md0 avec LVM, en commencant par créer un volume physique, ce qui va initilaiser md0 pour utiliser LVM :

# pvcreate /dev/md0

Ensuite, il faut créer le volume groupe, que j’appelle VGraid. La valeur par défaut du PE (Physical Extent) peut se révéler trop faible pour une grosse matrice RAID. Il est alors possible d’indiquer une taille de PE plus importante avec l’option -s. Leur nombre maximal est approximativement de 65000 et leur taille par défaut de 4Mo, partant delà, il faut prendre la taille du volume et de le diviser par 65000, puis de l’arrondir à l’entier significatif le plus grand le plus proche. Par exemple, pour un volume RAID de 500Go, grosso-modo 500000Mo cela donne : 500000 / 65000 = 7,69, soit 8Mo. Je vais le mettre à 32 pour être plus à l’aise.

# vgcreate -s 16M VGraid /dev/md0

Le VG est désormais crée, il faut maintenant le remplir avec un ou plusieurs volume(s) logique(s). Je vais en ajouter un seul – LVraid – qui prendra la taille du VG. Pour connaître cette taille en PE :

# vgdisplay VGraid
--- Volume group ---
VG Name               VGraid
System ID
Format                lvm2
Metadata Areas        1
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                1
Act PV                1
VG Size               465,75 GB
PE Size               32,00 MB
Total PE              14904
Alloc PE / Size       14904 / 465,75 GB
Free  PE / Size       0 / 0
VG UUID               D33fbC-w82v-I83g-TAgG-vZaA-8C52-1aVEfr

Et pour le créer :

# lvcreate -l 14904 VGraid -n LVraid

Ceci fait, /dev/VGraid/LVraid (également mappé sous /dev/mapper/VGraid-LVraid) peut être utilisé comme une partition « normale », donc on formate et on monte normalement :

# mkfs.ext3 /dev/VGraid/LVraid
# mkdir /mnt/raid
# mount /dev/VGraid/LVraid /mnt/raid

Notre filesystem est prêt à l’emploi et les données présentes dessus seront mirrorées. Pour connaître l’état de la pile RAID :

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[0] sde1[1]
488383936 blocks [2/2] [UU]
unused devices: 

On voit qu’il est actif. [UU] désigne que les deux disques sont OK. En cas de problème sur un disque, cette info ressemblerait à [_U] ou [U_] suivant le disque défaillant.
Il est également possible de surveiller sa matrice et d’être avertit par email en cas de panne par cette commande :

# mdadm --monitor --mail=root@localhost --delay=1800 /dev/md0 &

A noter que --monitor peut même aller plus loin et lancer un programme ou un script au lieu d’un simple email.

2 réflexions sur « Gérer une pile RAID et LVM sous Fedora 10 »

  1. Salut, vu ta configuration (4 disques) tu ne serais pas tenté par la souplesse de faire la manœuvre inverse, c’est à dire de gérer le Raid au dessus de LVM et pas en dessous.

    Avec cette solution, tu es obligé de créer un miroir pour la totalité des 500 Mo de ton disque (tu disposes de la taille du plus petit, tu perd la taille du plus grand). Hors, on a souvent des données plus ou moins sensibles ne nécessitant pas toutes le même niveau de sécurité.

    Je n’ai malheureusement jamais pu testé la solution car il faut 3 disques pour créer un miroir au niveau LV (2 pour les données + 1 pour le journal).

    La solution consiste à créer un VG sur 3 disques (qui peuvent être de tailles différentes) et d’activer le miroir lors de la création du LV (—mirrors—mirrorlog).

    La souplesse du LVM c’est de pouvoir mixer différentes solutions de stockage (normal, par bande, miroir, …) dans un même VG.

    ++

  2. Je t’avoue que je ne me suis même pas posé la question et c’est vraiment intéressant ce que tu décris. Merci de l’info Rémi.

    Le système n’est pas en RAID sur ce serveur, la partie mirrorée est majoritairement pour des photos (très précieux) et outre celles-ci, je n’ai pas vraiment de données sensibles. J’ai monté cette matrice car j’ai récupéré un disque de 500Go et j’en avais un autre dans un disque externe, j’ai donc pensé qu’il serait intéressant d’ajouter du RAID sur mon petit serveur.

    Je n’ai pas trop envie de toucher au reste pour l’instant car il y aurait pas mal de Go à bouger pour revoir le tout et ces derniers temps j’ai eu pas mal de downtime et cette machine est serveur DNS et DHCP, ça pénalise un peu le réseau ;} Mais ta solution de gérer le RAID sur le LVM est très intéressante, fais-moi savoir si tu l’expérimentes un de ces jours.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *