INITRD
Section : Manuel du programmeur Linux (
4)
Mise à jour de la version anglaise : 26 novembre 2007
Index
Menu principal
NOM
initrd - Disque RAM initialisé au démarrage du système
CONFIGURATION
/dev/initrd
est un périphérique bloc en lecture-seule, dont le numéro majeur est 1,
et le mineur 250.
Typiquement,
/dev/initrd
appartient à
root.disk
et dispose du mode 0400 (lecture uniquement par le superutilisateur).
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
Les options
« disque RAM » et « Disque RAM initial »
(par exemple
CONFIG_BLK_DEV_RAM=y
et
CONFIG_BLK_DEV_INITRD=y)
doivent être 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
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 contenu 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 pilotes de périphériques 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 exemple
/dev/ram0),
le noyau passe directement à la dernière étape du démarrage.
- 5.
-
Si un fichier exécutable
/linuxrc
est présent sur le système de fichiers racine initial,
ce fichier est exé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 script shell.)
- 6.
-
Si
/linuxrc
n'est pas exécuté ou lorsqu'il se termine,
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 la section NOTES pour le comportement effectif.)
- 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 la section 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érations
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
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 périphérique indiqué ici doit être montable et contenir
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
compilé dans le noyau (ou configuré avec
rdev(8))
ou celui spécifié par une option du chargeur de démarrage.
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
nfsroot.txt
de la documentation du noyau.
Pour plus d'informations sur la configuration de la racine du système
de fichiers, consultez é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é.
Après avoir monté
/proc,
/linuxrc
modifie le périphérique racine en écrivant directement dans les fichiers
/proc/sys/kernel/real-root-dev,
/proc/sys/kernel/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 s'effectue 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 (c'est-à-dire le numéro de pseudo-périphérique NFS)
dans le fichier
/proc/sys/kernel/real-root-dev.
Par exemple, la ligne de commande suivante basculerait
le périphérique racine normal sur
/dev/hdb1 :
echo 0x365 >/proc/sys/kernel/real-root-dev
La ligne suivante modifierait le périphérique racine normal vers un répertoire NFS
/var/nfsroot
d'un serveur local ayant l'adresse IP 193.8.232.7,
ceci sur un système nommé « idefix », 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
Note :
l'utilisation de
/proc/sys/kernel/real-root-dev
pour modifier le système de fichiers racine est obsolète.
Voir le fichier
Documentation/initrd.txt
dans les sources du noyau
ainsi que
pivot_root(2)
et
pivot_root(8)
pour des informations sur les méthodes actuelles pour modifier
le système de fichiers racine.
Utilisation
L'intérêt principal d'implémenter
initrd
était de permettre une configuration modulaire du noyau
lors de l'installation du système.
Un scénario possible d'installation est le suivant :
- 1.
-
Le programme de chargement démarre depuis une disquette
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
le support fourni pour la distribution (CD-ROM, réseau, bande magnétique).
Cette étape peut être effectuée 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.
(À cet instant, le système de fichiers racine n'est pas nécessairement
complet).
- 5.
-
L'exécutable
/linuxrc
configure
/proc/sys/kernel/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'ensemble 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'installation.
Un second scénario sert à l'installation
de Linux sur un réseau constitué de machines configurées différemment.
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 garder
la quantité d'informations spécifiques à un système la plus faible possible.
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 comme l'emplacement du système de fichiers racine, etc.
ne sont pas indispensables lors du démarrage.
Le système chargé depuis
/dev/initrd
peut être interactif et/ou effectuer une détection automatique suivie
d'une vérification de cohérence du système.
Le dernier usage mais non le moindre concerne l'utilisation de
initrd
pour faciliter l'installation de distributions Linux par CD-ROM.
La distribution peut utiliser directement
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.
NOTES
- 1.
-
Avec le noyau actuel, tout système de fichiers reste monté
lors du déplacement de
/dev/ram0
depuis
/
vers
/initrd,
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 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.
VOIR AUSSI
chown(1),
mknod(1),
ram(4),
freeramdisk(8),
rdev(8)
Le fichier
initrd.txt
dans les sources du noyau, la documentation de LILO, celle de LOADLIN,
et la documentation SYSLINUX.
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 31 mai 1998
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 4 initrd ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- CONFIGURATION
-
- FICHIERS
-
- DESCRIPTION
-
- Démarrage du système
-
- Options
-
- Modification de la racine du système de fichiers
-
- Utilisation
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008