Introduction: objet de cet article
Nous voulons faire héberger dans un datacenter une machine de type 1U, garantissant une bonne fiabilité, disposant d'une simplicité d'administration et capable d'offrir une réaction rapide aux problèmes de sécurité et surtout pas chère.
Pour cela, une machine de type PC x86 en rack 1U a été achetée, avec deux disques durs IDE identiques.
Le système d'exploitation Linux est stable, puissant et doté de beaucoup de fonctionnalités facilitant l'administration et la gestion correcte d'une machine. Parmi celles-ci, figure le RAID logiciel permettant d'allier fiabilité des données et petit prix de revient.
La distribution Linux Debian a été choisie pour la puissance d'administration et sa grande stabilité.
Cependant, Linux Debian ne permet pas une installation directe sur du RAID logiciel (à la différence, par exemple, de Linux RedHat qui dispose de cette fonctionnalité depuis au moins la version 7.3).
Cet article explique comment installer une Debian en root RAID directement, à l'aide d'une astuce. Je ne sais pas s'il existe une méthode plus propre pour faire une telle installation (peut-être l'internet dispose-t'il d'une image ISO faisant automagiquement le boulot, en ce cas, me contacter).
Début de l'installation du système
Déterminer une logique d'installation
Il faut commencer par établir la liste du matériel présent: carte réseau, éventuellement carte SCSI si une telle carte est présente dans la machine, carte vidéo et autres spécificités réjouissantes.
Si, comme moi, vous souhaitez faire du RAID soft IDE logiciel, il est important que les deux disques IDE choisis soient chacun sur un controleur IDE distinct: deux disques sur un même contrôleur grèvent lamentablement les performances. Par exemple, mettez le premier disque en /dev/hda et le second en /dev/hdc.
Ceci fait, il faut à présent définir le partitionnement souhaité pour la machine, par exemple sur la machine en question:
/boot 100Mo / 4Go /var 4Go /tmp 1Go swap 512Mo /home [reste soit env. 65 Go]
On lance donc l'installation Debian classique et on partitionne les deux disques IDE.
/dev/hda1 1 13 104391 fd Linux raid autodetect /dev/hda2 14 536 4200997+ fd Linux raid autodetect /dev/hda3 537 1059 4200997+ fd Linux raid autodetect /dev/hda4 1060 9964 71529412+ 5 Extended /dev/hda5 1060 1125 530113+ fd Linux raid autodetect /dev/hda6 1126 1158 265041 82 swap /dev/hda7 1159 9964 70734163+ fd Linux raid autodetect
L'attribut «Système» Linux raid autodetect s'obtient, sous fdisk, à l'aide du code fd.
Comme on le voit, j'ai décidé de faire deux partitions de swap de 256 Mo plutôt qu'une partition unique de 512 Mo, l'une sur /dev/hda, l'autre sur /dev/hdc. On verra par la suite que cela va être utile.
Faire une mini-installation
A partir de ce moment là, les choses commencent à très mal se passer; en effet, le programme d'installation de la Debian ne considère par les partitions fd comme valides pour une installation et il m'est apparu impossible de construire le RAID à ce moment précis.
J'ai donc choisi de modifier la seconde partition de swap (/dev/hdc6) et de la transformer en partition ext2 traditionnel et de faire une installation minimale de la Debian.
L'installation sur un système de fichier ext2 se déroule sans accroc.
Configurer la mini-installation pour construire le RAID
Une fois l'installation standard terminée, on se retrouve avec deux énormes disques et un minuscule système de fichiers actif. Cela ne sera que temporaire.
Il faut alors installer le paquet raidtools2 et installer un noyau avec support du RAID logiciel.
On commence par compiler un nouveau noyau. Je vous recommande d'en prendre un bien frais sur ftp.kernel.org (ou un miroir officiel, comme le lip6). Choisissez avec grand soin les modules nécessaires pour votre machine (en particulier le type de processeur, de contrôleurs IDE et de type de carte afin d'obtenir un support DMA correct sur cette machine). Examinez, avec la commande hdparm /dev/hda que le DMA et l'irq masquing sont bien activés pour votre disque; sinon, tapez /sbin/hdparm -u 1 -d 1 /dev/hda, puis pour /dev/hdc. Voyez la page de manuel de hdparm pour de plus amples renseignements.
Pour les besoins du RAID logiciel, choisissez:
CONFIG_MD=y CONFIG_BLK_DEV_MD=y (...) CONFIG_MD_RAID1=y CONFIG_MD_RAID5=y
Une fois votre choix fait, je vous suggère d'utiliser les outils Debian pour compiler, pakager et installer le nouveau noyau à l'aide du paquet kernel-package.
Une fois le nouveau noyau compilé et installé, redémarrez la machine. Vérifiez à l'aide de la commande uname -r que vous êtes bien sur le bon noyau.
On commence ensuite à construire le RAID, pour ce faire, après avoir lu la documentation idoine (je parle du Software-RAID HOWTO, Cf. la fin de ce document) on va constituer le fichier /etc/raidtab.
Mon fichier pour ma part à cette tête-là:
# /boot RAID 1 raiddev /dev/md0 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/hda1 raid-disk 0 device /dev/hdc1 raid-disk 1 # / RAID 1 raiddev /dev/md1 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/hda2 raid-disk 0 device /dev/hdc2 raid-disk 1 # /var RAID 1 raiddev /dev/md2 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/hda3 raid-disk 0 device /dev/hdc3 raid-disk 1 # /tmp RAID 1 raiddev /dev/md3 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/hda5 raid-disk 0 device /dev/hdc5 raid-disk 1 # /home RAID 1 raiddev /dev/md4 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/hda7 raid-disk 0 device /dev/hdc7 raid-disk 1
Bien évidemment, il faut adapter ce fichier d'exemple à votre configuration.
Une fois cela fait, on peut alors créer le RAID à l'aide de la commande: mkraid /dev/md0.
La commande rend la main étrangement vite, on en profite pour créer les autres partitions RAID avec mkraid /dev/md1, etc.
Le RAID va être construit progressivement par le système. On s'aperçoit de la bonne marche des opérations à l'aide de quelques cat /proc/mdstat : on aperçoit le RAID en pleine construction.
Sur ma machine, le RAID s'est construit à une vitesse d'environ 30Mo/sec. Si la vitesse de création est nettement inférieure à cela, (par exemple, moins d'1Mo/sec) c'est sans doute l'indice que votre système est mal configuré, par exemple du fait de l'absence de gestion du DMA, ou autre.
Une fois la création terminée, un cat /proc/mdstat devrait avoir une apparence telle que:
Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdc1[1] hda1[0] 104320 blocks [2/2] [UU] md1 : active raid1 hdc2[1] hda2[0] 4200896 blocks [2/2] [UU] md2 : active raid1 hdc3[1] hda3[0] 4200896 blocks [2/2] [UU] md3 : active raid1 hdc5[1] hda5[0] 530048 blocks [2/2] [UU] md4 : active raid1 hdc7[1] hda7[0] 70734080 blocks [2/2] [UU] unused devices: <none>
Ces partitions se gèrent ensuite comme tout autre partition: on peut donc facilement les ... formater ! C'est ce que nous faisons à l'aide de la commande /sbin/mkfs.ext3 /dev/md0 et ainsi de suite.
Le basculement du système vers les partitions RAID
Vérification du bon fonctionnement des partition RAID
A cette étape, nous avons toujours une partition système très étroite (256Mo dans mon cas); on va avant toute chose vérifier que les nouvelles partitions sont correctes.
Dans /mnt/ on crée les répertoires slash, var, home, boot, tmp (adaptez en fonction du partitionnement choisi). Montez les partitions /dev/md? sur le point de montage idoine, par exemple:
mount /dev/md0 /mnt/boot mount /dev/md1 /mnt/slash mount /dev/md2 /mnt/var mount /dev/md3 /mnt/tmp mount /dev/md4 /mnt/home
Si vous êtes aussi suspicieux que moi, n'hésitez pas à créer de gros fichiers sur ces espaces disques, /dev/urandom est fait pour cela :-).
Basculement du système
Une fois toutes ces partitions bien vérifiées et bien nettoyées, on va doucement commencer la migration du système.
La commande tar va être la commande magique pour ce faire.
On va commencer par exemple par migrer /home/ vers la parition en RAID.
tar -C /home -clf - .|tar -C /mnt/home -xvf - t, on vérifie que le résultat est correct, que les permissions sont bien préservées, etc.
On poursuit ensuite avec les autres points de montage, comme /boot/ puis /var/...
Lorsqu'on voudra migrer la partition racine (/) on prendra bien soin d'exclure les points de montage déjà migrés (par exemple /tmp/ ou /var/) à l'aide des options -X ou --exclude de tar; au besoin, en cas d'erreur, les détruire.
Sur /mnt/slash, il faut par contre créer les répertoires qui seront par la suite montés par le système, donc /home/ /tmp/ /var/ etc.
Vérifiez soigneusement l'aspect correct de votre migration, assurez-vous de n'avoir pas fait d'erreur lors du passage.
Reconfiguration du système pour le prochain boot
Il faut à présent indiquer au système de lancer le noyau avec les nouvelles partitions et rendre le système amorçable.
Pour cela, on modifie /etc/fstab par exemple en ceci:
/dev/md1 / ext3 errors=remount-ro 0 1 /dev/md0 /boot ext3 defaults 0 2 /dev/md2 /var ext3 defaults 0 2 /dev/md3 /tmp ext3 defaults 0 2 /dev/md4 /home ext3 defaults 0 2 /dev/hda6 none swap sw 0 0 /dev/hdc6 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto user,noauto 0 0
Grâce à cela, le système qui redémarrera saura trouver les nouvelles partitions (d'où l'intérêt de bien mettre dans le noyau le support du RAID !).
Il s'agit ensuite de rendre le système amorçable: en effet, l'amorçe présente sur le disque dur est faite pour lancer le système avec le root filesystem sur /dev/hda.
On édite donc le fichier /etc/lilo.conf et on y ajoute les éléments suivants (au besoin en remplaçant les clefs-valeurs actuelles)
boot=/dev/md0 (...) root=/dev/md1
Exécutez ensuite le programme install-mbr.
Attention ... n'oubliez pas que vous avez actuellement DEUX lilo.conf, /etc/lilo.conf et /mnt/etc/lilo.conf; aussi, toutes les modifications apportées après la migration avec tar doivent-elles être reportées dans le répertoire /mnt/ ...
Et on se lance !
Une fois prêt, on se lance ! Cependant, attention en cas de problème, on conserve encore l'ancienne root partition sur /dev/hdc6 en attendant de valider l'installation correcte de la machine en full root raid (par exemple à l'aide d'une disquette de boot faite avec mkboot avant la migration ... pensez-y).
Ceci fait, testez. Pour moi, cela a marché (presque) du premier coup, j'avais simplement mal positionné les droits du répertoire /tmp/ en raid: on s'aperçoit en effet que ce répertoire à un sticky bit de positionné...
$ ls -ld /tmp/ drwxrwxrwt 3 root root 4096 Sep 30 23:23 /tmp/
On rétablit les choses avec l'option t de chmod (Cf. la page de manuel).
On profite de ce petit incident pour faire le tour du propriétaire et vérifier les droits des répertoires.
Conclusion
Cette petite installation est assez pénible au début mais elle procure un délicieux sentiment d'euphorie lorsque tout fonctionne à merveille à la fin. L'installation à duré, lecture de manuel, tests et vérification, un peu moins d'une journée au total alors que je ne connaissais rien au RAID logiciel auparavant.
Je vérifie régulièrement l'état des disques à l'aide de la commande cat /proc/mdstat, les deux «U» signifient que les deux disques sont opérationnels.
En cas de catastrophe, je crois que les outils compris dans les raidtools2 sont assez incomplets. Je vous indique donc un autre logiciel, appelé mdadm qui permet de synchroniser élégamment un disque vierge avec un périphérique RAID soft en mode dégradé (donc avec plus qu'un seul disque). La commande pour s'en sortir est mdadm /dev/md0 -a /dev/hdc par exemple, mais lisez soigneusement la documentation de mdadm avant toute intervention.
Pour finir, n'oubliez pas: le RAID ne sert qu'à se protéger d'un disque qui grille, il n'offre aucune garantie contre un rm -rf mal placé, aussi, du RAID ne dispense pas de faire des sauvegardes régulières. On le répète encore une fois: le RAID ne remplace pas les sauvergardes.