initrd(4) Device Drivers Manual initrd(4) NOM initrd - Disque RAM initialise au demarrage du systeme CONFIGURATION /dev/initrd est un peripherique bloc en lecture seule, de numero majeur 1 et de numero mineur 250. Typiquement, /dev/initrd appartient a root:disk et dispose du mode 0400 (lecture uniquement par le superutilisateur). Si votre systeme Linux ne comporte pas encore de fichier /dev/initrd, vous pouvez le creer 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 etre compilees 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 etre charge en tant que module. DESCRIPTION Le fichier special /dev/initrd est un peripherique bloc en lecture seule. Ce peripherique est un disque RAM qui est initialise par le chargeur du systeme avant le demarrage du noyau. Ainsi, le noyau peut utiliser le contenu de /dev/initrd pour un demarrage en deux phases. Durant la premiere phase, le noyau demarre et monte la racine du systeme de fichiers depuis le contenu de /dev/initrd (par exemple un disque RAM initialise par le chargeur). Durant la seconde phase, les pilotes de peripheriques supplementaires et les autres modules sont charges depuis le peripherique racine initial. Apres le chargement de ces modules supplementaires, une nouvelle racine du systeme de fichiers est montee a partir d'un peripherique different. Demarrage du systeme Quand il demarre en utilisant initrd, le systeme procede comme suit : (1) Le chargeur place une copie du noyau en memoire, ainsi que le contenu de /dev/initrd. (2) Au demarrage du noyau, celui-ci decompresse et recopie le contenu du peripherique /dev/initrd sur le disque virtuel /dev/ram0 puis libere la memoire utilisee par /dev/initrd. (3) Le noyau monte en lecture/ecriture le peripherique /dev/ram0 comme racine initiale du systeme de fichiers. (4) Si la racine desiree pour le systeme de fichiers est egalement celle que l'on vient de monter (par exemple /dev/ram0), le noyau passe directement a la derniere etape du demarrage. (5) Si un fichier executable /linuxrc est present sur le systeme de fichiers racine initial, ce fichier est execute avec l'uid 0. Le fichier /linuxrc doit avoir la permission d'execution. Il peut etre n'importe quel executable valable, y compris un shell-script. (6) Si /linuxrc n'est pas execute ou lorsqu'il se termine, la racine normale du systeme de fichiers est montee. Si /linuxrc se termine en ayant monte d'autres systemes de fichiers sur la racine initiale, alors le comportement du noyau est INDETERMINE. Consultez le paragraphe NOTES pour le comportement effectif. (7) Si le systeme de fichiers racine normal dispose d'un repertoire /initrd, le peripherique /dev/ram0 est deplace depuis / vers /initrd. Sinon, si le repertoire /initrd n'existe pas, le peripherique /dev/ram0 est demonte. Lors du deplacement de / vers /initrd, /dev/ram0 n'est pas demonte, aussi des processus peuvent continuer a s'executer depuis ce peripherique. Si le repertoire /initrd n'existe pas sur le systeme de fichiers normal, et si des processus continuent a s'executer depuis /dev/ram0 lorsque /linuxrc se termine, le comportement du noyau est INDETERMINE. Consultez le paragraphe NOTES pour le comportement effectif. (8) La sequence de demarrage habituelle (par exemple, invocation de /sbin/init) est alors effectuee depuis le systeme de fichiers normal. Options Lorsque l'on utilise initrd, les options suivantes du chargeur affectent les operations de demarrage du noyau : initrd=nom_de_fichier Indique le fichier a 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 mentionne avec cette option sera typiquement une image compressee par gzip(1) du systeme de fichiers. noinitrd Cette option de demarrage desactive le demarrage en deux etapes. Le noyau se comporte comme si /dev/initrd n'etait pas initialise. Avec cette option, une fois charge en memoire, le contenu de /dev/initrd sera preserve. Ce contenu peut alors etre n'importe quelle donnee et pas uniquement une image d'un systeme de fichiers. Neanmoins, le peripherique /dev/initrd est en lecture seule et ne peut etre lu qu'une seule fois apres le demarrage du systeme. root=nom_de_peripherique Indique le nom du peripherique a utiliser comme racine normale du systeme 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 peripherique indique ici doit etre montable et contenir un systeme de fichiers convenable. Modification de la racine du systeme de fichiers Par defaut, les parametres du noyau (par exemple, ceux configures avec rdev(8) ou compiles dans le noyau) ou les options du chargeur de demarrage sont utilises pour les systemes de fichiers racines normaux. Pour acceder a un systeme de fichiers racine monte par NFS, il faut utiliser les options de demarrage nfs_root_name et nfs_root_addrs pour la configuration NFS. Pour plus d'informations sur les racines de systemes de fichiers montees par NFS, consultez le fichier de la documentation du noyau Documentation/filesystems/nfsroot.txt (ou Documentation/filesystems/nfsroot.txt avant la verions 2.6.33). Pour plus d'informations sur la configuration de la racine du systeme de fichiers, consultez egalement les documentations de LILO et LOADLIN. On peut aussi faire effectuer la modification de la racine normale par l'executable /linuxrc. Pour cela, le systeme /proc doit etre monte. Apres avoir monte /proc, /linuxrc modifie le peripherique racine en ecrivant 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 peripherique physique monte a la racine, le changement s'effectue en ecrivant le numero de peripherique du nouveau systeme de fichiers dans /proc/sys/kernel/real-root-dev. Pour un systeme monte par NFS, la modification s'effectue en ecrivant la configuration NFS dans les fichiers /proc/sys/kernel/nfs-root-name et /proc/sys/kernel/nfs-root-addrs puis en inscrivant 0xff (par exemple, le numero de pseudoperipherique NFS) dans le fichier /proc/sys/kernel/real-root-dev. Par exemple, la ligne de commande suivante basculerait le peripherique racine normal sur /dev/hdb1 : echo 0x365 >/proc/sys/kernel/real-root-dev La ligne suivante modifierait le systeme racine normal vers un repertoire NFS /var/nfsroot d'un serveur local ayant l'adresse IP 193.8.232.7, cela sur un systeme nomme << idefix >>, se trouvant a l'adresse 193.8.232.2 : 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 systeme de fichiers racine est obsolete. Consultez le fichier Documentation/admin-guide/initrd.txt du noyau Linux (ou Documentation/initrd.txt avant la version 4.10) ainsi que pivot_root(2) et pivot_root(8) pour des informations sur les methodes actuelles pour changer le systeme de fichiers racine. Utilisation L'interet principal d'implementer initrd etait de permettre une configuration modulaire du noyau lors de l'installation du systeme. Un scenario possible d'installation est le suivant : (1) Le programme de chargement demarre depuis une disquette ou un autre support avec un noyau minimal (par exemple, les supports pour /dev/ram, /dev/initrd et le systeme de fichiers ext2), puis il charge /dev/initrd depuis une version compressee avec gzip d'un systeme de fichiers initial. (2) L'executable /linuxrc determine ce qui est necessaire pour (1) monter le systeme de fichiers normal (pilotes de peripheriques, systemes de fichiers) et (2) utiliser le support fourni pour la distribution (par exemple, CD-ROM, reseau, bande magnetique, ...). Cette etape peut etre effectuee en interrogeant l'utilisateur, en effectuant des tests de detection automatique ou en utilisant une approche hybride entre les deux. (3) L'executable /linuxrc charge les modules necessaires depuis le systeme de fichiers initial. (4) L'executable /linuxrc cree et remplit le systeme de fichiers racine. A cet instant, le systeme de fichiers racine n'est pas necessairement complet. (5) L'executable /linuxrc configure /proc/sys/kernel/real-root-dev, demonte /proc, le systeme de fichiers normal et tout autre systeme de fichiers qu'il a eventuellement monte, et se termine. (6) Le noyau monte alors le systeme de fichiers racine normal. (7) Maintenant que le systeme de fichiers est accessible, le chargeur peut etre installe. (8) Le chargeur est configure pour installer dans /dev/initrd un systeme de fichiers disposant de l'ensemble des modules qui ont ete utilises pour demarrer le systeme. Par exemple, un peripherique comme /dev/ram0 peut etre modifie, puis demonte et, finalement, l'image est recopiee depuis /dev/ram0 vers un fichier. (9) Le systeme est maintenant pret a redemarrer et les taches supplementaires d'installation peuvent etre effectuees. Le principal avantage offert par /dev/initrd dans ce scenario est de permettre de reutiliser les donnees de configuration lors du fonctionnement normal du noyau, sans necessiter de choisir un noyau initial, d'utiliser un gros noyau generique ou de recompiler le noyau apres l'installation. Un second scenario sert a l'installation de Linux sur un reseau constitue de machines differentes. Dans ce cas, il peut etre preferable de n'utiliser qu'un nombre minimal de noyaux (voire un seul dans le meilleur des cas) et de garder la quantite d'informations specifiques a un systeme la plus faible possible. Ainsi, on cree un fichier commun contenant tous les modules necessaires, et seul le fichier /linuxrc, ou les fichiers qu'il lance, change suivant les machines. Un troisieme scenario permet de disposer de disques de secours plus commodes. Les informations comme l'emplacement du systeme de fichiers racine ne sont pas indispensables lors du demarrage. Le systeme charge depuis /dev/initrd peut ainsi etre interactif et/ou effectuer une detection automatique suivie d'une verification de coherence du systeme. Le dernier usage mais non le moindre concerne l'utilisation de initrd pour faciliter l'installation de distribution Linux par CD-ROM. La distribution peut utiliser directement LOADLIN pour charger /dev/initrd depuis le CD-ROM sans avoir besoin de creer de disquettes. La distribution peut egalement utiliser une disquette de demarrage avec LILO, puis charger un disque RAM par l'intermediaire de /dev/initrd depuis le CD-ROM. FICHIERS /dev/initrd /dev/ram0 /linuxrc /initrd NOTES - Avec le noyau actuel, tout systeme de fichiers qui reste monte lors du deplacement de /dev/ram0 depuis / vers /initrd demeure accessible. Neanmoins, les entrees de /proc/mounts ne sont pas mises a jour. - Avec le noyau actuel, si le repertoire /initrd n'existe pas, alors /dev/ram0 ne sera pas completement demonte si /dev/ram0 est utilise par un processus ou si un systeme de fichiers a ete monte dessus. Si /dev/ram0 n'est pas completement demonte, alors /dev/ram0 restera charge en memoire. - Les utilisateurs de /dev/initrd ne doivent pas compter sur les comportements decrits dans les deux notes precedentes. Ces comportements peuvent changer dans les versions futures du noyau Linux. VOIR AUSSI chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8) Documentation/admin-guide/initrd.rst (ou Documentation/initrd.txt avant Linux 4.10) dans les sources du noyau Linux, la documentation de LILO, celle de LOADLIN et celle de SYSLINUX. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.8 2 mai 2024 initrd(4)