Skip to content

Raid 1 logicielle sous Linux – Comment mettre en place une solution de mirroring

by Benjamin on septembre 22nd, 2008

Disclaimer
Attention cette procédure est fournit telle quelle. En aucun cas l’auteur ne pourra être tenu responsable en cas de pannes logicielles et/ou matérielles. Aucun support n’est fournit.

Introduction

Cet article vise à mettre en place un solution logicielle de mirroring.
Le RAID 1 logiciel sous Linux permet d’avoir un niveau de redondance de vos données.
Le RAID 1  nécessitent 2 disques physiques de même tailles.

Avantages:

  • les données accepte une défaillance de n-1
    Lors de la défaillance de l’un des disques, le contrôleur RAID logicielle désactive, de manière transparente pour l’accès aux données, le disque incriminé. Une fois le disque défectueux remplacé, le contrôleur RAID logicielle reconstitue, soit automatiquement, soit sur intervention manuelle, le miroir. Une fois la synchronisation effectuée, le RAID retrouve son niveau initial de redondance.

Inconvénients:

  • cout de stockage élevé

Informations Systèmes

  • OS: Debian Etch
  • /dev/hda et /dev/hdb de 160 Go

Procédure: environ 3h

Installer mdam

apt-get install mdadm

Configuration des modules Noyau

Charger les modules au démarrage:

echo raid1 >> /etc/modules
echo md >> /etc/modules

Charger les modules au Noyau:
On peut vérifier si les modules raid1 et md sont chargés dans le Noyau:
lsmod | grep raid1
cat /proc/mdstat

Pour les charger:
modprobe raid1
modprobe md

Préparer le second disque dur (hdb) pour le RAID

A cette étape nous avons besoin d’ajouter notre second disque hdb dans le RAID 1.
La première étape consiste à copier la table de partition de hda -> hdb.
Nous utiliserons pour cela la commande sfdisk.

!! ATTENTION !!
sfdisk écrasera toutes les données contenues dans /dev/hdb

sfdisk -d /dev/hda | sfdisk /dev/hdb

Notre second disque hdb est presque prêt.
Afin de terminer notre préparation nous devons changer les Identifiants de partions (ID) en fd (Linux raid autodetect):

for partition in 1 2; do sfdisk --change-id /dev/hdb $partition fd; done

Configurer les Volumes RAID 1

Création des Volumes RAID 1:

for partition in 1 2; do mdadm --create /dev/md$partition --level=1 \
--raid-disks=2 missing /dev/hdb$partition; done

Création des Systèmes de fichiers:
for partition in 1 2; do mkfs.ext3 /dev/md$partition; done

Modifier le fichier de configuration mdadm.conf
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Modifier la table de partionnement /etc/fstab

La table de partitionnement doit être de cette forme au final:

proc               /proc         proc         defaults             0          0
/dev/md1       /                ext3         defaults,errors=remount-ro 0       1
/dev/hda5      none         swap        sw                      0          0

Configuration du Boot Manager (GRUB)

On fait d’abord une sauvegarde:
cp /boot/grub/menu.lst /boot/grub/menu.lst_orig

On remplace ensuite toute les occurrence de hda1 en md1:
sed 's/hda1/md1/' < /boot/grub/menu.lst_orig > /boot/grub/menu.lst

On mets à jour GRUB:
update-grub

Copier les données de hda -> hdb

(Re)démmarrage en single mode:
NB: tous les services vont « tomber » et resteront inaccessibles.
init 1

Copie de la partition /:
mount /dev/md1 /media
rsync -aqxP / /media
umount /media

Mise en place du nouveau Boot Manager (GRUB)

grub
Les commandes permettant de démarrer (boot) correctement:
device (hd0) /dev/sdb
root (hd0,0)
setup (hd0)
quit

Redémarrage

mount
doit donner:
/dev/md1 on / type ext3 (rw,errors=remount-ro)

Ajout du premier disque dur (hda) au Volume RAID 1

Changer les ID des partitions avec sfdisk
Comme nous l’avons précédemment effectué il nous faut changer les ID des partitions:
for partition in 1 2 ; do sfdisk --change-id /dev/hda $partition fd; done

Ajouter les partitions avec mdadm au Volume RAID 1
for partition in 1 2 ; do mdadm --add /dev/md$partition /dev/hda$partition; done

A partir de cette dernière commande le RAID 1 doit être actif et commence à reconstruire chaque /dev/md*.
On suivra cette opération avec la commande watch:
watch cat /proc/mdstat

Finaliser la configuration /etc/mdadm/mdadm.conf
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig1
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Fin

Tout est à présent en ordre. La machine doit être redémarrer afin de s’assurer du bon fonctionnement du RAID 1.

A tout moment l’état du raid1 sera donné par:
cat /proc/mdstat

La sortie d’un RAID 1 en mode nominal est de cette forme:

md1 : active raid1 hda1[0] hdb1[1]
153637504 blocks [2/2] [UU]

Autres articles susceptibles de vous intéresser :

From → System

One Comment
  1. Excellent tuto !

    Je vous encourage tous à le suivre, en notant les deux petites typos qu’il contient, où un ‘/’ s’est glissé en trop dans une adresse de périphérique.

    118c118
    - /dev/md/1 on / type ext3 (rw,errors=remount-ro)

    + /dev/md1 on / type ext3 (rw,errors=remount-ro)
    126c126
    - for partition in 1 2 ; do mdadm –add /dev/md$partition /dev/hda/$partition; done

    + for partition in 1 2 ; do mdadm –add /dev/md$partition /dev/hda$partition; done

    (commentaire à modérer après correction ^_^)
    (2e tentative)

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS