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 :
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 :
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 :
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 :
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 :
puis nous chargeons le module raid1
Code BASH :
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 :
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 :
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 :
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 :
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 :
Puis copions tout le système :
Code BASH :
Détaillons ces options (man cp) :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
Enfin nous allons remettre le fichier de conf de mdadm à zéro, puis nous le réinitialisera avec nos nous paramètres.
Code BASH :
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 :
Remise à jour d'initramfs :
Code BASH :
The end.
Sources :
linux Magazine (un très bon article de Cedric Pellerin)
Linux France
Manuel de cp
manuel de mdadm
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 -upour 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 -rLe 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 -uThe end.
Sources :
linux Magazine (un très bon article de Cedric Pellerin)
Linux France
Manuel de cp
manuel de mdadm






