Tableau des versions :

VERSIONSLACKWARE VERSIONKERNEL VERSIONMKINITRD
14.0 3.2.29 1.4.7
13.37 2.6.37.6 1.4.6

Dans la suite de l'article, substituez VERSIONXXX par la version du tableau ci-dessus.

Le noyau installé par défaut par Slackware est le kernel-huge-smp-VERSION-smp. Ce noyau intègre un maximum de pilotes, ce qui le rend volumineux. Il est judicieux d'installer le noyau générique kernel-generic-smp-VERSIONKERNEL-smp à la place, ce qui divise sa taille par 2. Ce dernier point peut être important pour les configurations anciennes dotées de peu de mémoire RAM. Je traiterai l'installation dans les deux cas suivants : avec et sans RAID 1 logiciel, le premier cas correspondant au cas le plus usuel.

J'ai choisi de formater toutes mes partitions avec le système de fichiers ext4. La gestion de ce système de fichier n'étant pas incluse dans le noyau générique, dans les deux cas il faudra préparer une image qui sera chargée avant le noyau pour le prendre en charge. Pour des informations supplémentaires, lire le fichier /usr/doc/mkinird-VERSIONMKINITRD/README.initrd.

Pendant l'installation :

  • par simplification, j'ai choisi d'installer tous les packages de la distribution ;
  • cocher la case « KDEI "International language support for KDE" » pour pouvoir modifier la langue sous KDE.

Sans raid 1 logiciel

Partionnez votre disque dur par la commande fdisk.

Faites l'installation proprement dite :

# setup

Ces deux premières parties étant tout à fait standards, je vous renvoie vers des sites traitant ces sujets (par exemple : http://lea-linux.org/documentations/index.php/Installer_Linux_Slackware).

Redémarrez la machine par {ctrl + alt + del}. Après redémarrage et connexion sur le compte root, on continue :

# cd /boot
# mkinitrd -c -k VERSIONKERNEL-smp -m ext4 -r /dev/sda5
# ln -sf vmlinuz-generic-smp-VERSIONKERNEL-smp vmlinuz

Cela a pour résultat de produire un fichier /boot/initrd.gz et un répertoire /boot/initrd-tree. initrd.gz sera à introduire dans le fichier lilo.conf (voir ci-dessous).

Modifiez le fichier de configuration /etc/lilo.conf, le fichier de configuration de Lilo (Linux Loader) :

boot="/dev/sda1"            #adaptez à votre situation !
...
image="/boot/vmlinuz"       #vmlinuz est un lien symbolique sur le noyau générique !
initrd="/boot/initrd.gz"    #pour prendre en compte le fs ext4 avec le noyau generique
label="linux"
root="/dev/sda5"            #adaptez à votre situation !
read-only
...

Ecrire le secteur de boot dans le MBR (Master Boot Record) du disque /dev/hdb :

# lilo
Added linux *

Au prochain boot, c'est le noyau générique qui démarre !

Raid 1 logiciel

Le Raid 1 consiste à écrire de manière redondante sur deux (au moins) disques durs de même capacité et partitionnés de manière identiques. De cette manière, on dispose de deux disques comportant les mêmes informations, ce qui peut être utile en cas de défaillance de l'un d'eux. Ce n'est cependant pas la panacée, car une mauvaise manipulation de votre part (au hasard "rm *", ...), ou un coup du mauvais sort (foudre, panne simultannée des deux disques, ...) effacera les fichiers sur les deux disques ! Il faut donc sauvegarder malgré tout vos données sur un support externe (disque dur amovible, clé USB, CD ou DVD). Cette redondance des disques miroirs est effectuée de manière transparente pour l'utilisateur par le système d'exploitation : deux partitions de même taille situées sur deux disques différents seront traitées comme un périphérique unique nommé /dev/mdX (X = 0, 1,...).

Pour illustrer cette section, je vous propose l'exemple de mon serveur (2 disques sata en mirroir raid 1), la capacité de chaque disque est de 250 Go. Le résultat souhaité est le suivant :

Nom de la partition en miroir Capacité Point de montage Partitions
/dev/md0 300 Mo /boot /dev/sda1 et /dev/sdb1
/dev/md1 10 Go / /dev/sda5 et /dev/sdb5
/dev/md2 4 Go /var /dev/sda6 et /dev/sdb6
/dev/md3 4 Go /tmp /dev/sda7 et /dev/sdb7
/dev/md4 224 Go /home /dev/sda8 et /dev/sdb8

Dans le cas de deux disques déjà partitionnés et précédemment mis en miroir, vous pouvez passer à la section « Installation de la distribution. » En effet, les partitions en raid sont détectées et assemblées automatiquement.

Partitionnement des disques les durs

Le partitionnement de chacun des disques durs se fait comme à l'accoutumée. Il faut juste partitionner les deux disques de manière rigoureusement identique. A l'aide de l'outil de partitionnement (j'utilise fdisk), il faut donner comme type aux partitions en miroir le type « Linux raid autodetect » (type=FD) au lieu de « Linux » (type=83) qui est donné par défaut à la création d'une partition par fdisk. Les partitions de swap ne sont pas mises en miroir, durant l'installation il faudra donc valider les deux partitions de swap (une par disque).

Le partitionnement des disques durs se fait par la commande fdisk} :

# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          37      297171   fd  Linux raid autodetect
/dev/sda2              38         287     2008125   82  Linux swap
/dev/sda3             288       30401   241890705    5  Extended
/dev/sda5             288        1533    10008463+  fd  Linux raid autodetect
/dev/sda6            1534        2032     4008186   fd  Linux raid autodetect
/dev/sda7            2033        2531     4008186   fd  Linux raid autodetect
/dev/sda8            2532       30401   223865743+  fd  Linux raid autodetect

Command (m for help): q
#

Les disques SATA sont vus comme des périphériques SCSI et sont donc par exemple /dev/sda et /dev/sdb, les disques IDE sont par exemple /dev/hda et /dev/hdb. A noter enfin concernant le partitionnement qu'il est souhaitable de laisser quelques mégaoctets libres à la fin du disque dur pour faciliter le remplacement d'un disque défectueux. Ceci en raison d'éventuelles différences entre le disque original et le disque de remplacement (cf lien « Slackware RAID HOWTO » ci-dessous).

Pour aller plus vite pour le partitionnement du deuxième disque dur, on fera une copie du partitionnement du premier sur le deuxième :

# sfdisk -d /dev/sda | sfdisk /dev/sdb

Une fois les deux disques partitionnés on crée les périphériques /dev/md* par les commandes suivantes :

# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1 --metadata=0.90
# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sda5 /dev/sdb5
# mdadm --create /dev/md2 --level=raid1 --raid-devices=2 /dev/sda6 /dev/sdb6
# mdadm --create /dev/md3 --level=raid1 --raid-devices=2 /dev/sda7 /dev/sdb7
# mdadm --create /dev/md4 --level=raid1 --raid-devices=2 /dev/sda8 /dev/sdb8

Notez bien qu'il n'y a aucune convention entre le numéro de partition du disque (sdX), et le numéro du disque miroir (/dev/mdY). Vous faites ce que vous voulez mais notez les associations d'X avec Y car on a vite fait de s'emmèler les crayons ! A noter enfin concernant la création des miroirs que la version des métadata doit impérativement être 0.90 pour que LILO puisse booter à partir du miroir (cf « Slackware RAID HOWTO »). Pour les partition non bootables, vous pourrez laisser la version par défaut (1.20).

Vous pouvez suivre la progression de la mise en miroir en affichant le contenu du fichier /proc/mdstat. Avant que le processus ne se termine, un curseur de progression et une estimation du temps restant sont donnés. Une fois terminé vous obtenez quelque chose commme ceci :

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md1 : active raid1 sdb5[1] sda5[0]
      10008384 blocks [2/2] [UU]

md2 : active raid1 sdb6[1] sda6[0]
      4008064 blocks [2/2] [UU]

md3 : active raid1 sdb7[1] sda7[0]
      4008064 blocks [2/2] [UU]

md4 : active raid1 sdb8[1] sda8[0]
      223865664 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      297088 blocks [2/2] [UU]

unused devices:
#

Attention: cela peut prendre beaucoup de temps. Soyez donc patient avant d'entrer la commande d'installation « setup ». On peut obtenir davantage de détails sur l'assemblage :

# mdadm --detail /dev/md2
/dev/md2:
        Version : 1.2
  Creation Time : Thu Jul 19 19:48:15 2007
     Raid Level : raid1
     Array Size : 4008064 (3.82 GiB 4.10 GB)
  Used Dev Size : 4008064 (3.82 GiB 4.10 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Tue Sep 25 20:17:33 2007
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 8ae349b3:332ea0ad:9c5a9bac:bc35296f
         Events : 0.4

    Number   Major   Minor   RaidDevice State
       0       8        6        0      active sync   /dev/sda6
       1       8       22        1      active sync   /dev/sdb6

Installation de la distribution

Enfin, vient le moment tant attendu de l'installation de la Slack :

# setup

En cours d'installation, dans la phase d'affectation des points de montage aux périphériques, il faudra bien entendu choisir les partitions /dev/md*. De toute façon, vous n'aurez pas le choix car les partitions /dev/sd* n'étant pas de type Linux, elles ne vous seront pas proposées ! Sélectionnez les deux partitions de swap.

Post-installation

Ouvrez une session en tant que root, vous allez fabriquer une image initrd.gz qui chargée avant le noyau, va assembler les disques en miroir.

# cd /boot
# ln -sf vmlinuz-generic-smp-VERSIONKERNEL-smp vmlinuz
# cp /etc/mkinitrd.conf.sample /etc/mkinitrd.conf
# vi /etc/mkinitrd.conf

Modifiez le fichier /etc/mkinitrd.conf avec le contenu suivant :

# mkinitrd.conf.sample
# See "man mkinitrd.conf" for details on the syntax of this file
#
#SOURCE_TREE="/boot/initrd-tree"
#CLEAR_TREE="0"
#OUTPUT_IMAGE="/boot/initrd.gz"
KERNEL_VERSION="$(uname -r)"
KEYMAP="fr"
MODULE_LIST="ext4"
#LUKSDEV="/dev/hda1"
ROOTDEV="/dev/md1"
ROOTFS="ext4"
#RESUMEDEV="/dev/hda2"
RAID="1"
#LVM="0"
#WAIT="1"

Fabriquez le fichier /boot/mkinitrd.gz :

# mkinitrd -F -c

Modifiez la configuration de lilo /etc/lilo.conf pour y inclure l'image initrd.gz.

boot="/dev/md0"             #adaptez à votre situation !
raid-extra-boot=mbr-only
...
image="/boot/vmlinuz"       #vmlinuz est un lien symbolique sur le noyau générique !
initrd="/boot/initrd.gz"    #pour prendre en compte le fs ext4 avec le noyau generique
label="linux"
root="/dev/md1"             #adaptez à votre situation !
read-only
...

Lancer lilo pour mettre à jour le boot.

# lilo
Warning: LBA32 addressing assumed
Added Linux *
The Master boot record of  /dev/sda  has been updated.
Warning: /dev/sdb is not on the first disk
The Master boot record of  /dev/sdb  has been updated.
2 warnings were issued.

Redémarrez votre machine. Normalement, vous avez démarré le kernel générique sur vos disques en raid 1 logiciel !

Avertissement final au sujet du Raid 1

Au premier redémarrage, prenez la précaution de vérifier la configuration du Raid 1. Il se peut que vos miroirs /dev/md0, /dev/md1, etc soit en fait nommés /dev/md126, /dev/md127, etc. Vous avez deux possibilités :

  • confirmer ce nommage en renommant dans le fichier /etc/fstab, /dev/md0 en /dev/md127, etc.
  • si vous voulez absolument nommer les miroirs comme décidé initialement, faites comme ceci pour chaque miroir (cf lien « How do I rename an mdadm raid array?» ci-dessous).

Pour /boot (version des metadata = 0.90) :

# mdadm --stop /dev/md126
# mdadm --assemble /dev/md0 --update=super-minor /dev/sda1 /dev/sdb1

Pour les autres (version des metadata >= 1.0):

# mdadm --stop /dev/md127
# mdadm --assemble /dev/md1 /dev/sda5 /dev/sdb5 --update=name