Installation d’un RAID 1 sur Ubuntu 11.04 existante

RAID 1 with two disks (disk 0 and disk 1) over...

Image via Wikipedia

Le raid 1 permet de dupliquer les informations sur au moins 2 disques. En cas de défaillance d’un disque, les informations ne sont pas perdues car il reste au moins une copie. On peut donc utiliser le raid 1 pour éviter la perte de données. Il peut aussi servir à éviter une interruption de service en utilisant une configuration qui autorise le démarrage sur n’importe quel des disques valide. Le besoin d’utiliser du raid survient en général pour le particulier après un sinistre où même les sauvegardes ne protègent pas contre les interruptions de service. Après avoir réinstaller son système l’utilisateur envisage alors de se prémunir de futures pannes. Le contexte de ce billet est donc la mise en place d’un raid 1 sur un système existant.

Notre système de départ est une installation Ubuntu desktop typique avec un disque /dev/sda partitionné en 2

  1. /dev/sda1 pour le système
  2. /dev/sda2 pour le swap

Pour monter le raid1 on ajoute un second disque à la machine. Ce disque doit être au moins aussi gros que celui en place qui dans notre cas fait 640 Go. On choisit donc un nouveau disque de 2 To qui nous coûte 3,4 centimes le Go !

Une fois le disque en place on installe les outils pour administrer le RAID et créer l’image de démarrage:

sudo apt-get install initramfs-tools mdadm

On charge le module raid1:

sudo modprobe raid1

On copie ensuite la table de partition du disque original /dev/sda sur le nouveau /dev/sdb. Cela évite de partionner à la main:

sudo sfdisk -d /dev/sda | sfdisk --force /dev/sdb

A ce stade le disque /dev/sdb possède un espace libre après la partition de swap. On pourra formater celle-ci ensuite pour avoir un espace de stockage. Cela est une autre histoire.

Mais continuons plutôt la mise en place de notre raid1. On peut avantageusement utiliser l’outil gparted pour ajouter le drapeau raid aux partition /dev/sdb1 et /dev/sdb2.

Maintenant on va créer les grappes raid. Une grappe est constituée de plusieurs disques ou partitions fusionnés en un disque raid. Dans notre cas on va créer une grappe constituée de 2 partitions pour accueillir le système. Chaque partition étant sur un disque physique différent. Il en va de même pour la partition de swap. Les commandes suivantes créent les grappes en omettant le premier disque car ce dernier est actuellement en cours d’utilisation.

sudo mdadm --create /dev/md0 --level=1 --raid-disk=2 missing /dev/sdb1
sudo mdadm --create /dev/md1 --level=1 --raid-disk=2 missing /dev/sdb2

La commande posera une question disant que la grappe utilisera les métadata 1.2. Il suffit de répondre yes car GRUB2 sait gérer cela.
On peut alors formatter le disque raid /dev/md0. Il n’y a pas de souci à avoir car la grappe ne contient pour l’instant que le nouveau disque /dev/sdb

sudo mkfs.ext4 /dev/md0
sudo mkswap /dev/md1

On va configurer mdadm, cela se fait automatiquement par la commande suivante:

sudo mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Il nous reste à préparer le prochain démarrage qui se fera sur le raid. On va modifier les fichiers /etc/fstab et /boot/grub/grub.cfg.

Dans /etc/fstab il faut remplacer la partition système /dev/sda1 par /dev/md0 et la partition swap /dev/sda2 par /dev/md1. Attention Ubuntu 11.04 se base sur les UUID au lieu des chemin /dev/XXX. Se repérer sur les points de montage. Le système est sous / tandis que le swap n’est pas monté (valeur none).
Dans le fichier /etc/mtab on peut également changer /dev/sda1 par /dev/md0

Le paramétrage de Grub2 est différent que le l’ancien Grub. Le fichier /boot/grug/grub.cfg est en effet en lecture seule et il est recrée à partit d’autres fichiers. Nous allons créer un fichier de menu personnalisé pour redémarrer le système sur notre raid1.

cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vim /etc/grub.d/09_swraid1_setup

Voici le contenu du fichier 09-swraid1_setup qu’il faut adapter en fonction du nom du noyau que vous obtenez en faisant un uname -r

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Ubuntu, avec Linux 2.6.38-8-generic' --class debian --class gnu-linux --class gnu --class os {
insmod raid
insmod mdraid1x
insmod part_msdos
insmod ext2
set root='(md/0)'
echo 'Loading Linux 2.6.38-8-generic ...'
linux /boot/vmlinuz-2.6.38-8-generic root=/dev/md0 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.38-8-generic
}

Attention le module mdraid1x est nécessaire pour pouvoir lire le disque raid avec metadonnée 1.2

On peut aussi désactiver dans GRUB2 l’usage de UUID puisque l’on définie les disque par /dev/XXX. Aller dans le fichier /etc/default/grub pour décommenter la ligne

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true

Disons à grub2 de regénérer le fichier de grub.cfg

sudo update-grub

Et recréons un fichier ramdisk (utilisé au démarrage)

sudo update-initramfs -u

Copions le disque original sur le disque raid (constitué que d’un seul disque /dev/sdb1 pour l’instant). La commande suivante peut être longue (plusieurs dizaines de minutes) selon la quantité de données.

sudo cp -dpRx /boot /mnt/md0

On s’assure que GRUB2 est installé sur le disque sdb

sudo grub-install /dev/sdb

Maintenant on redémarre la machine

Quand la machine a redémarré, le système est alors sur le RAID (/dev/md0) et le disque /dev/sda n’est pas utilisé. On peut alors ajouter le disque /dev/sda dans le RAID.

A l’aide de gparted, ajouter le drapeau raid aux partitions /dev/sda1 et /dev/sda2. Puis ajouter les dans le RAID avec les commandes suivantes:

sudo mdadm --add /dev/md0 /dev/sda1
sudo mdadm --add /dev/md1 /dev/sda2

Attendre que le raid se synchronise i.e la partitions /dev/sdb1 et /dev/sdb2 respectivement se copie sur /dev/sda1 et /dev/sda2 respectivement. La commande suivante permet de visualiser le processus:

sudo watch cat /proc/mdstat

Quand c’est terminé il reste à reconfigurer mdadm et grub pour les prochains démarrages.

Le fichier /etc/mdadm/mdadm.conf se met à jour avec la même commande vue plus haut:

sudo mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Le démarrage n’a plus besoin de l’entrée Grub utilisé pour lancer le système sur /dev/md0 alors qu’il était chargé depuis /dev/sda. Maintenant grub doit être capable de se configurer automatiquement avec

sudo rm -f /etc/grub.d/09_swraid1_setup
sudo update-grub
sudo update-initramfs -u

On s’assure que les 2 disques contiennent bien Grub

sudo grub-install /dev/sda
sudo grub-install /dev/sdb

Et voilà, on peut redémarrer le système.

Cet article, publié dans Paramétrage, est tagué , , . Ajoutez ce permalien à vos favoris.

5 commentaires pour Installation d’un RAID 1 sur Ubuntu 11.04 existante

  1. RaphAstronome dit :

    Bonjour,

    Je ne comprends pas trop le « sudo cp -dpRx /boot /mnt/md0 »
    Le /mnt/md0 est juste la partition /boot ? Où ce trouvent les autres partitions ( / et /home par exemple) ?
    Sinon bon article.

  2. Maurice Brunet dit :

    Bonjour,
    1.-Je voudrais installer un RAID1 en suivant votre tuto: installation d’un RAID 1 sur Ubuntu 11.04 existante.
    J’ai installé un 2eme disque dur absolument identique au 1er.
    Je l’ai monté, il apparaît bien dans « Mon dossier personnel » sous le nom de « système de fichiers 320Go » (montage fait dans /media/apt ), mais a chaque démarrage pour qu’il soit monté il faut que je double clique dessus alors le petit triangle gris apparaît à droite et le dossier last+found.
    Comment faire pour qu’il reste monté tout le temps? Je n’ai pas pu modifier etc/fstab : lecture seule.
    2.-J’ai quand mème commencé votre tuto:
    1ère Cde install…..mdadm ok
    2ème Cde modprob raid1 ok
    3ème Cde copie de la table de partition (impossible « sfdisk : ne peut ouvrir /dev/sdb en lecture/écriture).
    Ma config:
    Ubuntu 11.10
    Carte mère:ASUS P5Q
    Processeur: Intel Cor 2 QUAD 6600
    RAM: 2 Go
    Disque dur : Seagate Barracuda 320Go (sda)
    Merci de votre aide

    • Bonjour,
      Il ne faut pas monter le deuxieme disque sinon on ne peut pas faire de sfdisk. Si le 2e disque est monté par le bureau gnome, démonter le en accédant au menu contextuel sur le disque.
      Pour ce qui est de votre impossibilité à modifier le fstab: êtes vous sûr de le modifier en root (sudo vim /etc/fstab) ?
      Cdt.

  3. Maurice Brunet dit :

    Bonjour,
    Merci de votre réponse.
    J’ai démonté sdb ,iln’apparait plus dans :dossier personnel > périphériques, il apparait toujours dans GParted avec lesindications suivante:
    Non alloué : 298.09 Gio
    Partition non alloué
    Système de fichiers : non alloué
    Utilisé: –
    Inutilisé: –
    Drapeaux: –
    Je suis reparti de zéro , mais à la 3ème commande j’obtiens toujours le même résultat:
    update-initramfs: deferring update (trigger activated)
    * Starting MD monitoring service mdadm –monitor [ OK ]
    Traitement des actions différées (« triggers ») pour « initramfs-tools »…
    update-initramfs: Generating /boot/initrd.img-3.0.0-17-generic
    W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
    brunet@brunet-P5Q:~$ sudo modprobe raid1
    brunet@brunet-P5Q:~$ sudo sfdisk -d /dev/sda | sfdisk –force /dev/sdb
    /dev/sdb: Permission non accordée

    sfdisk: ne peut ouvrir /dev/sdb en lecture/écriture
    Avertissement : la partition étendue ne débute pas sur une frontière de
    cylindres. DOS et Linux interpréteront les contenus différemment.
    brunet@brunet-P5Q:~$
    Il y a QQ chose que j’ai du mal faire
    Merci encore

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s