HOWTO Installer un RAID logiciel et LVM2 sur du RAID1
Un article de Gentoo Linux Wiki.
| Méthodes d'installation • CD Live • Noyau et matériel • Portables et Notebooks • Portage • Système • Réseaux et Services • Serveur X • Logiciels fréquemment utilisés • Autres |
Cet article est une ébauche. Vous pouvez l'aider à s'enrichir en le complétant.
Sommaire |
[modifier] Introduction
Ce Howto se positionne en supplément de la documentation normale d'installation Gentoo x86 handbook pour permettre de créer un système Gentoo pour serveur avec un RAID 0 logiciel et LVM2.
Ce howto parle de deux disques durs IDE qui forment le RAID, ils se situent dans /dev/hda et /dev/hdg. Votre configuration hardware peut bien sur être différente.
Le serveur utilisé pour cet howto est de type 1U avec une carte mère Intel S845WD-E et un controleur Promise Fasttrack RAID integré. Depuis les noyaux 2.6 il n'y a plus ataraid, pdcraid dans la version vanilla, il vaut mieux utiliser softraid. Ce serveur a aussi un lecteur de cd-rom depuis lequel je veux qu'il soit possible de démarrer. Comme il n'est pas possible de démarrer des disques durs connectés au contrôleur IDE Promise. J'ai dû choisir la disposition suivante - HDD1 /dev/hda, CDROM /dev/hdb, HDD2 /dev/hdg (secondary Promise IDE interface).
[modifier] Configuration initiale
- Demarrez avec le LiveCD comme d'habitude, et chargez le module softraid pour le raid 1:
modprobe raid1
- Partitionnez vos disques durs et sélectionnez pour chaque partition le type Linux raid autodetect:
fdisk /dev/hda fdisk /dev/hdg
J'ai choisi de créer les partitions suivantes:
primary part1 -> boot 100MB primary part2 -> swap 512MB primary part3 -> root 1GB primary part4 -> LVM2 for /usr /var /opt /tmp /home XGB
Configuration alternative:
primary part1 -> boot 100MB primary part2 -> LVM2 for swap, / pour les autres systèmes de fichiers comme /var /home faites vous le souhaitez.
Pour selectionner une partition de type Linux raid autodetect, dans fdisk pressez la touche t puis rentrez le code hexadécimal fd.
# La description des partitions doit recembler à ceci: Device Boot Start End Blocks Id System /dev/hda1 1 13 104391 fd Linux raid autodetect /dev/hda2 14 76 506047+ fd Linux raid autodetect /dev/hda3 77 259 1469947+ fd Linux raid autodetect /dev/hda4 260 19457 154207935 fd Linux raid autodetect
Device Boot Start End Blocks Id System /dev/hdg1 1 13 104391 fd Linux raid autodetect /dev/hdg2 14 76 506047+ fd Linux raid autodetect /dev/hdg3 77 259 1469947+ fd Linux raid autodetect /dev/hdg4 260 19457 154207935 fd Linux raid autodetect
- N'oubliez pas de rendre les deux partition 1 bootable. A partir de l'option a dans fdisk (toogle a bootable flag), içi partition 1. Sans quoi vous ne pourrez booter sur votre système.
- Nous pouvons configurer les partitions du premier disque dur et copier la table de partition sur le deuxième disque avec la commande suivante:
sfdisk -d /dev/hda | sfdisk /dev/hdb
- Nous devons créer les devices correspondants au raid avant de le lancer :
mknod /dev/md0 b 9 0 mknod /dev/md1 b 9 1 mknod /dev/md2 b 9 2 mknod /dev/md3 b 9 3
- Creation du raid arrays pour le mirroring de partition:
Linux doit avoir au moins une partition qui n'est pas du type RAID pour booter, ca peut être une partition en RAID 1 puisqu'il fait une copy exacte du disque. Avec le RAID 1, le disque 1 et le disque 2 seront exactement les mêmes et ainsi les disques sont montable séparement comme un disque normal.
Linux ne peut pas booter depuis un RAID 0 logiciel car seul noyau a les drivers qui sont nécessaire pour lire les partitions RAID au démarrage donc le bootloader ne sera pas capable d'accéder à ces derniers. Une partition de type RAID qui utilise l'entrelacement de disques ne peut pas être monté sans le logiciel qui gère le raid, sans lui toutes les partitions sont illisibles. Ce n'est pas un problème avec le RAID1 (Mirroir) car les disques contiennent toutes les informations pour chaques partitions et indindividuellement elless sont accessibles comme sur un disque partitionné. A cause de ce fonctionnement et pour se préserver en cas problème, et afin de pouvoir remettre le système rapidement, nous allons créer un RAID 1 pour la partition /boot. Ceci nous permettant d'avoir une copie de sauvegarde des noyaux et des fichiers importants.
| Note: Si vous avez un contrôleur RAID comme un VIA intégré à la carte mère ou une simple carte PCI RAID n'essayez pas de créer votre RAID sur ce contrôleur. Si vous le faites,vous pouvez recevoir un message d'erreur "Device or Resource busy" au moment ou vous ferez la commande mdadm --create. |
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/hda1 /dev/hdg1 mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/hda2 /dev/hdg2 mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/hda3 /dev/hdg3 mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/hda4 /dev/hdg4
| Note: Les commandes précédante créent un espace de swap en RAID 1(/dev/md1). Ceci est recommendé pour un maximum de fiabilité. Si vous préférez la performance, il n'y a aucune raison de mirrorer l'espace de swap. Le kernel additionnera l'espace de swap si vous spécifiez plusieurs partitions de swap avec la même priorité. Voir la page TLDP swapping on RAID pour des explications sur toutes ces options. |
- NB! Attendez que l'initialisation de l'ensemble soit effectué:
# Exécutez "watch -n1 'cat /proc/mdstat'" Pour voir l'avancement
livecd root # watch -n1 'cat /proc/mdstat'
Personalities : [raid1]
md3 : active raid1 hdg4[1] hda4[0]
154207808 blocks [2/2] [UU]
[>....................] resync = 4.0% (6240576/154207808) finish=45.5min speed=54148K/sec
md2 : active raid1 hdg3[1] hda3[0]
1469824 blocks [2/2] [UU]
md1 : active raid1 hdg2[1] hda2[0]
505920 blocks [2/2] [UU]
md0 : active raid1 hdg1[1] hda1[0]
104320 blocks [2/2] [UU]
unused devices: <none>
| Note: Si vous obtenez de faibles performancs de resynch. Ajustez les valeurs dans /proc/sys/dev/raid/speed_limit_max et/ou /proc/sys/dev/raid/speed_limit_min. |
- Créez le fichier mdadm.conf pour référence sur la configuration du RAID:
| File: /etc/mdadm.conf |
# Copiez ceci dedans DEVICE /dev/hda* DEVICE /dev/hdg* ARRAY /dev/md0 devices=/dev/hda1,/dev/hdg1 ARRAY /dev/md1 devices=/dev/hda2,/dev/hdg2 ARRAY /dev/md2 devices=/dev/hda3,/dev/hdg3 ARRAY /dev/md3 devices=/dev/hda4,/dev/hdg4 MAILADDR root@localhost |
Ou
mdadm --detail --scan > /etc/mdadm.conf
Si vous renseigner la variable MAILADDR dans les scripts d'initialisation, mdmadm sera en mode monitor et un courriel sera envoyé chaque fois qu'une erreur au niveau du RAID sera detectée.
[modifier] Configuration des systèmes de fichiers
- Création de la partition de boot
mke2fs -j /dev/md0
- Création du swap
mkswap /dev/md1 swapon /dev/md1
- Création de système de fichiers racine
- J'ai choisi ReiserFS pour 2 raisons:
- semble s'exécuter plus rapidement que ext3
- fonction de redimensionnement à chaud des partitions qui va très bien avec lvm
- J'ai choisi ReiserFS pour 2 raisons:
mkreiserfs /dev/md2
- Nous avons besoin de charger les modules LVM2:
modprobe dm-mod
- Nous devons mettre un filtre de phériphériques dans le fichier /etc/lvm/lvm.conf pour éviter d'avoir des erreurs en s'occupant des phériphériques RAID.
En outre, nous ne voulons pas scanner les lecteurs CD, DVD, etc..
mkdir -p /etc/lvm echo 'filter=["a|dev/md3|", "r/.*/"]' >/etc/lvm/lvm.conf
- Scan pour les partitions LVM:
vgscan # il ne trouve rien...c'est ok
- Créez le volume physique sur md3:
pvcreate /dev/md3
- Verifiez qu'il a été créer proprement:
pvdisplay
S'il n'est pas affiché /dev/md3 mais /dev/hda4 ou /dev/hdg4, vous avez probablement mal rentré le filtre de phériphériques au dessus.
NOTE: Ceci ne marche pas pour moi, "pvdisplay /dev/md3" marche. --DR 06-09-21
- Créez vg (volume group):
vgcreate vg /dev/md3
- Vérifiez que vg a bien été créé:
vgdisplay vg
Si le filtre de phériphérique n'est pas correct, vous aurez l'erreur "Found Duplicate PV", et vg ne sera pas créé.
- Créez les partitions nécessaires sur le LVM:
# Ignorez l'erreur "/etc/lvm/backup: fsync failed: Invalid argument" à partir de maintenant # Vous pourrez redimmensionner un partition plus tard, comme vous le voulez lvcreate -L10G -nusr vg lvcreate -L5G -nhome vg lvcreate -L5G -nopt vg lvcreate -L10G -nvar vg lvcreate -L2G -ntmp vg
- Créez le système de fichier:
mkreiserfs /dev/vg/usr mkreiserfs /dev/vg/home mkreiserfs /dev/vg/opt mkreiserfs /dev/vg/var mkreiserfs /dev/vg/tmp
- Vous pouvez aussi utiliser la méthode Bash ;)
for i in usr home opt var tmp; do mkreiserfs /dev/vg/$i; done;
[modifier] Montage
Créons les points de montage nécessaire puis montons les système de fichiers:
mount /dev/md2 /mnt/gentoo/ cd /mnt/gentoo mkdir boot usr home opt var tmp mount /dev/md0 boot for i in `ls /dev/vg`; do mount /dev/vg/$i $i; done;
[modifier] Stage 3
- Allez dans la nouvelle racine :
cd /mnt/gentoo
- Recupérez le stage3 sous forme de tarball et mettez le dans /mnt/gentoo puis décompressez le :
tar -xvjpf stage?-*.tar.bz2
[modifier] Chrooting
- Copiez les infos nécessaire à la résolution de nom :
cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
- Copiez la configuration du RAID :
cp -L /etc/mdadm.conf /mnt/gentoo/etc/mdadm.conf
- Montez proc :
mount -t proc none /mnt/gentoo/proc
- Chrootez-vous dans la nouvelle racine :
chroot /mnt/gentoo /bin/bash env-update source /etc/profile
[modifier] Configuration du système
Suivez les instructions du Gentoo Handbook instructions et essayez de vous rappeller les choses suivantes :
- compilez le support du raid1 dans le kernel, il se trouve dans device-drivers->Multi-device support (RAID and LVM)
- compilez le support du Device Mapper dans le kernel (Pour lvm2-2.00.08, compiler LVM2 comme un module ne fonctionne pas), il se trouve dans device-drivers->Multi-device support (RAID and LVM).
- Installez quelques outils pour les utilisateurs :
emerge lvm2 emerge raidtools emerge mdadm emerge reiserfsprogs
Voici quelques fichiers de configuration du système :
| File: /etc/fstab |
/dev/md0 /boot ext3 noauto,noatime 1 2 /dev/md2 / reiserfs noatime 0 0 /dev/md1 none swap sw 0 0 /dev/vg/usr /usr reiserfs noatime 0 0 /dev/vg/var /var reiserfs noatime 0 0 /dev/vg/opt /opt reiserfs noatime 0 0 /dev/vg/tmp /tmp reiserfs noatime 0 0 /dev/vg/home /home reiserfs noatime 0 0 /dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 |
Comme il est mentionné avant, il n'est pas nécessaire d'utiliser le raid0 pour les partitions de swap. Créez deux partitions de swap et configurez votre fstab comme ceci: "/dev/hda2 none swap sw,pri=0" Copiez cette ligne et utilisez /dev/hdg2 pour l'autre partition de swap. Regardez cette page pour plus d'informations this page. --DA
NB! Configurez /etc/lvm/lvm.conf pour des demarrages rapides (autrement la vérification des phériphériques au démarrage le ralentira):
| File: /etc/lvm/lvm.conf |
#Remplissez le comme ceci
devices {
scan=[ "/dev/" ]
filter=[ "a|/dev/md/|" "r|/dev/.*/|" ]
}
|
[modifier] Bootloader installation et configuration
- Installation de Grub:
emerge grub
- Lancement du shell de grub:
grub --no-floppy
- Puis exécutez:
#installation du MBR sur /dev/hda root (hd0,0) setup (hd0) #installation du MBR sur /dev/hdg device (hd0) /dev/hdg root (hd0,0) setup (hd0)
NB! Si un de vos disques durs échoue votre bios doit être configuré pour démarrer depuis l'autre disque dur.
- Créez le fichier /boot/grub/grub.conf
default 0 timeout 8
title=Gentoo 2.6.16 root (hd0,0) kernel /boot/kernel-2.6.16-gentoo-r7 root=/dev/md2
NB! Si vous utilisez genkernel vous devez aussi ajouter quelques options à passer au kernel (dolvm2 and lvmraid=/dev/xxx,...) et vous assurez que vous compilez le kernel en utilisant genkernel avec l'option -lvm2. Si vous utilisez les LABEL au lieu des noms de phériphérique, vous devez aussi utiliser l'option --disklabel de genkernel.
- Compilez le kernel avec le support de lvm, du raid logiciel, dmraid et disklabel en utilisant genkernel
emerge genkernel genkernel --install --disklabel --lvm2 --dmraid all
- fichier pour genkernel /boot/grub/grub.conf
default 0 timeout 8 title Gentoo Linux 2006.0 [Default] genkernel-x86_64-2.6.16-gentoo-r7 root (hd0,0) kernel /kernel-genkernel-x86_64-2.6.16-gentoo-r7 root=/dev/rd/0 init=/linuxrc real_root=LABEL=gt_root dolvm2 lvmraid=/dev/md1,/dev/md2,/dev/md3,/dev/md4 initrd /initramfs-genkernel-x86_64-2.6.16-gentoo-r7
[modifier] Redemarrer le système après l'installation
umount /mnt/gentoo/var umount /mnt/gentoo/usr umount /mnt/gentoo/home umount /mnt/gentoo/tmp umount /mnt/gentoo/opt umount /mnt/gentoo/proc umount /mnt/gentoo/boot umount /mnt/gentoo vgchange -an reboot
[modifier] Version courte
umount /mnt/gentoo/*
Ignorez les erreurs
umount /mnt/gentoo vgchange -an reboot
[modifier] Problèmes
Voir (en) Recovering_RAID_and_LVM
