Actualinux

Toute l'actualité du monde GNU/Linux et OpenSource ! Système, Réseaux, Sécurité, Développement…

Création d’un RAID logiciel avec mdadm sous Debian

6 Commentaires »

disque_dur_hitachi

mdamd est un logiciel qui permet la création/gestion de grappes RAID de tous niveaux sans posséder de contrôleur RAID materiel : c’est l’OS qui prend tout en charge.

Cela peut être utile sur une machine un peu ancienne qui possède du SCSI (ou SATA) et qu’on souhaite reconvertir en serveur de fichiers. Cela permettra d’éviter des soucis si vos photos venaient à disparaitre à cause d’un disque dur qui lache… Pour les différents types de RAID et leur niveau de sécurité je vous renvois à Wikipédia.

La plan :

  1. Installer les paquets nécessaires
  2. Créer une partition sur chacun des disques qui formeront la grappe RAID
  3. Créer et formater le volume RAID


1 – Installer les paquets nécessaires

apt-get install fdisk mdadm

2 – Créer une partition sur chacun des disques

Une fois nos disques installés sur la machine nous devrions pouvoir les identifier avec la commande

fdisk -l

Cette commande nous liste les disques connectés sur notre machines

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0004565c

 Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         993     7976241   83  Linux
/dev/sda2             994        1044      409657+   5  Extended
/dev/sda5             994        1044      409626   82  Linux swap / Solaris

Disk /dev/sdb: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdc: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdd: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

« Dans mon cas on voit que le disque sda est celui où se trouve mon système. Les disques sdb, sdc et sdd ne contiennent rien, ils sont les 3 disques que je vais utiliser pour mon RAID. »

A présent nous allons créer une partition sur chacun des disques sdb, sdc et sdd qui contiendra tout l’espace disque. Pour se faire nous allons continuer avec fdisk. Voici comment procéder pour sdb (l’opération est à répeter ensuite pour chacun de nos disques)

fdisk /dev/sdb

On se retrouve alors à l’invite de fdisk pour éditer la table de partition du disque sdb. Nous souhaitons créer une partition (n) primaire (p) et lui attribuer le numero 1 puisque qu’elle sera la seule sur le disque. Laissons les autres options par défaut afin d’utiliser tout l’espace disque disponible sur le disque :

Command (m for help): n
Command action
 e   extended
 p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65270, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65270, default 65270):
Using default value 65270

Jusque ici aucune modification n’a été réalisée sur le disque, pour les écrire et quitter fdisk : w

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Nous répétons à présent l’opération pour sdc et sdd. A l’issue du partitionnement des trois disques on vérifie que tout est ok :

# fdisk -l
[...]
Disk /dev/sdb: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xcbd5d830

 Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       65270   524281243+  83  Linux

Disk /dev/sdc: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7f23c7e6

 Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       65270   524281243+  83  Linux

Disk /dev/sdd: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x874a2c16

 Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1       65270   524281243+  83  Linux

Nous observons bien 1 partition sur chacun des 3 disques, ils sont prêt pour la création du RAID. En effet il est inutile de formater ces partitions puisque le RAID va créer un nouveau volume et c’est lui qui accueillera le filesystem.

3 – Créer le volume RAID

« Je souhaite créer un RAID 5 avec mes 3 disques de 500 Go. Cela va me permettre d’obtenir un espace de stockage total de 1To et sécuriser mes données en cas de crash d’un disque. »

Nous allons à présent utiliser mdadm il permet la gestion et la création de RAID.

Tout se passe dans le fichier de configuration /etc/mdadm/mdadm.conf

On indique simplement les disques qui forment le RAID ainsi que le volume logique que l’on va utiliser

DEVICE /dev/sd[bcd]1
ARRAY /dev/md0 devices=/dev/sdb1,/dev/sdc1,/dev/sdd1

Ce fichier permettra au RAID d’être détecté automatiquement par le système au démarrage

Créons le RAID

mdadm -C /dev/md0 --level=raid5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

Cette commande est bien sur à adapter en fonction de votre configuration. On y trouve le volume logique qui sera créé, le type de raid souhaité, le nombre de disque qui compose le RAID, les disques qui forment le RAID

Nous avons maintenant un nouveau disque qui apparait c’est notre RAID : /dev/md0

# fdisk -l
Disk /dev/md0: 1073.7 GB, 1073727799296 bytes
2 heads, 4 sectors/track, 262140576 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Nous pouvons vérifier l’état du RAID à tout instant

# mdadm --detail /dev/md0
/dev/md0:
 Version : 00.90
 Creation Time : Tue Dec 15 01:15:45 2009
 Raid Level : raid5
 Array Size : 1048562304 (999.99 GiB 1073.73 GB)
 Used Dev Size : 524281152 (499.99 GiB 536.86 GB)
 Raid Devices : 3
 Total Devices : 3
Preferred Minor : 0
 Persistence : Superblock is persistent

 Update Time : Tue Dec 15 01:23:05 2009
 State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
 Spare Devices : 1

 Layout : left-symmetric
 Chunk Size : 64K

 Rebuild Status : 2% complete

 UUID : 50643934:e1871efc:5f03c929:acbcc38a (local to host debian-dadoo)
 Events : 0.8

 Number   Major   Minor   RaidDevice State
 0       8       17        0      active sync   /dev/sdb1
 1       8       33        1      active sync   /dev/sdc1
 3       8       49        2      active sync   /dev/sdd1

Maintenant que notre RAID est créé il reste simplement à le formater pour pouvoir commencer à s’en servir. Formatons le en ext3 par exemple

mkfs.ext3 /dev/md0

On monte le disque

mkdir /media/raid
mnt /dev/md0 /media/raid

Tout est fonctionnel à présent, nous avons 1To de stockage sécurisé en RAID 5. N’oubliez pas que du RAID ne vous dispense pas de sauvegardes régulières malgré sa tolérance aux pannes.

Petit astuce diabolique : pensez à insérer votre /dev/md0 dans votre fichier /etc/fstab pour qu’il se monte automatiquement au démarrage du système.

6 Commentaire

Super ! Merci pour cet article.

Quelques petites remarques:

1 – Il ne m’a pas paru évident qu’il fallait éditer /etc/mdadm/mdadm.conf à la première lecture.

2 – pas de commande « mnt » chez moi mais uniquement « mount »

3 – erreur de type « mdo » à la place de « md0″ en fin d’article

4 – surtout, j’ai dû faire un « dpkg-reconfigure mdadm » pour que mon raid soit créé au boot

  • Désolé pour le retard de réponse, j’étais totalement absent du blog en ce moment. Le temps passe vite !

    En tout cas, merci pour tes précisions.

  • Bonjour,

    Merci pour ce blog. Existe t-il un blog similaire expliquant en détail les manipulations a effectuer pour « ajouter un disque a un RAID 5″ ou »créer un RAID 5 avec 4 disque ou plus don deux sont plein, sans perte de données » ?

    Merci à vous :-)

  • Je n’ai pas eu l’occasion de devoir ajouter un disque supplémentaire à un raid5 en service. De toute façon il est clair qu’avant d’effectuer la moindre manipulation une sauvegarde complète des données est INDISPENSABLE. Ensuite toutes les manip’ se font sans que la partition ne soit montée.

    Dans l’idée voici ce qu’il faut faire :

    # Partitionner le disque 4 à l’identique
    # puis démonter la grappe
    umount /dev/md0
    #Il faut ajouter le disque à la grappe (comme pour un disque en spare)
    mdadm /dev/md0 –add /dev/sdd1
    # modification de la config du raid pour passer de 3+1 spare à 4 disques
    mdadm –grow /dev/md0 –raid-disks=4
    # vérification du file system
    e2fsck -f /dev/md0
    # on étend le file system sur l’espace
    resize2fs /dev/md0
    # on remonte le disque

    Il faut bien penser à mettre le fichier mdadm.conf à jour une fois l’opération terminée.

  • Bonjour !

    Merci pou ta réponse, j’ai suivit ton tuto, et mon raid 5 fonctionne !
    Mon problème est le suivant :
    Avec la config serveur que j’ai actuellement, en RAID 5 sous Windows serveur 2008, la vitesse de transfert moyenne était de 80Mo/s
    Avec la meme config et un RAID 5 sous DEBIAN avec mdadm installé avec ton tuto, la vitesse de transfert moyenne est de 30Mo/s … la déception :-S quand on copie 1.3To …

    Image :
    http://nsa14.casimages.com/img/2010/04/29/100429043709433953.jpg

    Une solution l’ami ?

    Formater mon raid en NTFS pourrai résoudre le problème ? est-ce possible sous Débian de formater un raid 5 ?

    D’avance Merci

  • La différence de débit est un peu étrange en effet, je ne suis pas au courant d’une telle différence de perf entre Windows et Linux sur du RAID logiciel…

    Quel système de fichier utilises tu actuellement ? Je ne suis pas certains que d’en changer te permettra de gagner.

    En tout cas, pour formater ton RAID en NTFS il faut utiliser le commande suivante :
    mkfs.ntfs /dev/md0

  • Laisser un commentaire