INITRD(4) Manuel du programmeur Linux INITRD(4)
NOM
NAME
initrd - Disque RAM initialisé au démarrage du système.
DESCRIPTION
Le fichier spécial /dev/initrd est un périphérique bloc en
lecture seule. Ce périphérique /dev/initrd est un disque
RAM qui est initialisé par le chargeur du système avant le
démarrage du noyau. Ainsi, le noyau peut utiliser le con
tenu de ce périphérique bloc pour un démarrage en deux
phases.
Durant la première phase, le noyau démarre et monte la
racine du système de fichiers depuis le contenu de
/dev/initrd (par exemple un disque RAM initialisé par le
chargeur). Durant la seconde phase, les drivers
supplémentaires, et les autres modules sont chargés depuis
le périphérique racine initial. Après le chargement de
ces modules supplémentaires, une nouvelle racine du
système de fichiers est montée à partir d'un périphérique
différent.
DÉMARRAGE DU SYSTÈME
Quand il démarre en utilisant initrd, le système procède
comme suit:
1. Le chargeur place une copie du noyau en mémoire,
ainsi que le contenu de /dev/initrd.
2. Au démarrage du noyau, celui-ci décompresse et
recopie le contenu du périphérique /dev/initrd sur le
disque virtuel /dev/ram0 puis libère la mémoire utilisée
par /dev/initrd.
3. Le noyau monte en lecture-écriture le périphérique
/dev/ram0 comme racine initiale du système de fichiers.
4. Si la racine désirée pour le système de fichiers est
également celle que l'on vient de monter (par ex.
/dev/ram0), le noyau passe directement à la dernière
étape du démarrage.
5. Si un fichier éxécutable /linuxrc est présent sur le
système de fichiers racine initial, ce fichier est
éxécuté avec l'uid 0. (Le fichier /linuxrc doit avoir
la permission d'exécution. Ce peut être n'importe quel
exécutable, y compris un shell-script.)
6. Si /linuxrc n'est pas exécuté ou lorsqu'il se ter
mine, la racine normale du système de fichiers est
montée. (Si /linuxrc se termine en ayant monté d'autres
systèmes de fichiers sur la racine initiale, alors le
comportement du noyau est INDÉTERMINÉ. Voir le para
graphe NOTES pour le comportement effectif.)
Linux 31 Mai 1998 1
INITRD(4) Manuel du programmeur Linux INITRD(4)
7. Si la racine normale dispose d'un répertoire /initrd,
le périphérique /dev/ram0 est déplacé depuis / vers
/initrd. Sinon, si le répertoire /initrd n'existe pas,
le périphérique /dev/ram0 est démonté. (Lors du
déplacement de / vers /initrd, /dev/ram0 n'est pas
démonté, aussi des processus peuvent continuer à
s'exécuter depuis ce périphérique. Si le répertoire
/initrd n'existe pas sur le système de fichiers normal,
et si des processus continuent à s'exécuter depuis
/dev/ram0 lorsque /linuxrc se termine, le comportement
du noyau est INDÉTERMINÉ. Voir le paragraphe NOTES pour
le comportement effectif.)
8. La séquence de démarrage habituelle (invocation de
/sbin/init) est alors effectuée depuis le système de
fichiers normal.
OPTIONS
Lorsque l'on utilise initrd, les options suivantes du
chargeur affectent les opération de démarrage du noyau:
initrd=nom_de_fichier
Indique le fichier à charger comme contenu de
/dev/initrd. Pour LOADLIN, il s'agit d'une option
en ligne de commande. Pour LILO il faut utiliser
cette commande dans le fichier de configuration
/etc/lilo.config. Le fichier mentionné avec cette
option sera typiquement une image compressée par
gzip(1), du système de fichiers.
noinitrd
Cette option désactive le démarrage en deux étapes.
Le noyau se comporte comme si /dev/initrd n'était
pas initialisé. Avec cette option, le contenu de
/dev/initrd, une fois chargé en mémoire sera
préservé. Ce contenu peut alors être n'importe
quelle donnée, et pas uniquement une image d'un
système de fichiers. Néanmoins, le périphérique
/dev/initrd est en lecture seule, et ne peut être
lu qu'une seule fois après le démarrage du système.
root=nom_de_périphérique
Indique le nom du périphérique à utiliser comme
racine normale du système de fichiers. Pour LOAD
LIN, il s'agit d'une option en ligne de commande.
Pour LILO il faut utiliser cette commande dans le
fichier de configuration /etc/lilo.config. Le
périphérique indiqué ici doit être montable et con
tenir un système de fichiers convenable.
MODIFICATION DE LA RACINE DU SYSTÈME DE FICHIERS
Le système de fichiers utilisé comme racine par défaut est
celui qui est compilé dans le noyau (ou configuré avec
rdev), ou celui qui est spécifié par une option du
Linux 31 Mai 1998 2
INITRD(4) Manuel du programmeur Linux INITRD(4)
chargeur. Pour accèder à un système de fichiers monté par
NFS, il faut utiliser les options de démarrage
nfs_root_name et nfs_root_addrs pour la configuration NFS.
Pour plus d'information sur les racines de systèmes de
fichiers montées par NFS, consultez le fichier nfs
root.txt, dans la documentation du noyau. Pour plus
d'informations sur la configuration de la racine du
système de fichiers, voyez également les documentations de
LILO et LOADLIN.
On peut aussi faire effectuer la modification de la racine
normale par l'exécutable /linuxrc. Pour ce faire, le
système /proc doit être monté. Ensuite, /linuxrc modifie
le périphérique racine en écrivant directement dans les
fichiers /proc/sys/kernel/real-root-dev, /proc/sys/ker
nel/nfs-root-name, et /proc/sys/kernel/nfs-root-addrs.
Pour un périphérique physique monté à la racine, le
changement s'effectue en écrivant le numéro de
périphérique du nouveau système de fichiers dans
/proc/sys/kernel/real-root-dev. Pour un système monté par
NFS, la modification se fait en écrivant la configuration
NFS dans les fichiers /proc/sys/kernel/nfs-root-name et
/proc/sys/kernel/nfs-root-addrs puis en inscrivant 0xff
(ie. le numéro de pseudo-périphérique NFS) dans le fichier
/proc/sys/kernel/real-root-dev. Par exemple, la ligne de
commande suivant basculerait le périphérique racine nor
male sur /dev/hdb1:
echo 0x365 >/proc/sys/kernel/real-root-dev
La ligne suivante modifierait le periphérique normal en un
répertoire NFS /var/nfsroot sur un serveur local ayant
l'adresse IP 193.8.232.7, ceci sur un système nommé ide
fix, se trouvant à l'adresse 193.8.232.7:
echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
>/proc/sys/kernel/nfs-root-addrs
echo 255 >/proc/sys/kernel/real-root-dev
UTILISATION
L'intérêt principal d'implémenter initrd était de permet
tre une configuration modulaire du noyau lors de l'instal
lation du système.
Un scénario possible d'installation est le suivant:
1. Le programme de chargement démarre depuis une dis
quette, ou un autre support, avec un noyau minimal (par
exemple les supports pour /dev/ram, /dev/initrd, et le
système de fichiers ext2). Puis charge /dev/initrd
depuis une version compressée avec gzip d'un système de
fichiers initial.
2. L'exécutable /linuxrc détermine ce qui est nécessaire
pour (1) monter le système de fichiers normal (pilotes
de périphériques, systèmes de fichiers) et (2) utiliser
Linux 31 Mai 1998 3
INITRD(4) Manuel du programmeur Linux INITRD(4)
le support fourni pour la distribution (CD-ROM, réseau,
bande magnétique). Cette étape peut être effectué en
interrogeant l'utilisateur, en effectuant des tests de
détection automatique, ou en utilisant une approche
hybride entre les deux.
3. L'exécutable /linuxrc charge les modules nécessaires
depuis le système de fichiers initial.
4. L'exécutable /linuxrc crée et remplit le système de
fichiers racine. (A cet instant, le système de fichiers
racine n'est pas nécessairement complet).
5. L'exécutable /linuxrc configure /proc/sys/ker
nel/real-root-dev, démonte /proc, le système de fichiers
normal, et tout autre système de fichiers qu'il a
éventuellement monté, et se termine.
6. Le noyau monte alors le système de fichiers racine
normal.
7. Maintenant que le système de fichiers est accessible,
le chargeur peut être installé.
8. Le chargeur est configuré pour installer dans
/dev/initrd un système de fichiers disposant de l'ensem
ble des modules qui ont été utilisés pour démarrer le
système. (par exemple un périphérique comme /dev/ram0
peut être modifié, puis démonté, et finalement l'image
est recopiée depuis /dev/ram0 vers un fichier.)
9. Le système est maintenant prêt à redémarrer, et les
tâches supplémentaires d'installation peuvent être
effectuées.
Le principal avantage offert par /dev/initrd dans ce
scénario est de permettre de réutiliser les données de
configuration lors du fonctionnement normal du noyau, sans
nécessiter de choisir un noyau initial, d'utiliser un gros
noyau générique, ou de recompiler le noyau après l'instal
lation.
Un second scénario sert à l'installation de Linux sur un
réseau constitué de machines configurées différement.
Dans ce cas, il peut être préférable de n'utiliser qu'un
nombre minimal de noyaux (voire un seul dans le meilleur
des cas), et de ne stocker qu'une quantité la plus faible
possible d'information de configuration. Ainsi, on crée
un fichier commun contenant tous les modules nécessaires,
et seul le fichier /linuxrc, ou les fichiers qu'il lance,
changent suivant les machines.
Un troisième scénario permet de disposer de disques de
secours les plus confortables possible. Les informations
Linux 31 Mai 1998 4
INITRD(4) Manuel du programmeur Linux INITRD(4)
comme l'emplacement du système de fichiers racines, etc.
ne sont pas indispensables lors du démarrage. Le système
chargé par /dev/initrd peut utiliser des menus de dialogue
et/ou des détections automatiques suivi de vérification de
cohérence du système.
Enfin, et c'est peut-être l'usage le plus important, les
distributions de Linux sur CD-ROM permettent une installa
tion plus aisée. La distributiion peut utiliser directe
ment LOADLIN pour charger /dev/initrd depuis le CD-ROM
sans avoir besoin de créer de disquettes. La distribution
peut également utiliser une disquette de démarrage avec
LILO puis charger un disque ram par l'intermédiaire de
/dev/initrd depuis le CD-ROM.
CONFIGURATION
/dev/initrd est un périphérique bloc en lecture-seule,
dont le numéro majeur est 1, et le mineur 250. Typique
ment, /dev/initrd appartient à root.disk et dispose du
mode 0400 (lecture uniquement par root). Si votre système
Linux n'a pas encore de fichier /dev/initrd, vous pouvez
le créer en utilisant les commandes suivantes :
mknod -m 400 /dev/initrd b 1 250
chown root:disk /dev/initrd
Il faut également que les options "disque Ram" et "Disque
Ram initial" (par exemple CONFIG_BLK_DEV_RAM=y et CON
FIG_BLK_DEV_INITRD=y ) soient compilées directement dans
le noyau Linux pour pouvoir utiliser /dev/initrd. Lors de
l'utilisation de /dev/initrd, le pilote de disque Ram ne
peut pas être chargé en tant que module.
FICHIERS
/dev/initrd
/dev/ram0
/linuxrc
/initrd
VOIR AUSSI
chown(1), mknod(1), /dev/ram(4), freeramdisk(8), rdev(8),
Le fichier initrd.txt dans les sources du noyau, la docu
mentation de LILO, celle de LOADLIN, et la documentation
SYSLINUX.
NOTES
1. Avec le noyau actuel, tout système de fichier reste
monté lors du déplacement de /dev/ram0 depuis / vers /ini
trd, et continue à être accessible. Néanmoins, les entrées
de /proc/mounts ne sont pas mises à jour.
2. Avec le noyau actuel, si le répertoire /initrd n'existe
pas, alors /dev/ram0 ne sera PAS complètement démonté si
/dev/ram0 est utilisé par un processus ou si un système de
Linux 31 Mai 1998 5
INITRD(4) Manuel du programmeur Linux INITRD(4)
fichiers a été monté dessus. Si /dev/ram0 n'est PAS
complètement démonté, alors /dev/ram0 restera chargé en
mémoire.
3. Les utilisateurs de /dev/initrd ne doivent pas compter
sur les comportements décrits dans les deux notes
précédentes. Ces comportements peuvent changer dans les
versions futures du noyau Linux.
AUTEURS
Le code du noyau pour le périphérique initrd a été écrit
par Werner Almesberger <almesber@lrc.epfl.ch> et Hans Ler
men <lermen@elserv.ffm.fgan.de>. Le code de initrd a été
introduit dans le noyau Linux de base dans la version de
développement 1.3.73.
TRADUCTION
Christophe Blaess, 1998.
Linux 31 Mai 1998 6