Configuration matérielle et logicielle

Ce module portera sur la configuration des composants qui ont besoin du Noyau ainsi que les outils logiciels.

État : {a_reli}

Retour au document principal

Pré-requis

1. Le RAID logiciel

RAID est l'acronyme pour «Redundant Array of Inexpensive Disks» et a été initialement conçu pour combiner des disques durs ensemble. RAID peut soit augmenter la vitesse ou la fiabilité selon le niveau de RAID utilisé.

Les différents RAID

http://ivanov69.com/images/Raid.jpg

Disques de rechange

Si des disques de rechange sont configurés, ils seront utilisés dans la matrice du RAID, dès que l'un des disques de la matrice sera en panne .

Noyau et composant logiciel

Le raid logiciel est traité par les modules du Noyau suivant :

RAID0

raid0.o

RAID1

raid1.o

RAID4 ou RAID5

raid5.o

Le paquet raidtools permettra d'avoir ces outils commun :

Outils

Description

/sbin/lsraid

exécuter des requêtes sur les disque du raid

/sbin/mkraid

Créer un périphérique md depuis les instructions donnés dans /etc/raidtab

/sbin/raidstart et raidstop

démarre ou stop le périphérique md

Une fois qu'un périphérique a été créer avec succès, les informations peuvent être trouver dans : /proc/mdstats

Démarrer depuis un périphérique RAID racine (exercice)

1.Créer 2 nouvelles partitions de la même taille que le périphérique racine de type Linux raid autodetect.

On peut faire une nouvelle partition racine plus petite en vérifiant l'espace réel utilisé sur le périphérique racine actuel

df -h /
Filesystem    Size    Used     Avail    Use%   Mounted on
/dev/hda7     286M    71M      201M      27%     /

Utiliser fdisk pour créer les nouvelles partitions (exemple /dev/hda14 et /dev/hda15), redémarrer.

2.Configurer un RAID 1 logiciel sur ces partitions

/etc/raidtab

raiddev      /dev/md0
             raidlevel 1
             nr-raid-disks 2
             nr-spare-disks 0
             chunk-size 4
             persistent-superblock 1
             device /dev/hda14
             raid-disk 0
             device /dev/hda15
             raid-disk 1

Utiliser l'outil raidtools pour créer la grappe et la démarrer :

mkraid /dev/md0
raidstart /dev/md0

Créer un système de fichier EXT2 sur le nouveau périphérique et monter celui ci sur /mnt/sys:

mke2fs /dev/md0
mkdir /mnt/sys
mount /dev/md0 /mnt/sys

3.Copier tous les fichiers du périphérique racine actuelle vers le nouveau périphérique racine :

(tar lcvf - /) | (cd /mnt/sys; tar xvf -)

L'option l de tar est une instruction pour rester sur le même système de fichier.

4.Préparer le redémarrage

Le script mkinitrd va lire /etc/raidtab et /mnt/sys/etc/fstab pour personnaliser un initrd.

Éditer /mnt/sys/etc/fstab et changer le périphérique racine en /dev/md0 tout comme le système de fichier en ext2.

/mnt/sys/etc/fstab

/dev/md0    /     ext2  defaults    1    1   

Créer l'initrd et appeler le initrd-raid.img

mkinitrd --fstab=/mnt/sys/etc/fstab /boot/initrd-raid.img $(uname -r)

Décompressez /boot/initrd-raid.img et montez le sur un périphérique boucle pour vérifier que Linuxrc va insérer les bon modules.

Reconfigurer LILO/GRUB pour changer les lignes suivantes :

Simple lilo.conf:

image=/boot/vmlinuz-2.4.22-1.2115.nptl
          initrd=/boot/initrd-raid.img
          read-only
          root=/dev/md0
          label=linux-raid

2. Configuration de LVM

Management de volume logique (LVM)

Le framework du management de volume logique permet de regrouper les périphériques bloc différent (Disques, partitions, RAID ...) ainsi qu' un seul appareil plus grand, le groupe de volumes (VG).

Le dispositifs individuels utilisés pour former un groupe de volumes sont appelés volumes physiques (PV).

Les volumes physiques une fois regroupés dans un groupe de volumes perdent leur caractère individuel.

En revanche, le groupe de volumes entier est divisé en étendues physiques (PE) de taille fixe (4 Mo par défaut) à partir de laquelle les volumes logiques (LV) sont créés. Un volume logique peut être considéré comme une partition.

http://ivanov69.com/images/lvm.jpg

Noyau et composant logiciel

Le module LVM du noyau est lvm-mod.o. Les outils logiciels sont installés par le paquet LVM qui prévoit en particulier /sbin/vgscan. Cette commande va démarrer l'environnement LVM par scanne de tous les groupes de volumes et construit le fichier /etc/lvmtab ainsi que les bases de données dans /etc/lvmtab.d qui sont utilisés par tous les autre outils LVM.

Principaux outils LVM

PV tools:

pvcreate, pvmove, pvchange, pvdisplay, pvscan ...

VG tools:

vgcreate, vgremove, vgchange, vgdisplay, vgscan ...

LV tools:

lvcreate, lvextend, lvreduce, lvremove, lvchange, lvscan ...

Nous n'aurons pas besoin d'utiliser ou de connaître tous les outils ci-dessus. Nous allons plutôt mettre l'accent sur les différents composants de LVM (comme représenté sur le schéma) et les commandes nécessaires pour créer ces composants: pvcreate, vgcreate et lvcreate.

Exemple:

Créer un groupe de volume appelé VolumeA avec 3 volumes physiques ( 3 partitions dans ce cas ) et créer un volume logique appelé lv0 de taille initial de 150 Mb.

1.Démarrer vgscan pour créer le fichier /etc/lvmtab

2.Créer 3 nouvelles partitions (/dev/hda16,/dev/hda17,/dev/hda18) de 100 Mb chacune. Assurez vous de marquer les partitions en type 8e (Linux LVM). Puis redémarrer.

3.Préparer les volume physiques

pvcreate /dev/hda16
pvcreate /dev/hda17
pvcreate /dev/hda18 

4.Créer un groupe de volume appelé volumeA avec les volume physiques ce dessus:

vgcreate volumeA /dev/hda16 /dev/hda17 /dev/hda18

Cela créera un répertoire appelé /dev/volumeA/. La taille par défaut de 4 Mo sera utilisés, on peut changer cela avec l'option -s.

5.Créer un volume logique appelé lv0 de taille de 150 Mb sur ce groupe de volume

lvcreate -L 150M -n lv0 volumeA

Ceci va créer un périphérique bloc /dev/volumeA/lv0

6.Faire un système de fichier sur lv0 et monter celui ci dans /mnt/lvm

mkfs -t ext3 /dev/volumeA/lv0
mkdir /mnt/lvm
mount /dev/volumeA/lv0 /mnt/lvm

Ce ne serait pas très différent des autres types de partitions si elle n'avait pas la possibilité de changer la taille du volume logique à tout moment.

Première vue, comment réduire le volume logique lv0 existant de 150 Mb avec l'outil esfsadm installé par le paquet lvm.

umount /mnt/lvm
e2fsadm -L 25 /dev/volumeA/lv0

Informations

L'option -L se réfère à la taille en mégaoctets. C'est le cas avec la plupart des outils LVM. L'option -l peut être utilisée pour spécifier les extensions logiques (LE) à la place. La taille par défaut d'une LE est de 4MB.

La section suivante montre comment ajouter un nouveau volume physique (un disque) à un groupe de volumes et montre comment un volume logique existant peut être agrandie en incluant une étendue physique disponible dans le groupe de volume lui-même. Une fois cela fait, l'outil e2fsadm va redimensionner le système de fichiers à travers le volume logique.

Extension du groupe de volume avec un dispositif en RAID 0

Jusqu'ici nous avons :

VG = /dev/hda16 + /dev/hda17 + /dev/hda18 et nous voulons ajouter un périphérique en RAID0 a celui ci.

1.Créer 3 partitions de plus (/dev/hda19, /dev/hda20 et /dev/hda21) de taille de 50Mb et de type "Linux Raid autodetect"(fd) - Redémarrez!

2. Éditer /etc/mtab et ajouter le périphérique RAID0 suivant :

raiddev /dev/md1
           raid-level 0
           nr-raid-disks 3
           nr-spare-disks 0
           persistent-superblock 1
           chunk-size 4
           device /dev/hda19
           raid-disk 0
           device /dev/hda20
           raid-disk 1
           device /dev/hda21
           raid-disk 2

3.Démarrer le périphérique raid:

mkraid /dev/md1
raidstart /dev/md1

4. Ajouter ce périphérique au groupe de volume volumeA

Avant d'ajouter le périphérique au groupe de volume lancer pvscan pour voire quel sont les volumes physiques actif. Noter que /dev/md1 n'est pas listé.

Nous allons maintenant préparer /dev/md1 comme un PV (volume physique):

pvcreate /dev/md1

Quand on lance pvscan la sortie devrait ressembler a ceci. Noter que /dev/md1 est maintenant listé.

pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ACTIVE PV "/dev/md1" is in no VG [305.62 MB]
pvscan -- ACTIVE PV "/dev/hda10" of VG "volumeA"[96 MB / 0 free]
pvscan -- ACTIVE PV "/dev/hda11" of VG "volumeA"[96 MB / 0 free]
pvscan -- ACTIVE PV "/dev/hda12" of VG "volumeA"[96 MB / 84 MB free]
pvscan -- total:4[611.46 MB] /in use:3[305.83 MB] /in no VG:1 [305.62MB]

Ensuite, nous allons ajouter le périphérique /dev/md1 au groupe de volume volumeA

vgextend volumeA /dev/md1

A ce stade, le groupe de volumes a quatre dispositifs:

VolumeA = /dev/hda10 + /dev/hda11 + /dev/hda12 + /dev/md1

Nous pouvons prendre 50 Mo de /dev/md1 et les ajouter à lv0 (démonter le premier volume)

lvextend -L +50 /dev/volumeA/lv0 /dev/md1

Le volume original LV0 avait 150 méga-octets. Le drapeau + en face de la taille demandée permet d' ajouté 50 Mo sur le volume logique, il fait environ 200 méga-octets. Mais nous n'avons pas étendu le système de fichiers à travers l'ensemble du volume logique pour le moment.

La sortie de lvscan affiche 80 Mo disponibles. Ceci correspond au 25 Mb redimensionné précédemment avec e2fsadm plus les 50 Mb ajouté par lvextend ci-dessus.

lvscan
lvscan -- ACTIVE "/dev/volumeA/lv0" [80 MB]
lvscan -- 1 logical volumes with 80 MB total in 1 volume group
lvscan -- 1 active logical volume

La prochaine commande va étendre le système de fichier a 80Mb:

e2fsadm -L 80 /dev/volume/lv0

Si vous remontez ce volume dans /mnt/lvm vous pourrez voire le nouvelle espace disponible avec df.

Attention redémarrage

Les outils LVM nécessite le module lvm-mod.o et dans notre cas le métapériphérique /dev/md1. Vous avez besoin de créer a un nouveau initrd avec mkinitrd ou ajouter les lignes suivantes au nouveau initrd:

insmod /lib/lvm-mod.o

raidautorun /dev/md1

Le groupe de volume est alors activé avec vgscan a partir du script rc.sysinit.

Démarrage a partir d'un volume logique racine

Comme pour le RAID logiciel, nous allons étudier certaines questions que nous devons prendre en compte lors l'utilisation de LVM sur le périphérique racine. Premièrement, assurez-vous que le volume que nous avons créé est déjà monté. Si ce n'est pas alors faite le :

mount /dev/volumeA/lv0 /mnt/lvm

Ensuite nous archivons le périphérique racine comme nous l'avons fait avec le RAID :

tar clvf - / | (cd /mnt/lvm/; tar xvf -)

Éditer /mnt/lvm/etc/fstab et entrer :

/dev/volumeA/lv0    /     ext2     defaults    0      1

Éditer /etc/lilo.conf ou /etc/grub.conf pour ajouter une nouvelle entrée ou le Noyau pointe sur le nouveau volume périphérique racine. Pour un Noyau 2.4.22 un entrée additionnel dans /etc/grub.conf ressemble a ceci :

title lvm-root
      root (hd0,1)
      kernel /vmlinuz-2.4.22 ro root=LABEL=/
      initrd /initrd-2.4.22-lvm.img 

Tout ce que nous avons besoin est l'intrd initrd-2.4.22-lvm.img .

Encore une fois, nous allons lancer mkinitrd avec –-fstab=<fstab> lequel nous allons utiliser pour que le script lise notre nouveau fichier /mnt/lvm/etc/fstab.

Nous testons ceci :

mkinitrd --fstab=/mnt/lvm/etc/fstab /boot/initrd-lvm.img $(uname -r)

Si nous montons l'initial ram disk nous pouvons voire ce qui se passe en regardant le script Linuxrc.

linuxrc

echo "Loading lvm-mod.o module"
insmod /lib/lvm-mod.o
echo Creating block devices
mkdevices /dev
echo Scanning logical volumes
vgscan
echo Activating logical volumes
vgchange -ay
----couper---

3. Gravure de CD et Linux

Détection du matériel

Les outils disponibles en ligne de commande pour graver des CD suppose que le graveur de CD est un appareil SCSI. Cependant, la plupart des graveurs de CD moins chers sont les périphériques IDE. Le Noyau 2.4 permet de contourner ceci en fournissant un module ide-scsi.o pour gérer les périphériques de gravure de CD.

Si vous lancer cdrecord avec l'option -scanbus vous verrez que l'outil va chercher un périphérique SCSI.

Si le graveur de CD est attaché comme un master secondaire (/dev/hdc) nous verrons l'entrer suivante dans /etc/modules.conf qui activera le module ide-sci pour ce périphérique.

/etc/modules.conf

options ide-scsi=/dev/hdb
options ide-cd ignore=hdb
alias scd0 sr_mod
pre-install sg modprobe ide-scsi # load ide-scsi before sg
pre-install sr_mod modprobe ide-scsi # load ide-scsi before sr_mod
pre-install ide-scsi modprobe ide-cd # load ide-cd before ide-scsi

Le peripherique sera vu comme /dev/scd0 et peut etre ajouté a /etc/fstab avec lequel il peut être monté.

La commande suivante affiche le matériel qui a été correctement détecté:

cdrecord -scanbus
Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 J�rg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
cdrecord: Warning: using inofficial libscg transport code version (schily - Red Hat-scsi-linux-sg.c-1.75-RH '@(#)scsi-linux-sg.c        1.75 02/10/21 Copyright 1997 J. Schilling').
scsibus0:
       0,0,0 0) 'PHILIPS ' 'CDRW48A ' 'P1.3' Removable CD-ROM
       0,1,0 1) *
       0,2,0 2) *
       0,3,0 3) *
       0,4,0 4) *
       0,5,0 5) *
       0,6,0 6) *
       0,7,0 7) *

Graver une image ISO

L'outil cdrecord permet d'enregistrer des données ou des fichiers audio.

cdrecord [ general options ] dev=device [ track options ] track1...trackn

Le périphérique

De la sortie de cdrecord -scanbus nous allons utiliser le périphérique dev=0,0,0 pour nos exemples.

Options général

speed            Spécifie la vitesse de gravure (ex: speed=8)  

-eject           éjecte le CD quand l'enregistrement est terminé

-multisession    démarre plusieurs sessions d'enregistrement  

options de piste

-data          La piste contient des données 

-audio         La piste est un fichier audio (.au,.wav ou .cdr)

Enregistrement de données

cdrecord -v speed=2 dev=0,0,0 -data cd_image.iso

Enregistrement audio

cdrecord -v speed=2 dev=0,0,0 -audio *.wav

Enregistrement Mixte

cdrecord -v speed=2 dev=0,0,0 -data cd_image.iso -audio *.wav

Système de fichier ISO9660 et gravure de CD

Issue de Wikipedia :

ISO 9660, une norme publiée par l'Organisation internationale de normalisation, définit un système de fichiers pour les médias CD-ROM. Il vise à soutenir les différents systèmes d'exploitation tels que Microsoft Windows,Mac OS et les systèmes qui suivent les spécifications Unix, afin que les données peuvent être échangées.

Niveaux et restrictions :

Il y a différents niveaux à cette norme.

Niveau 1 Les noms de fichiers sont limités à huit caractères avec une extension de trois caractères, lettres majuscules,chiffres et soulignent; profondeur maximale est de huit des répertoires

Niveau 2 Les noms de fichier peuvent être jusqu'à 31 caractères

Niveau 3 Les fichiers autorisés à être fragmentés (principalement pour permettre l'écriture par paquets, ou d'enregistrement de CD supplémentaire).

Extensions :

Il existe des extensions commun à la norme ISO 9660 pour faire face aux limitations. Rock Ridge soutient la préservation des permissions Unix / Linux et  ASCII ; Joliet prend en charge les noms enregistrés dans Unicode, ce qui permet presque tous les caractères à être utilisé, même à partir de scripts non latins; El Torito permet que le CD soit amorçable. L' ISO 13490 est essentiellement comme l'ISO 9660 avec le soutien de multisession.

Création d'une image CD

Stockez toutes les données qui doivent être copiés dans un répertoire séparé (sauvegardé par exemple /). Nous avons ensuite nécessité de créer une image iso de ce répertoire comme suit:

mkisofs -o baskups-image.iso backups/

Vérifier le fichier image par montage comme un périphérique boucle :

mount -o loop backups-image.iso /mnt

ls /mnt

umount /mnt

Enfin, gravez le CD avec cdrecord. De la sortie de cdrecord-scanbus sur le page précédente on voit que le graveur de CD est considéré comme dev = 0,0,0 nous avons donc:

cdrecord -v dev=0,0,0 backups-image.iso

4. CD-ROM de démarrage

Pour permettre au BIOS le démarrage à partir d'un CD-ROM, une extension de la spécification ISO-9660 appelé El Torito a été écrit en 1995 par Phoenix Technologies et IBM. Cette spécification utilise l 'ISO-9660 et fera que le BIOS permette le démarrage a partir d' une image disque à l'aide d'une émulation de disquette ou de disque dur.

La norme ISO -9660 spécifie qu'un CD-ROM doit contenir un nombre quelconque de descripteurs de volume. La spécification El Torito ajoute qu' un tel descripteur est appelé Boot Record.

le Boot record pointe vers un catalogue de démarrage qui peut contenir un liste des entrées de démarrage. Le catalogue de démarrage contient une entrée par défaut qui pointe vers une image de démarrage disquette ou disque dur.

http://ivanov69.com/images/bootcd.jpg

L'outil mkisofs peut prendre une image de démarrage (disquette ou disque dur) et ajouter l'image dans le répertoire racine du CD-ROM (habituellement /boot).

Utiliser l'emulation de disque

En supposant que nous créons le CD dans un répertoire appelé CD-root, nous pouvons créer une image disque de démarrage avec dd.

dd if=/path/to/boot/image of=<CD-root>/boot/boot.img

L'image ISO est alors créé avec la commande suivante:

mkisofs -b boot/boot.img -c boot/boot.catalog -o boot-cd.iso .

Alternative sans l'émulation de disque

Il est possible de faire un CD bootable en utilisant le chargeur de démarrage ISOLINUX.

ISOLINUX est un chargeur de démarrage pour Linux/i386 qui fonctionne sur l'ISO 9660/El Torito dans un mode sans émulation. Cela évite la nécessité de créer une image d'émulation de disque avec espace limité (pour l'émulation de disquette) ou des problèmes de compatibilité (pour l'émulation de disque dur.)

Le paquet syslinux va installer le chargeur de démarrage isolinux.bin. En fonction de la distribution, il peut être trouvé dans /usr/lib/syslinux/ ou /usr/share/syslinux/.

Vous devez ensuite créer un CD amorçable.

1.Faire un répertoire dans /tmp

mkdir /tmp/boot-cd

2.Copier les fichiers nécessaires

cp /usr/share/syslinux/isolinux.bin    /tmp/boot-cd
cp /boot/vmlinuz-<full-version>     /tmp/boot-cd/vmlinuz
cp /boot/initrd-<full-version>.img    /tmp/boot-cd/initrd

3.Éditer le fichier /tmp/boot-cd/isolinux.cfg avec les éléments suivant :

DEFAULT linux
LABEL linux
KERNEL vmlinuz
APPEND initrd=initrd root=/dev/???

4.Créer l'image ISO avec l'option -no-emul-boot

cd /tmp/boot-cd/

mkisofs -o ../boot-cd.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

Copier un CD de démarrage

Dans cette section nous supposons que nous avons déjà un CD-ROM bootable. Par exemple le premier disque d'un coffret de distribution Linux.

Insérez le CD bootable dans le lecteur de CD-ROM. Ne pas monter le disque!

Puis simplement écrire :

dd if=/dev/cdrom of=distro-inst1.iso

Cela va créer une image ISO du disque appelé distro-inst1.iso et peut être écrite dans un disque vierge avec cdrecord.

5. Configurer un périphérique PCMCIA

L'utilitaire cardmgr surveille les fentes PCMCIA. Il va scanner le fichier /proc/devices a la recherche d'une entrée pcmcia. Si cette entrée n'est pas là, cardmgr sera pas utilisé.

Afin d'obtenir que le Noyau écrive une entrée dans /proc/devices, il est nécessaire de charger le module correspondant. Seulement quand le support du Noyau sera activé cardmgr fonctionnera correctement. les noms des modules sont conservés dans les fichiers de configuration suivants:

Pour les distributions de type RedHat: /etc/sysconfig/pcmcia

Pour les distributions de type Debian: /etc/pcmcia.conf

Le module principal est appelé pcmcia_core et utilise deux autres modules appelés yenta_socket et DS.

On peut démarrer cardmgr en ligne de commande après avoir insérer les modules précédents :

modprobe pcmcia_core

modprobe yenta_socket

modprobe ds

cardmgr

cardmgr[18772]: watching 2 sockets

Mais la meilleure solution est d'utiliser le script rc fournit par le paquet pcmcia-cs:

/etc/rc.d/init.d/pcmcia restart

Le fichier de configuration avec une base de donnée des périphériques disponibles (modems, carte wifi, carte mémoire ...) est appelé /etc/pcmcia/config.

Pour obtenir des informations au sujet de votre carte pcmcia, utilisé l'utilitaire cardctl. Mettre la carte dans le slot pcmcia et lancer :

cardctl info

....Couper....

PRODID_1="Xircom"

PRODID_2="CardBus Ethernet 10/100 + Modem 56"

PRODID_3="CBEM56G"

....Couper....

On peut vérifier que cette carte se trouve dans /etc/pcmcia/config. Le tableau suivant montre les informations pertinentes au sujet de cette carte, en particulier le module nécessaire xircom_cb .

/etc/pcmcia/config - section relative à la carte numérisée

card "Xircom CBEM56G-100 CardBus 10/100 Ethernet + 56K Modem"

version "Xircom", "*", "CBEM56G"

bind "xircom_cb" to 0