Page suivante Page précédente Table des matières
5. Création de disquette de démarrage élaborée
5.1 Aperçu
Les sections précédentes de ce document couvrent les bases de la création de disquettes amorce et racine, et s'appliquent à quasiment tous les noyaux jusqu'aux versions actuelles (2.0, le dernier noyau stable).
Les noyaux 1.3.48 et ultérieurs contiennent une réécriture substantielle du code du disque mémoire, rajoutant d'importantes fonctionnalités nouvelles. Ces noyaux peuvent automatiquement détecter de systèmes de fichiers compressés, les décompresser et les charger dans le disque mémoire au démarrage. Les systèmes de fichiers racine peuvent être placés sur un second disque, et à partir du noyau 1.3.98 environ, les disques mémoires peuvent être agrandis dynamiquement.
Ensemble, ces nouvelles fonctionnalités permettent aux disques d'amorce de contenir substantiellement plus de données qu'ils ne pouvaient le faire jusqu'alors. Avec de la compression, un disque de 1722 Ko contient désormais jusqu'à 3.5 Mo de fichiers. Comme tous ceux qui ont créés des disques d'amorce le savent, on passe beaucoup de temps à élaguer l'ensemble des fichiers et à trouver des versions réduites des fichiers pour que le tout tienne sur un petit système de fichiers. Les nouvelles possibilités font que cela n'a plus une importance cruciale.
Malheureusement, ces nouvelles fonctionnalités compliquent quelque peu la création de disquettes d'amorce les exploitant. Pour construire un système de fichiers compressé sur une disquette, celui-ci doit tout d'abord être créé sur un autre périphérique, puis compressé et transféré sur la disquette. Cela implique donc des étapes supplémentaires.
Schématiquement, il faut créer un système de fichiers compressé pour la racine, copier le noyau sur la disquette, dire à celui-ci où trouver le système de fichiers racine, puis copier celui-ci sur la disquette.
Voici un schéma simple en ASCII montrant la structure de la disquette :
|<--- zImage --->|<-- Système de fichiers racine compressé -->| |________________|____________________________________________| DisquetteVoici les étapes pour la création de la disquette amorce :
5.2 Création du système de fichiers racine
Le système de fichiers racine est créé en gros de la même manière qu'indiqué dans la section 4.1 de ce document. La différence principale vient du fait que vous ne pouvez plus créer le système de fichiers directement sur la disquette, mais que vous devez le créer sur un périphérique différent de plus grande taille que l'espace de la disquette qu'il va occuper.
Choix du périphérique
Pour construire un tel système de fichiers pour la racine, vous avez besoin d'un périphérique en plus de taille suffisante. Vous avez plusieurs choix :
- Si vous disposez d'une partition inutilisée sur un disque dur suffisamment grande (plusieurs megaoctets), c'est la solution la plus simple. Sinon, si vous avez suffisamment de mémoire vive physiquement présente, vous pouvez arrêter le swap et construire le système de fichiers dans la partition de swap. Cependant, la plupart des gens n'ont pas de partition en trop et ne peuvent pas non plus se permettre de retirer le swap, donc ...
- Utilisez un périphérique loopback. Un tel périphérique permet de faire passer un fichier présent sur un système de fichier existant pour un périphérique. Pour utiliser des périphériques loopback, vous devez utiliser des programmes
mountetumountspécialement modifiés. Vous pouvez les trouver sur :où X représente la lettre de la dernière modification. Si vous n'avez pas de fichiers spéciaux correspondants aux périphériques loopback (ftp://ftp.win.tue.nl:/pub/linux/util/mount-2.5X.tar.gz/dev/loop0,/dev/loop1, etc) sur votre système, vous devrez d'abord les créer. Les commandes :vous permettront cela. Vous n'avez sans doute besoin que demknod /dev/loop0 b 7 0 mknod /dev/loop1 b 7 1 mknod /dev/loop2 b 7 2 ...loop0. Une fois ces binaires spéciaux demountetumountinstallés, créez un fichier temporaire sur un disque dur de taille suffisante (par exemple,/tmp/fsfile). Vous pouvez utiliser une commande du type :pour créer un fichier de nnn blocs. Utilisez le nom du fichier à la place de PERIPHERIQUE ci-dessous. Quand vous lancez une commandedd if=/dev/zero of=/tmp/fsfile bs=1k count=nnnmount, vous devez y ajouter l'option ``-o loop'' pour lui signaler qu'il doit utiliser un périphérique loopback. Par exemple :monteramount -o loop -t ext2 /tmp/fsfile /mnt/tmp/fsfile(par périphérique loopback) sur le point de montage/mnt. Un ``df'' vous le confirmera.- La dernière possibilité est d'utiliser le disque mémoire (PERIPHERIQUE =
/dev/ram0ou/dev/ramdisk). Dans ce cas, la mémoire est utilisée pour simuler un disque. Le disque mémoire doit être assez grand pour contenir un système de fichiers de la taille nécessaire. Cherchez dans votre fichier de configuration pour LILO (/etc/lilo.conf) une ligne de la forme :qui détermine la quantité de mémoire vive à allouer. La valeur par défaut est 4096 Ko.RAMDISK_SIZE = nnnAprès avoir choisi une de ces possibilités, préparez le périphérique avec :
dd if=/dev/zero of=PERIPHERIQUE bs=1k count=3000Cette commande remplit de zéros le périphérique. Cette étape est importante, car le système de fichiers sur le périphérique étant compressé ultérieurement, toutes les parties inutilisées doivent être mises à zéro pour obtenir la meilleure compression possible.
Ensuite, créez le système de fichiers avec :
mke2fs -m 0 PERIPHERIQUE(Si vous utilisez un périphérique loopback, le fichier que vous utilisez doit être fourni à la place de PERIPHERIQUE.
Mke2fsvous demandera alors si vous voulez vraiment faire cela ; répondez oui.)Puis montez le périphérique :
mount -t ext2 PERIPHERIQUE /mntComme précédemment, copiez les fichiers dans
/mnt, comme expliqué à la section 4.1.
Compression du système de fichiers
Une fois copiés les fichiers sur le système de fichiers racine, vous devez copiez celui-ci, puis le compresser. Tout d'abord, démontez le :
umount /mnt(Techniquement, vous pouvez copiez le système de fichiers sans le démonter auparavant, mais cela peut être dangereux, et c'est de toute manière une mauvaise habitude.)
Puis, copiez les données depuis le périphérique dans un fichier. Appelez le fichier
rootfs:dd if=PERIPHERIQUE of=rootfs bs=1kPuis, compressez le. Utilisez l'option ``
-9'' degzippour obtenir une compression maximale :gzip -9 rootfsCela peut prendre plusieurs minutes. Une fois fini, vous aurez un fichier
rootfs.gzqui contient votre système de fichiers racine compressé.Si vous manquez d'espace disque, vous pouvez combiner
ddetgzip:dd if=PERIPHERIQUE bs=1k | gzip -9 > rootfs.gz
5.3 Calcul de la taille
A présent, vérifiez la taille de l'ensemble afin de vérifier que le noyau ainsi que le système de fichiers racine tiendront sur la disquette. Un ``
ls -l'' vous montrera combien d'octets occupent chacun ; divisez par 1024 pour obtenir le nombre de blocs dont chacun aura besoin. Pour les fractions de bloc, arrondissez au nombre supérieur.Par exemple, si le noyau occupe 453281 octets, il nécessitera
blocs et occupera donc les blocs 0 à 442 sur la disquette. Le système de fichiers racine commencera au bloc 443. Notez ce numéro de bloc pour les commandes à suivre ; appelez le DEBUTRACINE.ceil(453281 / 1024) = 443Vous devez indiquer au noyau où il peut trouver le système de fichiers racine sur la disquette. A l'intérieur de l'image du noyau se trouve un mot pour le disque mémoire qui indique où se trouve la racine, ainsi que d'autres options. Le mot est défini dans
/usr/src/linux/arch/i386/kernel/setup.cet est interprété comme suit :bits 0-10 : Décalage pour le début du disque mémoire, en blocs de 1024 octets (c'est DEBUTRACINE, calculé ci-dessus) bits 11-13 : inutilisé bit 14 : drapeau indiquant que le disque mémoire doit être chargé bit 15 : drapeau indiquant qu'il faut demander l'insertion de la disquette(Si le bit 15 est positionné à 1, on vous demandera au démarrage de placer une nouvelle disquette dans le lecteur. C'est nécessaire pour un kit de démarrage en deux disquettes, décrit ci-dessous dans la section ``Fabriquer un kit sur deux disques''. Pour l'instant, considérons le à 0).
Si le système de fichiers racine doit commencer au bloc 443, le mot du disque mémoire est :
1BB (hexa) 443 (décimal) (bits 0-10) + 4000 (hexa) Drapeau de chargement du disque mémoire (bit 14) ----------- = 41BB (hexa) =16827 (décimal)Ce mot doit être positionné dans l'image du noyau en utilisant la commande ``
rdev -r'' dans la section suivante.
5.4 Copie des fichiers sur la disquette
Vous êtes maintenant prêt à créer la disquette d'amorce. Tout d'abord, copiez le noyau :
dd if=zImage of=/dev/fd0Ensuite, indiquez à celui-ci où trouver son système de fichiers racine sur la disquette :
rdev /dev/fd0 /dev/fd0Vous devez maintenant positionner le mot du disque mémoire dans l'image du noyau située sur la disquette. On donne sa valeur au mot en utilisant la commande ``
rdev -r''. En prenant la valeur calculée ci-dessus dans la section intitulée ``Calcul de la taille'', cela donne :rdev -r /dev/fd0 16827Enfin, placez le système de fichiers racine sur la disquette derrière le noyau. La commande
ddpossède une optionseekvous permettant d'indiquer combien de blocs sauter avant d'écrire :dd if=rootfs.gz of=/dev/fd0 bs=1k seek=443(Le nombre 443 correspond à DEBUTRACINE provenant de la section ``Calcul de la taille'' précédente.)
Attendez que l'écriture soit finie sur la disquette, et vous êtes prêt.
5.5 Fabriquer un kit sur deux disques
Si vous avez besoin de plus de place, vous pouvez fabriquer un kit d'amorce sur deux disques. Dans ce cas, la première disquette contiendra uniquement le noyau, et la seconde le système de fichiers racine compressé. Dans cette configuration, votre système racine compressé peut faire jusqu'à 1440 Ko.
La création d'un ensemble de deux disquettes d'amorce est réalisée de manière sensiblement identique aux étapes précédemment décrites. Tout d'abord, vous devez positionner le drapeau de demande de disquette mémoire à 1 pour indiquer au noyau qu'il faut demander la seconde disquette et attendre son insertion. Le système racine commence à l'octet 0 de la second disquette.
Comme indiqué dans la précédente section ``Calcul de la taille'', le drapeau indiquant qu'il faut demander l'insertion de la disquette (bit 15) doit être positionné à 1, et le décalage du disque mémoire sera zéro. Dans notre exemple, le calcul donnera cette fois :
qui sera utilisé dans le calcul pour ``4000 (hexa) drapeau de chargement du disque mémoire (bit 14) + 8000 (hexa) drapeau demandant une invite pour le chargement de la disquette racine (bit 15) ------------ = C000 (hexa) =49152 (décimal)rdev -r'' comme précédemment.Suivez les instructions de ``Copie des fichiers sur la disquette'' indiquées ci-dessus, mais après avoir lance la commande ``
rdev -r'', insérez une nouvelle disquette dans le lecteur et lancez la commande :dd if=rootfs.gz of=/dev/fd0L'option
seekn'est pas nécessaire puisque le système de fichiers racine démarre au bloc zéro.
Page suivante Page précédente Table des matières