Vous avez maintenant un noyau et un système de fichiers compressé. Si vous construisez un disque d'amorce/racine unique, vérifiez que leur taille ne dépasse pas celle du disque. Si vous avez un découpage sur deux disquettes, vérifiez que la taille du système racine ne dépasse pas celle de la disquette.
Il vous faut choisir entre l'utilisation de LILO pour démarrer le
noyau du disque d'amorce et la copie du noyau directement sur la
disquette d'amorce, sans LILO. L'avantage de LILO est la
possibilité de passer des paramètres au noyau, ce qui peut être
nécessaire pour initialiser votre matériel (Regardez le fichier
/etc/lilo.conf sur votre machine. S'il existe et contient
une ligne du type "append=...
", vous avez besoin de passer des
paramètres). Son inconvénient est une complexité accrue dans la
construction du disque d'amorce, ainsi qu'une place occupée sur la
disquette légèrement plus importante. Vous devrez configurer un petit
système de fichier séparé que nous appellerons le système noyau,
où vous transférerez le noyau ainsi que quelques autres fichiers
nécessaires à LILO.
Si vous décidez d'utiliser LILO, continuez la lecture ; si par contre vous voulez copier le noyau directement sur la disquette, passez directement à la section Transfert du noyau sans LILO.
La première chose à faire est de créer un petit fichier de configuration pour LILO. Il doit ressembler à :
boot =/dev/fd0 install =/boot/boot.b map =/boot/map read-write backup =/dev/null compact image = NOYAU label = Bootdisk root =/dev/fd0
Pour la signification de ces paramètres, voir la documentation
utilisateur de LILO. Il vous faudra probablement aussi rajouter une
ligne append=...
à ce fichier, comme dans le fichier
/etc/lilo.conf de votre disque dur.
Sauvez-le en tant que bdlilo.conf
.
Vous devez maintenant créer un petit système de fichier, que nous appellerons système noyau, pour le différencier du système racine.
Tout d'abord, calculez la taille que celui-ci doit faire. Prenez la
taille de votre noyau en blocs (la taille donnée par "ls -l
NOYAU
" divisée par 1024 et arrondie au chiffre supérieur), et
ajoutez 50. Cinquante blocs sont en gros la taille nécessaire aux
i-noeuds ainsi qu'aux autres fichiers. Vous pouvez calculer le nombre
exact si vous voulez, ou simplement utiliser 50. Si vous créez un
ensemble avec deux disques, vous pouvez carrément surestimer l'espace
nécessaire puisque le disque n'est utilisé que par le noyau de toute
manière. Appelez ce nombre BLOCS_NOYAU
.
Mettez une disquette dans le lecteur (pour simplifier, supposons qu'il s'agit de /dev/fd0) et créez le système noyau ext2 dessus :
mke2fs -i 8192 -m 0 /dev/fd0 BLOCS_NOYAU
L'option "-i 8192
" indique que l'on souhaite un i-noeud pour 8192
octets. Ensuite, montez le système, supprimez le répertoire
lost+found
et créez des répertoire dev
et boot
pour
LILO :
mount /dev/fd0 /mnt rm -rf /mnt/lost+found mkdir /mnt/{boot,dev}
Ensuite, créez les périphériques /dev/null et
/dev/fd0. Au lieu de chercher leurs numéros de
périphériques, vous pouvez simplement les copier depuis votre disque
dur avec l'option -R
:
cp -R /dev/{null,fd0} /mnt/dev
LILO a besoin d'une copie de son chargeur d'amorce, boot.b
,
que vous pouvez trouver sur votre disque dur. Il est d'habitude dans
le répertoire /boot
.
cp /boot/boot.b /mnt/boot
Enfin, copiez le fichier de configuration de LILO que vous avez créé précédemment, avec votre noyau. Les deux peuvent être placés dans le répertoire racine :
cp bdlilo.conf NOYAU /mnt
Tout ce dont LILO a besoin est maintenant sur le système noyau, vous
pouvez donc le lancer. Le paramètre -r
de LILO est utilisé pour
installer le chargeur sur une autre racine que la
courante :
lilo -v -C bdlilo.conf -r /mnt
LILO doit s'exécuter sans erreur, après quoi le système noyau devrait ressembler à :
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
Ne vous inquiétez pas si la taille des fichiers n'est pas exactement la même que la votre.
Laissez maintenant le disque dans le lecteur et allez à la section Mise en place du mot disque mémoire.
Si vous n'utilisez pas LILO, transférez le noyau sur le disque
d'amorce avec la commande dd
:
% dd if=NOYAU of=/dev/fd0 bs=1k 353+1 records in 353+1 records out
Dans ce exemple, dd
a écrit 353 enregistrements complets, plus 1
partiel, ce qui signifie que le noyau occupe les 354 premiers blocs de
la disquette. Appelez ce nombre BLOCS_NOYAU
et pensez à
l'utiliser dans la section suivante.
Enfin, indiquez que le périphérique racine doit être la disquette elle-même, et que le noyau doit être chargé en lecture/écriture.
rdev /dev/fd0 /dev/fd0 rdev -R /dev/fd0 0
Attention à bien utiliser un -R
majuscule dans la seconde
commande rdev
.
Le mot disque mémoire situé dans l'image du noyau
permet de spécifier où se trouve le système racine, ainsi que d'autres
options. Le mot peut être lu et modifié avec la commande rdev
, et
sa valeur s'interprète de la manière suivante :
bits 0-10 : Décalage jusqu'au début du disque mémoire, en blocs de 1024 octets bits 11-13 : Inutilisé bit 14 : Drapeau indiquant s'il faut charger un disque mémoire bit 15 : Drapeau pour faire une pause avant de charger le système racine
Si le bit 15 est mis à 1, le noyau vous demandera au moment du démarrage de changer la disquette dans le lecteur. C'est nécessaire si vous utilisez un ensemble de deux disques.
Il y a deux cas, suivant que vous créez une disquette d'amorce/racine unique ou un ensemble "amorce+racine" séparé.
BLOCS_NOYAU
). Le
bit 14 sera mis à 1, et le bit 15 à 0.
Supposons par exemple que vous construisez un disque unique dont le
système racine doit commencer au bloc 253 (valeur décimale). Le mot
disque mémoire devrait valoir 253 (toujours en décimal) avec le bit 14
à 1 et le bit 15 à 0. Pour calculer sa valeur vous pouvez simplement
additionner les valeurs décimales. 253 + (2^14) = 253 +
16384 = 16637. Si vous ne comprenez pas d'où sort ce nombre,
entrez-le dans une calculatrice scientifique et convertissez-le en
binaire.
Après avoir bien calculé la valeur du mot disque mémoire, écrivez-le
avec rdev -r
. Attention à utiliser la valeur décimale. Si
vous utilisez LILO, l'argument de rdev
doit être le chemin
d'accès au noyau monté, c'est à dire /mnt/vmlinuz
; si
vous avez copié le noyau avec dd
, utilisez à la place le nom du
périphérique du lecteur de disquette (c'est à dire
/dev/fd0).
rdev -r NOYAU_OU_LECTEUR_DE_DISQUETTE VALEUR
Si vous avez utilisé LILO, démontez maintenant la disquette.
La dernière étape concerne le transfert du système racine.
dd
et son option seek
, qui indique
combien de blocs sauter :
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOCS_NOYAU
dd if=rootfs.gz of=/dev/fd0 bs=1k
Bravo, vous avez fini ! Vous devriez toujours tester un disque d'amorce avant de le ranger jusqu'à la prochaine urgence ! S'il n'arrive pas à démarrer, continuez à lire.