Le noyau Linux accepte maintenant deux systèmes de fichiers pour des
disques racines copiés automatiquement dans des disques mémoire. ext2
a été ajouté quelque part entre les versions 1.1.17 et
1.1.57 (j'ignore quand exactement). Si vous avez un noyau
correspondant, cherchez dans /usr/src/linux/drivers/block/ramdisk.c
la chaîne "ext2
". Si elle n'y est pas, alors il vous faudra utiliser
un système de fichiers minix
, et en conséquence, la commande mkfs
.
Pour créer un système de fichiers sur disquette sur mon système, je lance la commande suivante :
mke2fs /dev/fd0
La commande mke2fs
détectera automatiquement l'espace disponible
et ne requiert donc pas de paramètres supplémentaires.
((NdT: vérifiez à deux fois avant de lancer un
mke2fs
. mke2fs est pratiquement irréversible))
Une manière simple de tester le résultat est alors d'essayer de monter
la disquette. Si c'est du ext2
, alors :
mount -t ext2 /dev/fd0 /<repertoire vide>
devrait marcher.
Dans la plupart des cas, il devrait être possible de copier votre noyau courant et d'amorcer la disquette à partir de celui-ci. Par contre il y a des cas où vous voudrez construire une disquette à part.
Une des raisons est la taille. Le noyau est l'un des fichiers les plus gros dans un système minimal, donc si vous voulez créer une disquette d'amorce/racine, vous devrez réduire la taille du noyau autant que possible. Le noyau accepte maintenant le changement de disquette après l'amorçage et avant de monter la racine, donc il n'est plus nécessaire de mettre le noyau et le reste sur la même disquette ; dans ce cas ces commentaires ne s'appliquent pas.
Il y a deux moyens de réduire la taille du noyau :
make zImage
Référez-vous à la documentation du source du noyau
pour une description à jour sur la compilation de noyaux compressé.
((NdT: et aussi le Kernel-HOWTO)). Note : le source du noyau est
habituellement dans /usr/src/linux
.Ayant déterminé l'ensemble minimum des options à inclure dans un noyau, il se peut que vous en ayez plusieurs à ajouter. L'utilisation la plus fréquente d'une disquette amorce/racine est probablement l'examen et la récupération d'un système de fichiers corrompu. Pour cela il se peut que vous ayez besoin de support du noyau.
Par exemple, si vos archives sont toutes mises sur bande en utilisant Ftape pour accéder à votre lecteur de bande, et si d'aventure vous perdiez votre disque racine, vous seriez dans l'impossibilité de récupérer vos archives. Vous auriez alors à réinstaller Linux et Ftape, puis tenter de lire et extraire vos précieuses archives.
Il est probablement souhaitable de garder une copie de la même version des utilitaires d'archivages utilisés pour écrire les archives pour ne pas perdre du temps et de l'énergie à installer des versions ne pouvant pas les lire.
Bonne idée : ajouter à votre noyau de disquette amorce/racine
quelque support I/O que vous ayez ajouté à votre noyau pour
l'archivage. Notez toutefois que le module Ftape
(tout du
moins la version que j'ai) est assez gros et ne tiendra pas sur une
disquette amorce/racine. Vous pouvez le mettre sur une disquette
utilitaires, comme décrit ci-dessous dans la section "Ajouter des
disquettes utilitaires".
La procédure pour compiler le noyau est décrite dans la documentation
qui vient avec le noyau. Elle est simple à suivre, donc commencez
par regarder dans /usr/src/linux
. Note : si vous avez des
problèmes de compilation du noyau, vous ne devriez peut-être pas
essayer de créer des disquettes de amorce/racine de toute façon.
Un répertoire /dev
contenant tous les fichiers spéciaux pour
tous les périphériques utilisés par le système est obligatoire pour
tout système Linux. Le répertoire lui-même est un répertoire normal,
et peut être créé par la commande mkdir
. Les
fichiers périphériques spéciaux doivent par contre être créés
par la commande mknod
.
Il y a un raccourci heureusement : plutôt que de faire un zillion de
mknod
, copiez le contenu du répertoire /dev
et supprimez ce
dont vous n'avez pas besoin. Le seul impératif est de copier les
fichiers en utilisant l'option -R
. Ceci copiera le répertoire
sans tenter de copier le contenu des fichiers. Notez que si vous
utilisez la minuscule -r
, le résultat sera très différent puisque
vous copiez le contenu de tous vos périphériques (disques, lecteurs de
cd). Ou tout du moins la partie pouvant tenir sur une disquette. Donc
attention et utilisez :
cp -dpR /dev /mnt
en supposant que la disquette soit montée sur /mnt
. Les
options dp
font que les liens symboliques sont copiés comme des
liens, plutôt que, assez peu judicieusement, leur contenu ; et que les
attributs du fichier sont préservés, en particulier les droits
d'accès, et les groupes et propriétaires.
Si vous voulez créer les fichiers de périphérique sur la disquette à la
force du poignet, faites un ls -l
pour afficher les numéros de
périphérique mineurs et majeurs et créez-les sur disquette avec mknod
.
Beaucoup de distributions incluent un script MAKEDEV
dans le
répertoire /dev
. Il peut être utilisé pour créer les fichiers
périphériques mais il est probablement plus facile de copier le /dev
,
particulièrement dans le cas de disques de secours.
Il se peut qu'avec simplement /dev
, /proc
et
/etc
vous puissiez
amorcer un système Linux - je ne sais pas, je n'ai pas essayé. Par
contre un ensemble minimum raisonnable de répertoires consiste en :
Requis pour les entrées/sorties avec les périphériques
Utilisé par la commande ps
Répertoire des fichiers de configuration système
Utilitaires exécutables faisant partie du système
Bibliothèques partagées
Répertoire sur lequel monter les partitions à maintenir
Applications et utilitaires supplémentaires
Notez que l'arborescence présentée ici est valable uniquement pour la disquette racine. Voyez le Linux File System Standard pour des informations plus précises sur la façon de structurer un système Linux "standard".
Quatre de ces répertoires se créent très simplement :
/dev
comme décrit ci-dessus dans la section "Périphériques"./proc
doit juste exister, donc il suffit de le créer avec
mkdir
./mnt
et /usr
sont (aussi) des
répertoires où des
partitions sont montées, utilisés plus tard quand le système
amorce/racine tournera. Donc, il faut aussi juste les créer.Les trois répertoires restants sont décrits dans les sections qui suivent.
Ce répertoire doit contenir un certain nombre de fichiers de configuration. Sur la plupart des systèmes, ceux-ci peuvent être divisés en trois groupes :
rc
, fstab
, passwd
.Les fichiers secondaires peuvent être identifiés avec la commande :
ls -trul
qui donne les fichiers dans l'ordre inverse de date de dernier
accès. Les fichiers non utilisés ne sont évidemment pas nécessaires
pour une disquette racine.
Sur mes disquettes racines, j'ai réduit le nombre de fichiers à 15. Ceci réduit le travail à trois ensembles de fichiers :
rc le script de demarrage systeme
fstab liste des partitions a monter
inittab parametres pour le processus init, le
premier processus lance lors du demarrage.
passwd liste des utilisateurs
shadow contient les mots de passes
((NdT: dans un systeme avec les shadow-passwords))
Ceux-ci devraient être raccourcis sur les systèmes sécurisés pour
éviter de de copier les mots de passe des utilisateurs hors du
système, et de telle manière que lorsque vous amorcez depuis la
disquette, les "login" non désirés soient rejetés avec toute
la vigueur nécessaire.A part ceux-ci, je n'ai eu réellement qu'à adapter deux fichiers, et ce qu'ils doivent contenir est étonnement court.
rc
devrait contenir :
#!/bin/sh
/etc/mount -av
/bin/hostname amorce_racine
et vous n'avez pas besoin en réalité d'utiliser hostname
.
Même mount
n'est nécessaire que
pour monter /proc
pour ps
; Linux tournerait sans.
((NdT: vous voudrez
probablement ajouter quelque chose comme
/bin/loadkeys /etc/fr-latin1.fr
pour avoir un clavier
français. La présence de mount
dans /etc
comme celle de
loadkeys
dans /bin
et celle de fr-latin1.map
dans /etc
n'est pas très conforme au "Linux FileSystem
Standard". Sur votre partition disque, ce serait mal)).fstab
devrait contenir :
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
Je ne crois pas que la première ligne soit nécessaire non plus, mais
il se trouve que si je l'enlève, mount
ne montera pas /proc
. Inittab devrait être correct tel quel, à moins que vous ne vouliez
vous assurer que des utilisateurs ne puissent se loger via le
port série. Pour empêcher cela, mettez en commentaire les lignes de
/etc/getty
qui ont des ttys
ou des ttyS
à la fin de
la ligne.
Quoiqu'il en soit, il n'est pas totalement inutile de laisser les/des
tty
((tout court)) de façon à ce que vous puissez quand même vous
loger vous.
Pour le reste, copier simplement tous les fichiers texte dans le
répertoire /etc
ainsi que tous les exécutables dont vous
n'êtes pas sûr qu'ils ne soient pas utiles. Comme modèle, voir
l'exemple dans la section "Exemple de liste (ls-lR) d'une disquette
amorce/racine".
C'est un endroit pratique pour mettre les utilitaires supplémentaires
dont vous avez besoin pour effectuer les opérations de base ; des
utilitaires comme ls
, mv
, cat
, dd
, etc...
Voir la section intitulée "Exemple de liste (ls-lR) d'une disquette
amorce/racine" pour la liste des fichiers que j'ai mis dans mon
répertoire /bin
. Vous remarquerez peut-être que je n'ai mis
aucun des utilitaires requis pour récupérer depuis une archive, comme
cpio
, tar
,
gzip
, etc... En effet, je les mets sur une disquette utilitaires pour
économiser l'espace de la disquette amorce/racine. Une fois que j'ai
démarré avec celle-ci, elle est copiée dans le disque mémoire laissant
le lecteur de disquette libre pour monter une autre disquette (la
disquette utilitaires donc). Je la monte habituellement dans /usr
.
La création d'une disquette utilitaire est décrite ci-dessous dans la section intitulée "Ajouter des disquettes utilitaires".
Deux bibliothèques doivent être présentes pour lancer de nombreux programmes sous Linux :
ld.so
libc.so.4
Si elles ne sont pas trouvées dans votre répertoire /lib
, alors le
système est dans l'impossibilité de démarrer. Si vous avez de la chance
peut-être verrez-vous un message vous expliquant pourquoi.
Elles doivent être présentes dans un répertoire existant,
/lib
. Remarquez que libc.so.4
peut être un lien symbolique
vers une bibliothèque avec un numéro de version inclus dans le nom du
fichier. Si vous faites :
ls -l /lib
vous verrez quelque chose comme :
libc.so.4 -> libc.so.4.5.21
Dans ce cas, la bibliothèque libc dont vous avez besoin est
libc.so.4.5.21
.
(( NDT : naturellement il se peut même que ce soit un fichier
différent de libc.so.4
comme libc.so.5
))
Pour que l'amorce/racine soit utile, il faut qu'elle soit amorçable. Pour cela, la manière la plus simple (la seule ?) est d'installer un lanceur, qui est un morceau de programme contenu dans la disquette secteur 0, cylindre 0. Voir la section "Disquette d'amorce" pour un aperçu du déroulement du démarrage.
LILO est un lanceur disponible dans n'importe quel site ftp Linux. Il vous permet de déterminer entre autres~:
C'est un endroit pratique pour fixer certaines options de démarrage du noyau. Mon fichier de configuration LILO racine/amorce, utilisé avec LILO 0.15 est :
boot = /dev/fd0
install = ./mnt/boot.b
map = ./mnt/lilo.map
delay = 50
message = ./mnt/lilo.msg
timeout = 150
compact
image = ./mnt/vmlinux
ramdisk = 1440
root = /dev/fd0
Remarquez que boot.b, lilo.msg et le noyau doivent d'abord avoir été copiés sur la disquette en utilisant une commande comme :
cp /boot/boot.b ./mnt
Si ça n'est pas fait, et si le disque dur n'est pas disponible, LILO ne fonctionnera pas correctement à l'amorçage. Mauvaise idée : créer une disquette de secours qui a besoin du disque dur pour se lancer.
Je lance lilo avec la commande :
/sbin/lilo -C <fichier configuration>
Je le lance dans répertoire qui contient le répertoire mnt
sur lequel
j'ai monté la disquette ((NdT: i.e. /
). Ceci signifie que j'indique à
LILO d'installer un lanceur sur le périphérique d'amorçage
(/dev/fd0
dans ce cas), pour lancer un noyau dans le
répertoire racine de la disquette.
J'ai aussi spécifié que je voulais le périphérique racine comme
étant la disquette et qu'un disque mémoire serait créé avec 1440 1K
blocs, la taille d'une disquette. Comme j'avais créé un système de
fichiers ext2
sur la disquette, ceci complète les conditions requises
pour que Linux puisse copier au démarrage le périphérique d'amorce dans
un disque mémoire.
Les caractéristiques du disque virtuel en mémoire sont décrites dans la section intitulée "Disque virtuel en mémoire et disquettes racines" plus haut.
Ajoutons aussi que le paramètre "single" fait que Linux ne démarrera
qu'en mode simple utilisateur. Ceci peut être utile pour empêcher
les utilisateurs de se connecter à partir des ports série.
((NdT: voir telinit
et /etc/inittab
pour en savoir
plus sur le mode simple utilisateur)).
J'utilise aussi des commandes DELAY
, MESSAGE
et
TIMEOUT
, de
telle sorte que lorsque je lance le disque, LILO me donne la
possibilité d'entrer des options en ligne de commande si je le
désire. Je n'en n'ai pas besoin pour l'instant, mais qui sait de quoi
demain sera fait ? Je peux avoir besoin de monter une autre partition
ou de monter un système de fichiers en lecture seule.
Le fichier message que j'utilise contient :
Linux - Disquette d'amorce/racine
=================================
Entrer une ligne de commande de la forme :
vmlinux [ options ]
Si rien n'est entre, Linux sera charge avec les
parametres par defaut apres 15 secondes.
Cela permet simplement de me rappeler des options que j'ai choisies.
Les lecteurs sont invités à consulter la documentation de LILO, avec
attention, avant d'installer quoi que ce soit. Il est assez facile de
détruire des partitions si vous utilisez le mauvais paramètre boot
=
. Si vous manquez d'expérience, NE lancez PAS LILO à moins que vous
compreniez tout, et que vous ayez vérifié trois fois vos paramètres.
Puisque nous parlons de LILO, voici une chose à ajouter : si vous avez un problème avec LILO sur un disque contenant DOS, vous pouvez toujours remplacer le secteur d'amorçage par le lanceur DOS en utilisant la commande DOS :
FDISK /MBR
où MBR signifie "Master Boot Record". Remarquez que certains puristes sont en désaccord avec cette interprétation et peut-être à raison, mais en tout cas, ça marche.
LILO a plusieurs options utiles à garder en tête lors de la création de disquettes d'amorce.
DELAY = nn
dans votre
fichier de configuration LILO, alors ce dernier s'arrêtera pour vous
permettre de choisir le noyau à charger, ainsi que
sur la même ligne toute option.
Par exemple :
vmlinux aha152x=0x340,11,3,1 ro
passera les paramètres aha152x
suivants au pilote du disque aha152x
SCSI (sous réserve que ce pilote ait été inclus dans le noyau lors de
sa compilation), et demandera à ce que la racine soit montée en
lecture seule (ro
).lock
" en ligne de commande. Cette option demande à
LILO de conserver la ligne de commande entrée comme la ligne de
commande par défaut à utiliser pour tous les prochains
amorçages. C'est particulièrement utile lorsque vous avez un
périphérique qui ne peut pas être sélectionné automatiquement. En
utilisant lock
, vous pouvez éviter d'avoir à entrer les paramètres
du périphérique à chaque démarrage.
Par exemple :
vmlinux aha152x=0x340,11,3,1 root=/dev/sda8 ro lock
APPEND
. Elle vous permet de donner une
liste de paramètres de périphériques. C'est une alternative à
lock
. Remarque : toutes les parties de la forme
<nom>=<valeur>
DOIVENT être mises entre guillemets. Par
exemple :
APPEND = "aha152x=0x340,11,3,1"
DELAY
. Elle oblige LILO à faire
une pause d'un certain nombre de dixièmes de seconde, et permet à
l'utilisateur d'interrompre l'amorçage automatique de la ligne de
commande par défaut pour en entrer une autre.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