Objectif
L’objectif de ce tutoriel est la mise en place d’un RAID logiciel sous Linux. C’est-à-dire, l’installation et la configuration de l’outil mdadm.
Dans ce tutoriel, nous installerons un RAID-1. L’exemple pris est celui de deux disques durs de 1To en SATA.
L’avantage du SATA sur le IDE, est la possibilité du Hot-Plug, ou branchement à chaud, qui pourrait s’avérer utile dans l’avenir en cas de défaillance d’un des deux disques.
Pré-requis
Il vous faudra donc avoir 2 disques durs (au minimum, car il est possible de faire du RAID-1 avec plus de 2 disques) de même capacité et, de préférence, de même caractéristique. Dans notre cas, l’exemple se basera sur 2x 1To.
Il faut également installer et configurer Postfix (pour la supervision par mdadm de l’unité RAID).
Installation
Installation de mdadm
L’installation étant extrêment simple, je ne m’attarderais pas longtemps.
sudo apt-get install mdadm
Préparation du partitionnement
Le partitionnement sur les deux disques doit être strictement identique.
Dans mon exemple, le partitionnement sera le suivant:
- 1 partition de 1000.2 Go sur le disque 1
- 1 partition de 1000.2 Go sur le disque 2
L’outil de partitionnement (en ligne de commande) est fdisk.
Les commandes suivantes sont utilisées sur /dev/sda (premier disque) et seront identiques sur le second disque.
sudo fdisk /dev/sda
Le nombre de cylindres pour ce disque est fixé à 121601.
Il n’y a rien d’incorrect avec cela, mais c’est plus grand que 1024,
et cela pourrait causer des problèmes pour certaines installations:
1) logiciels qui sont exécutés à l’amorçage (i.e., vieilles versions de LILO)
2) logiciels d’amorçage et de partitionnement pour d’autres OS
(i.e., DOS FDISK, OS/2 FDISK)
Commande (m pour l’aide): m
Commande d’action
a bascule le fanion d’amorce
b éditer l’étiquette BSD du disque
c basculer le fanion de compatibilité DOS
d supprimer la partition
l lister les types de partitions connues
m afficher ce menu
n ajouter une nouvelle partition
o créer une nouvelle table vide de partitions DOS
p afficher la table de partitions
q quitter sans enregistrer les changements
s créer une nouvelle étiquette vide pour disque de type Sun
t modifier l’id de système de fichiers d’une partition
u modifier les unités d’affichage/saisie
v vérifier la table de partitions
w écrire la table sur le disque et quitter
x fonctions avancées (pour experts seulement)
En tapant la commande « m » vous obtenez la liste des commandes disponibles.
Dans notre cas, il va falloir créer la partition de 1000.2Go sur le disque et lui attribuer un type (Linux raid autodetect). Pour ce faire, tapez les commandes suivantes:
Commande (m pour l'aide): n Commande d'action e étendue p partition primaire (1-4) p Numéro de partition (1-4): 1 Premier cylindre (366-121601, par défaut 1): Utilisation de la valeur par défaut 1 Dernier cylindre, +cylindres or +taille{K,M,G} (1-121601, par défaut 121601): Utilisation de la valeur par défaut 121601
Puis changez le type de la partition pour lui affecter Linux raid autodetect
Commande (m pour l'aide): t Numéro de partition (1-4): 1 Code Hexa (taper L pour lister les codes): fd Type système de partition modifié de 2 à fd (Linux raid autodetect)
Pour finir, vous pouvez vérifier que la table de partition de ce disque correspond bien à la configuration souhaitée:
Commande (m pour l'aide): p Disque /dev/sda: 1000.2 Go, 1000204886016 octets 255 têtes, 63 secteurs/piste, 121601 cylindres Unités = cylindres de 16065 * 512 = 8225280 octets Identifiant de disque : 0x0004260e Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 1 121601 973828170 fd Linux raid autodetect
Il ne reste qu’à écrire la nouvelle table des partitions sur le disque:
Commande (m pour l'aide): w La table de partitions a été altérée! Appel de ioctl() pour relire la table de partitions. AVERTISSEMENT: la relecture de la table de partitions a échoué avec l'erreur 16: Périphérique ou ressource occupé. Le noyau va continuer à utiliser l'ancienne table. La nouvelle table sera utilisé lors du prochain réamorçage. Synchronisation des disques.
Faire de même sur le second disque:
sudo fdisk /dev/sdb
On a présent deux partitions de 1000.2Go, une sur chaque disque.
Si comme dans mon exemple, vous obtenez à la fin le message indiquant que le périphérique est occupé, pensez à redémarrer votre machine.
Création du RAID-1
Selon la page d’aide du site Ubuntu-fr.org, il est nécessaire pour les versions Ubuntu antérieures à la 8.04 LTS de créer le fichier FIFO qui sera utilisé par le RAID. Ayant fait l’installation RAID sur une Ubuntu 9.04, je me suis passé de cette commande, car le fichier /dev/md0 a été créé automatiquement par la commande mdadm suivante.
sudo mknod /dev/md0 b 9 0
Pour créer l’unité RAID, on va lancer la commande suivante, permettant d’enregistrer les partitions /dev/sda2 et /dev/sdb2 comme éléments de l’unité RAID /dev/md0
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1
Dans la commande, on précise en premier lieu l’action (--create) puis le nom du fichier FIFO, le niveau de RAID désiré (dans notre exemple 1: --level=1), le nombre de devices composant le RAID, (--raid-devices=2) puis en dernier lieu la liste de ces devices, ici /dev/sda1 et /dev/sdb1 (/dev/sd[ab]1)
Si la question suivante vous est posée, répondez y (yes!)
mdadm: /dev/sda1 appears to contain an ext2fs file system size=45897704K mtime=Thu Jan 1 01:00:00 1970 mdadm: /dev/sdb1 appears to contain an ext2fs file system size=45897704K mtime=Thu Jan 1 01:00:00 1970 Continue creating array? y mdadm: array /dev/md0 started.
Voilà ! Le RAID a été initialisé.
Afin de permettre au RAID de démarrer à chaque reboot de la machine, tapez la commande suivante :
sudo mdadm --daemonise /dev/md0
Vous pouvez récupérer les informations sur ce RAID en tapant la commande suivante:
sudo mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Sun May 17 13:01:29 2009 Raid Level : raid1 Array Size : 976759936 (931.51 GiB 1000.20 GB) Used Dev Size : 976759936 (931.51 GiB 1000.20 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun May 17 13:01:29 2009 State : clean, resyncing Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Rebuild Status : 1% complete UUID : 40b24d1f:1b156d2e:0df45006:c5faa048 (local to host XXXXXX) Events : 0.1 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1
Vous pouvez suivre la construction en tapant la commande précédente et voir la ligne: Rebuild Status : 19% complete
Une autre commande utile pour vérifier la construction du RAID est la suivante :
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdb1[1] sda1[0] 973828096 blocks [2/2] [UU] [====>................] resync = 24.4% (238117952/973828096) finish=116.7min speed=105061K/sec unused devices: <none>
Dans cette commande, vous pouvez suivre plus en détails la construction du RAID, et surtout, intéressant, voir le temps qu’il reste !
Finalisation de la création
Redémarrez la machine.
Pour retrouver le bon device affecté à votre RAID, lancez la commande suivante :
sudo mdadm --detail --scan mdadm: md device /dev/md/d0 does not appear to be active.
Une fois repérée, dans mon cas, l’unité RAID ne s’appelle plus /dev/md0 mais /dev/md/d0 (ou /dev/md_d0), il faut l’activer. Tapez la commande suivante :
sudo mdadm --manage /dev/md/d0 --run mdadm: started /dev/md/d0
Lors de l’installation que j’ai réalisée, ma table des partitions n’était pas bonne. J’ai donc du lancer fdisk pour écrire une table de partition valide sur ce disque RAID.
sudo fdisk /dev/md_d0 Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valide Création d'une nouvelle étiquette DOS avec id de disque 0xd75ab005. Les modifications restent en mémoire jusqu'à ce que vous les écriviez. Après quoi, bien sûr, le contenu précédent sera irrécupérable. Le nombre de cylindres pour ce disque est fixé à 244189984. Il n'y a rien d''incorrect avec cela, mais c'est plus grand que 1024, et cela pourrait causer des problèmes pour certaines installations: 1) logiciels qui sont exécutés à l'amorçage (i.e., vieilles versions de LILO) 2) logiciels d'amorçage et de partitionnement pour d'autres OS (i.e., DOS FDISK, OS/2 FDISK) AVERTISSEMENT: fanion 0x0000 non valide dans la table de partitions 4, sera corrigé par w(écriture) Commande (m pour l'aide): p Disque /dev/md_d0: 1000.2 Go, 1000202174464 octets 2 têtes, 4 secteurs/piste, 244189984 cylindres Unités = cylindres de 8 * 512 = 4096 octets Identifiant de disque : 0xd75ab005 Périphérique Amorce Début Fin Blocs Id Système Commande (m pour l'aide): w La table de partitions a été altérée! Appel de ioctl() pour relire la table de partitions. Synchronisation des disques.
Sinon, lisez la suite pour finaliser la mise en place de la nouvelle partition RAID.
Formatage et Montage de la Partition RAID
Une fois la création du RAID terminée, il ne vous reste qu’à formater la partition en ext3 par exemple avec la commande suivante:
sudo mkfs.ext3 -j /dev/md/d0
Puis monter la partition dans le répertoire /mnt/raid1 en l’inscrivant dans /etc/fstab
sudo mkdir -p /mnt/raid1 && vim /etc/fstab
Et ajoutez la ligne suivante:
/dev/md/d0 /mnt/raid1 ext3 defaults 0 1
Au prochain démarrage, votre unité RAID de 1000.2Go sera directement accessible depuis /mnt/raid1/
Sources
Tutoriel sur ubuntu-fr.org: http://doc.ubuntu-fr.org/raid_logiciel
Howto The Software RAID-HOWTO: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
MDADM – Le Wiki de 2 Noisettes: http://www.noisette.ch/wiki/index.php/Mdadm