Un coin perdu... : Articles - 1 - How to : Le RAID facile sous linux...
Nous sommes le
Bonne Fête!
Votre connection

Browser : Autre

IP : 38.107.191.100
OS : Système d'exploitation inconnu

Flux

TAG
This will be shown to users with no Flash or Javascript.
Rss 1 - How to : Le RAID facile sous linux...
Vous disposez d'un petit serveur à la maison, confectionné avec du vieux matos récupéré de ci de là, et configuré aux petits oignons par vos soins...

L'ennuie, c'est que ce vieux matos a souvent une fâcheuse tendance à réclamer son départ à la retraite, son disque dur fatigue prétend t'il... Mais crise oblige, l'heure n'est pas encore venue, et il va falloir bosser encore un peu ! Fort heureusement, dans le monde magique Linux, il existe des solutions pour remédier à ce problème, et il y en a de très simple !


Nous allons aider le serveur en lui adjoignant un deuxième disque dur afin de seconder le premier, l'aider, le remplacer au besoin...
Beaucoup de technique de Scout sont dispo pour faire cela, plus ou moins onéreuse... mais c'est la crise ! Et par chance, il se trouve que je dispose d'un second vieux disque planqué derrière des fagots... Et mon ami le manchot me dit à l'oreille :

Et si tu utilisai ce deuxième disque pour basculer le serveur sur un RAID ??!!

Je ne vais pas faire de cours sur le RAID et ces différents modes, il y a suffisamment de doc sur le nain Ternet. Nous choisirons ici le RAID 1, également appelé Mirroring ou disques en miroir, grâce à ce mode, les données sont écrites de manière identique sur chaque disque qui compose la grappe, que se soit en RAID matériel, pseudo matériel ou logiciel.
Cela nous apportera que des bonnes choses, en voici un pitch :

  • Sécurité des données accrue.
    si l'un de mes deux disques tombe, le contrôleur le désactive et l'autre prends le relai de façon transparente pour l'utilisateur. Une fois le disque défectueux remplacé, le contrôleur reconstruira les données sur le nouveau disque à l'aide de celui qui est toujours en fonction.
  • Souplesse de fonctionnement.
    Les accès en lecture du système se font sur le disque le plus facilement accessible à ce moment là et les écritures de façon simultanés, ainsi n'importe quel disque soit interchangeable n'importe quand (dixit Wikipédia).


Nous suivront l'exemple didactique d'un article que j'ai lu sur le Linux Mag qui traite du sujet, et dont je reproduit une grande partie des manips ici.

Passons aux choses sérieuses !

Notre vieux serveur est une vielle machine à l'age respectable et dont la config est la suivante :

CPU AMD Athlon 1800 XP (1,33 Ghz)
1,5 Go de mémoire RAM
1er disque dur : 6 Go sata
2éme disque dur : 6 Go sata
Système Debian Lenny

La solution que nous allons mettre en place notre RAID 1 est la plus simple qui soit, comme je l'ai dis plus haut, c'est la crise, j'ai donc opté pour un contrôleur RAID logiciel, c'est à dire qu'il sera géré par le système d'exploitation du serveur (Ubuntu Gnu/Linux en l'occurrence) et non par un contrôleur dédier (sur une carte) bien trop couteux.

Faisons un petit état des lieux et des manipulations avant toutes choses :

1 => La config des disques avant le RAID


Code TEXT :
disque 1 /dev/sda (disque d'origine)
Partitions : 
/dev/sda1 montée sur /
/dev/sda2 montée sur /boot
/dev/sda3 partition de swap
 
disque 2 /dev/sdb (disque que l'on va ajouter)
Partitions : 
Vierge


2 => Les manipulations

A : Partitionnement du second disque
B : Installation du contrôleur RAID
C : Configuration du second disque et intégration dans la grappe nouvellement créée.
D : Configuration et intégration du premier disque dans la grappe

État des lieux de sortie :

Config des disques avec le RAID 1 :

Code TEXT :
"disque" RAID monté sur /dev/md
Partitions : 
/dev/md0 monté sur /
/dev/md1 monté sur /boot
/dev/md2 partition de swap



A : Partitionnement du second disque
pour se faire, nous utiliserons sfdisk, celui ci nous permet de partitionner le second disque a l'identique du premier grâce à une simple commande !
La voici pour notre cas présent :
Code BASH :
sfdisk - d /dev/sda | sfdisk /dev/sdb

Il se peut que le terminal ronchonne un peu mais cela n'est pas important, nous pouvons vérifier la sortie de cette commande en faisant un fdisk -l et ainsi voir que notre deuxième disque est bien partitionné.


B : Installation du contrôleur RAID
Ce contrôleur sera MDADM, il est intéressant car il va nous permettre de construire notre grappe RAID 1 avec seulement un disque dur, grâce à l'option missing...

Code BASH :
apt-get install mdadm


puis nous chargeons le module raid1

Code BASH :
modprobe raid1


Nous pouvons maintenant créer notre grappe en utilisant uniquement un seul disque (/dev/sdb) !! Et ce, grâce à l'option missing de mdadm.
Commençons :
Code BASH :
 
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3

Nous pouvons vérifier que notre grappe est bien créée en faisant un simple cat /proc/mdstat

Créons ensuite les systèmes de fichiers du RAID, ceux ci doivent être identique à ceux correspondant sur /dev/sda, ici c'est du ext3, l'autre partition est une partition de swap.

Code BASH :
 
mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md1
mkswap /dev/md2

Pour activer notre grappe, il faut maintenant renseigner le fichier de conf du contrôleur raid (mdadm), en prenant soin de conserver une copie d'origine, non seulement par sécurité, mais aussi parce qu'il nous sera utile par la suite...

Code BASH :
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf-origine


Pour nous simplifier encore plus la vie, il y a une commande magique (glanée sur la revue Linux Magazine, comme beaucoup de cet article)

Code BASH :
mdadm --examine --scan >> /etc/mdadm/mdadm.conf


Voilà ! Notre RAID 1 unijambiste est maintenant monté !


Continuons, il faut désormais copier les données de /dev/sda sur notre RAID bancale (celui ci ne comprend que /dev/sdb pour le moment). Pour cela, nous allons monter une partie du RAID dans un dossier afin d'y copier notre futur système de fichier racine.

Code BASH :
 
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
mkdir /mnt/md1
mount /dev/md1 /mnt/md1


Puis copions tout le système :

Code BASH :
 
cp -dpRx / /mnt/md1
cd /boot
cp -dpRx . /mnt/md0/boot


Détaillons ces options (man cp) :
  • -d : Pour copier les liens symboliques en tant que tels.
  • -p : Pour conserver les attributs des fichiers (propriétaire, groupe etc...).
  • -R : Pour copier récursivement les répertoires.
  • -x : Interdit de changer de système de fichier en cours de copie, c'est pour cela qu'il faut relancer l'opération.


Préparons maintenant la futur fstab de notre grappe ! Il faut l'éditer dans /mnt/md0 et remplacer les entrées sda par les entrées md correspondantes de sorte d'obtenir quelque chose comme ça (pour notre config à nous bien sur) :

Code BASH :
 
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md1           /                           ext3       relatime,errors=remount-ro 0       1
/dev/md0		/boot			ext3	defauts
/dev/md2		none			swap	sw
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8 0       0



Après tout cela, il faut prévenir l'ami Grub que quelque chose à changer, il faut lui ajouter une entrée supplémentaire pour pouvoir booter sur le Raid... En éditant son menu avec ça, il devrait nous entendre :
Code BASH :
vi /boot/grub/menu.lst


Premièrement, on lui dit qu'avec la commande fallback 1 placée juste en desous du paramétre defaut 0, si le boot sur le Raid ne fonctionne pas, il tentera de booter sur l'autre entrée par défaut, soit l'entrée "d'origine".

Deuxiémement, rajoutons le noyau du Raid qui se trouve sur /dev/md1. Il suffit de recopier le premier bloc de kernel juste en dessous de celui ci, en changeant seulement l'adresse du kernel root, cela doit donner quelque chose comme ça :

on met jour de l'image initiale initramfs
Code BASH :
update-initramfs -u

pour finir en installant grub sur notre second disque, qui sera notre Raid unijambiste après le prochain reboot, si tout se passe bien...
Code BASH :
grub
grub> root (hd1,0)
grub> setup (hd1)
grub> quit

Voili voilou, à partir de là, on peut redémarrer et booter sur notre raid si tout va bien ! ....Et en choisissant la bonne entrée aussi...
Code BASH :
shutdown now -r



Le boot sur le Raid c'est bien passé, vous avez pu voir la grappe prendre la main en se peuplant avec seulement un disque !

Après s'être logué, on peut voir que nous somme bien sur le Raid en vérifiant :
Code BASH :
mount
/dev/md1   on   /    type    ext3    (rw,realtime,errors=remount -ro)
/dev/md0   on   /boot   type   ext3   (rw)


Il ne reste désormais plus qu'à intégrer le premier disque dur (celui qui commence à ce faire un peu vieux) dans la grappe, ainsi elle sera complète et pleinement opérationnelle.
Pour bien faire les choses, il faut déclarer toutes les partitions du disque en Linux raid Autodetect (fd) avec la commande fdisk, option t pour changer le type, puis fd pour linux raid autodetect, et il faut le faire pour chaque partitions.
Cela prend très peu de temps et après avoir fait ça, on peut basculer le disque dur ( pour mémoire, on partait de lui au début ! ) dans la grappe.
Code BASH :
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3

A partir de ce moment là, mdadm commence a synchroniser /dev/sda a l'identique de /dev/sdb puisque tout deux forment /dev/md et l'on peut voir cette synchronisation tout simplement en tapant ceci :
Code BASH :
tail -f /proc/mdstat

Enfin nous allons remettre le fichier de conf de mdadm à zéro, puis nous le réinitialisera avec nos nous paramètres.
Code BASH :
cp /etc/mdadm/mdadm.conf-origine /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Voila, nous venons de basculer notre serveur sur un RAID 1 en toute sécurité !
Si l'on veut gagner encore un poil plus de sécu sur le boot, on peut modifier grub pour qu'il nous affiche chacun des principaux noyaux sur chacun des disques et systèmes de fichier.
Code BASH :
 
title       Debian GNU/linux, RAID kernel 2.6.26-2-686 1er_disque
root      (hd0,0)
kernel   /vmlinuz-2.6.26-2-686 root=/dev/md1   ro   quiet
initrd    /initrd.img-2.6.26-2.686
 
title       Debian GNU/linux, RAID kernel 2.6.26-2-686
root      (hd1,0)
kernel   /vmlinuz-2.6.26-2-686 root=/dev/md1   ro   quiet
initrd    /initrd.img-2.6.26-2.686
 
title       Debian GNU/linux, kernel 2.6.26-2-686 1er_disque
root      (hd0,0)
kernel   /vmlinuz-2.6.26-2-686 root=/dev/sda2   ro   quiet
initrd    /initrd.img-2.6.26-2.686
 
title       Debian GNU/linux, kernel 2.6.26-2-686
root      (hd1,0)
kernel   /vmlinuz-2.6.26-2-686 root=/dev/sdb2   ro   quiet
initrd    /initrd.img-2.6.26-2.686
 


Remise à jour d'initramfs :
Code BASH :
update-initramfs -u


The end.

Sources :

linux Magazine (un très bon article de Cedric Pellerin)
Linux France
Manuel de cp
manuel de mdadm
 
 
Note: Aucune note
(0 note)
Ecrit par: , Le: 13/06/10