5. Création de disquette de démarrage élaborée

Contenu de cette section

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 --->|<-- Systeme de fichiers racine compresse -->|
|________________|____________________________________________|
             Disquette

Voici 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 :

Après avoir choisi une de ces possibilités, préparez le périphérique avec :

        dd if=/dev/zero of=PERIPHERIQUE bs=1k count=3000

Cette 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. Mke2fs vous demandera alors si vous voulez vraiment faire cela ; répondez oui.)

Puis montez le périphérique :

        mount -t ext2 PERIPHERIQUE /mnt

Comme 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=1k

Puis, compressez le. Utilisez l'option ``-9'' de gzip pour obtenir une compression maximale :

        gzip -9 rootfs

Cela peut prendre plusieurs minutes. Une fois fini, vous aurez un fichier rootfs.gz qui contient votre système de fichiers racine compressé.

Si vous manquez d'espace disque, vous pouvez combiner dd et gzip :

        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

        ceil(453281 / 1024) = 443
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.

Vous 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.c et est interprété comme suit :

    bits  0-10&nbsp;:   Decalage pour le debut du disque memoire, en
                        blocs de 1024 octets (c'est DEBUTRACINE,
                        calcule ci-dessus)
    bits 11-13&nbsp;:   inutilise
    bit     14&nbsp;:   drapeau indiquant que le disque memoire doit
                        etre charge
    bit     15&nbsp;:   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 (decimal)                           (bits 0-10)
  + 4000 (hexa) Drapeau de chargement du disque memoire (bit    14)
    -----------
  = 41BB (hexa)
  =16827 (decimal)

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/fd0

Ensuite, indiquez à celui-ci où trouver son système de fichiers racine sur la disquette :

        rdev /dev/fd0 /dev/fd0

Vous 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 16827

Enfin, placez le système de fichiers racine sur la disquette derrière le noyau. La commande dd possède une option seek vous 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 :

    4000 (hexa) drapeau de chargement du disque memoire (bit 14)
  + 8000 (hexa) drapeau demandant une invite pour le
                chargement de la disquette racine       (bit 15)
  ------------
  = C000 (hexa)
  =49152 (decimal)
qui sera utilisé dans le calcul pour ``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/fd0

L'option seek n'est pas nécessaire puisque le système de fichiers racine démarre au bloc zéro.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre