3. Mirroring du disque système avec Raidtool

3.1 Présentation de Raidtool

    Raidtool est un logiciel freeware permettant de gérer les différents niveaux de raid sur Linux. Raidtool est disponible sous différents format (.rmp, .deb, .tgz...).

3.2 Vocabulaire

Le vocabulaire utilisé avec Raidtool est sensiblement similaire à SDS. Les métadevices sont remplacés par les raiddevices et il n'existe pas de réplicas contenant les base de donnée avec la configuration du logiciel.

3.3 Configuration des disques

    Nous allons mettre en place un mirroring sur deux disques de 18 Go. Le système est déjà installé sur le premier disque. Le partitionnement est comme suit :
 
 
Partition physique
Contenue de la partition
Taille de la partition
/dev/hda1 / 4 Go
/dev/hda2 swap 2 Go
/dev/hda3 /var 11 Go

La configuration détaillée obtenue avec la commande fdisk /dev/hda nous donne les renseignements suivants :
 
 
    Device    Boot  Start    End       Blocks           Id     System
/dev/hda1      *          1    520    4176836+        83     Linux native
/dev/hda2              521    781    6265254          83     Linux swap
/dev/hda3              782  2212   11486298         83     Linux native

3.4 La configuration du mirroring

    Le schéma suivant représente le mirroring qui va être mis en place. Dans la phase 0, on a les 2 disques physiques présent indépendants. Contrairement à SDS, il n'est pas nécessaire de déclarer les partitions physiques en tant que device. Les partions physiques sont directement rattachées aux raiddevices qui sert de mirroir, phase 1 sur le schéma.
 
 


Les partitions physiques
Raiddevice, mirror correspondant
/dev/hda1 /dev/md0
/dev/hda2 /dev/md1
/dev/hda3 /dev/md2
/dev/hdb1 /dev/md0
/dev/hdb2 /dev/md1
/dev/hdb3 /dev/md2

3.5 Installation des packages

    Pour le fonctionnement de Raidtools, il faut installer le package 'raidtools'psous Linux. Il suffit d'utiliser l'outil apt-get.

# apt-get install raidtools

    Il faut s'assurer que les modules linear, raid0, rais1 et raid5 sont présent lorsque l'on met en place un système de raid. Si ce n'est pas le cas :

# modprobe linear
# modprobe raid0
# modprobe raid1
# modprobe raid5

Attention : Pour certains noyaux 2.2 et 2.0, il faudra installer des patchs.
 

3.6 Duplication des partitions

    Dans un premier temps, il faut avoir un partitionnement identique entre le premier et le deuxième disque. Pour cela on utilise la commande fdisk pour copier le partitionnement de /dev/hda sur /dev/hdb. Les partions à mirrorer devront avoir la spécification System "Linux raid autodetect" et le type "fd" :

La configuration détaillée obtenue avec la commande fdisk /dev/hdb nous donne les renseignements suivants :
 
    Device    Boot  Start    End       Blocks           Id      System
/dev/hdb1      *          1    520    4176836+          fd      Linux raid autodetect
/dev/hdb2              521    781    6265254            fd      Linux raid autodetect
/dev/hdb3              782  2212   11486298           fd      Linux raid autodetect

 

3.7 Le fichier de configuration

    Il faut éditer le fichier /etc/raidtab contenant toutes les informations sur les raiddevices :
 
 
 
# Déclaration du raiddevice '/dev/md0' pour la partition '/'
# composé des partitions /dev/hdb1 et /dev/hda1

raiddev                 /dev/md0                     # déclaration du raiddevice
raid-level              1                                  # niveau de raid (ici 1 pour le mirroring)
nr-raid-disks           2                                # nombre de disques mirrorés
chunk-size              32                              # (voir ci-dessous)
nr-spare-disks          0                              # nombre de disques en spare
persistent-superblock   1                         # (voir ci-dessous)
device                  /dev/hdb1                    # partition physique à mirrorer
raid-disk               0                                 # 0 car c'est la première partiton déclaré
device                  /dev/hda1                    # partition physique à mirrorer
failed-disk             1                                # failed-disk est utilisé pour ne pas que le système en cours d'utilisation sur /dev/hda1 soit altéré
                                                                 # 1 car c'est la deuxième partition déclaré 
                                                                 # pour le mirroring d'une partition non système, on aurait utilisé raid-device une seconde fois 

# Déclaration du raiddevice '/dev/md1' pour la partition '/'
# composé des partitions /dev/hdb2 et /dev/hda2

raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
chunk-size              32
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hdb2
raid-disk               0
device                  /dev/hda2
failed-disk             1

# Déclaration du raiddevice '/dev/md2' pour la partition '/'
# composé des partitions /dev/hdb3 et /dev/hda3

raiddev                 /dev/md2
raid-level              1
nr-raid-disks           2
chunk-size              32
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hdb3
raid-disk               0
device                  /dev/hda3
failed-disk             1
 


 
     Le spare permet d'avoir une seule partition répartie sur plusieurs disques.

 
     Dans le cas d'un raid0, le chunk-size est le nombre de bits qui va être inscrit sur un disque avant de changer de disque. Ansi, dans le cas où l'on aurait mis en place un raid0 sur /dev/hdc et /dev/hdd, raidtools va inscrire 32 Kb sur /dev/hdc puis 32 Kb sur /dev/hdd, jusqu'à ce que toutes les données soient inscrites.
     Dans le cas du mirroring, le chunk-size ne modifie pas la manière d'écrire les données sur les différentes partitions. Cependant, pour la lecture le logiciel va lire 32 Kb sur une partition puis 32 Kb sur l'autre pour améliorer les temps de lecture.

 
     Le persistent-superblock permet d'écrire un superblock au début de chaque disque participant au raid. Cela permet au kernel de lire directement la configuration du raid à partir des disques impliqués. Cela est utilisé lorsque le système de raid n'a pas acccès au fichier de configuration (partition non montée).

3.8 Initialisation des raiddevices

    Une fois que le fichier de configuration est édité, on va construire les raiddevices :

# mkraid /dev/md0
# mkraid /dev/md1
# mkraid /dev/md2

Pour suivre la création des raiddevices et les éventuelles erreurs, il est possible de regarder le fichier /proc/mdstat.

Une fois que les raiddevices sont créés, il faut créer le file system sur cette partition, qui est dès lors considérée comme une partiton physique normale.
Nota : le disque /dev/hda n'est pas encore inclut dans lemirroring grâce à l'option 'failed-disk'. Si l'option 'raid-disk' avait été choisie, les deux partitions serait alors considérés comme /dev/md0, ce qui aurait posé des problèmes pour le système en cours d'utilisation.

Création du file system :

# mke2fs /dev/md0

Contrairement à SDS, il n'est pas possible de déclarer le système en cours d'utilisation en tatn que raiddevices, c'est pourquoi on a déclaré /dev/md0 à partir de /dev/hdb. Cependant, ce raiddevices ne contient aucunes informations, il donc falloir copier toutes les données de /dev/hda sur /dev/hdb.

#mount /dev/md0 /mnt
# mkdir -p /mnt/usr/local
# mkdir -p /mnt/var
# mkdir -p /mnt/home

# cp -a /bin /mnt
# cp -a /boot /mnt
# cp -a /dev /mnt
# cp -a /etc /mnt
# cp -a /home /mnt
# cp -a /lib /mnt
# cp -a /root /mnt
# cp -a /sbin /mnt
# cp -a /tmp /mnt
# cp -a /usr /mnt
# cp -a /var /mnt
# cp -a /vmlinuz /mnt
# mkdir -p /mnt/cdrom
# mkdir -p /mnt/mnt
# mkdir -p /mnt/proc

3.9 Reboot du système

    Il faut maintenant indiquer au système de booter sur la partition logique /dev/md0, il suffit de changer le fichier /mnt/etc/fstab, le fichier /etc/fstab pour la nouvelle partiton logique :
 

/dev/md1      swap        swap    defaults        0   0
/dev/md0       /           ext2    defaults        1   1
/dev/md2       /var        ext2    defaults        1   1

none           /proc       proc    defaults        0   0
 

    Ensuite, il faut changer la configuration de lilo, en changeant le fichier /mnt/etc/lilo.conf, pour spécifier au système de booter sur la partition logique /dev/md0 :
 

 #fichier de configuration LILO
#
# Start LILO global section
boot = /dev/md0
#mode VGA console
vga = normal

# Linux bootable partition config begins
image = /vmlinuz
  root = /dev/md0
  label = Linux
  read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends
 

Une fois le fichier de configuration il faut lancer lilo en lui spécifiant de prendre le fichier de configuration de la partition /dev/md0. Pour cela on utilise l'option -r suivit du chemin où est monté la partition :

# lilo -r /mnt

Si tous ce passe bien, le système peux alors être rebooté :
# reboot

Pour vérifier que le sytème a bien rebooté sur la partition logique, il suffit de taper la commande :
#df -h

Maintenant, il faut intégrer le disque /dev/hda au mirroring. Comme pour /dev/hdb, il faut changer la spécification System ("Linux raid autodetect") et le type ("fd") en utilisatn fdisk. Une fois que les modifications ont été effectuées, on peux alors monter les partitions de /dev/hda :

# raidhotadd /dev/md0 /dev/hda1
# raidhotadd /dev/md0 /dev/hda2
# raidhotadd /dev/md0 /dev/hda3

Une fois que ces modifications ont été faites, il faut changer le fichier /etc/raidtab en remplaçant 'failed-disk' par 'raid-disk'.
 

3.10 Maintenance du mirroring

Le fichier /proc/mdstat permet de voir l'état du mirroring pendant lsa construction et son fonctionnement.