Manpages

NOM

bootparam - Introduction aux paramètres de démarrage du noyau Linux

DESCRIPTION

Le noyau Linux accepte un certain nombre d’options en ligne de commande, également appelées paramètres de démarrage, au moment où il est chargé. En général, c’est principalement utilisé pour fournir au noyau des informations sur les paramètres matériels, qu’il serait incapable de déterminer seul, ou pour éviter/remplacer les valeurs qu’il détecterait normalement.

Quand le noyau est démarré directement par le BIOS, il n’est pas possible de préciser des paramètres. Aussi, afin de tirer parti de ces possibilités, vous devez utiliser un chargeur capable de transmettre les options, comme GRUB.

Liste des paramètres
La ligne de commande du noyau est une liste de chaînes de caractères (les paramètres) séparées par des espaces. La plupart des paramètres de démarrage ont la forme suivante :

nom[=valeur_1][,valeur_2]...[,valeur_10]

où « nom » est un mot clé unique utilisé pour identifier la partie du noyau à laquelle les valeurs éventuelles sont associées. La limite de 10 valeurs est effective, le code actuel ne gérant que 10 paramètres par mot clé, séparés par des virgules. (Néanmoins, vous pouvez réutiliser le même mot clé avec 10 paramètres supplémentaires dans certaines situations complexes inhabituelles, en espérant que la fonction d’initialisation les gérera.)

La plupart du traitement est codé dans le fichier source du noyau init/main.c. Tout d’abord, le noyau vérifie si le paramètre est l’un des mots clés « root », « nfsroot », « nfsaddrs », « ro », « rw » , « debug » ou « init ». La signification de ces options est décrite ci-dessous.

Ensuite, il parcourt une liste de fonctions d’initialisation pour vérifier si la chaîne du paramètre spécifiée (par exemple « toto ») est associée à une fonction d’initialisation (« toto_setup() ») pour un périphérique particulier ou une partie du noyau. Si la ligne toto=3,4,5,6 est fournie, le noyau cherchera alors dans la table bootsetups si « toto » est enregistré. S’il l’est, le noyau appellera la fonction associée à « toto » (toto_setup()) en lui passant les paramètres 3, 4, 5 et 6 donnés sur la ligne de commande.

Tout ce qui est de la forme « toto=titi » et qui ne concerne pas une des fonctions d’initialisation décrites ci-dessus est interprété comme une variable d’environnement à définir. Un exemple (inutile ?) serait l’utilisation de « TERM=vt100 » comme paramètre de démarrage.

Les paramètres restants, qui n’ont pas été interceptés par le noyau et qui ne sont pas interprétés comme des variables d’environnement, seront passés au processus numéro un, habituellement le programme init(1). Le paramètre le plus courant dans ce cas est le mot « single » qui indique à init de démarrer en mode mono-utilisateur, sans lancer tous les démons habituels. Regardez la page de manuel de la version d’init(1) installé sur votre système pour connaître les paramètres acceptés.

Paramètres généraux non spécifiques à un périphérique
’init=...’

Définit la commande initiale à faire exécuter par le noyau. Si ce paramètre n’est pas fourni ou est introuvable, le noyau essaiera successivement /sbin/init, /etc/init, /bin/init, /bin/sh et paniquera si tout cela échoue.

’nfsaddrs=...’

Définit l’adresse de démarrage par NFS. Cette adresse est utilisée en cas de démarrage par le réseau.

’nfsroot=...’

Définit le nom de la racine NFS. Si cette chaîne ne commence ni par « / », ni par « , », ni par un chiffre, elle est alors préfixée automatiquement par « /tftpboot/ ». C’est utilisé en cas de démarrage par le réseau.

’root=...’

Ce paramètre indique au noyau quel périphérique doit être utilisé comme système de fichiers racine pendant le démarrage. La configuration par défaut est déterminée lors de la compilation du noyau, et est généralement identique à la racine du système de fichiers utilisé lors de la compilation. Pour remplacer cette valeur et sélectionner par exemple le second lecteur de disquette, on utilisera « root=/dev/fd1 ».

Le périphérique racine peut être spécifié de manière symbolique ou numérique. Une spécification symbolique est de la forme /dev/XXYN, où XX désigne un type de périphérique (par exemple, « hd » désigne un disque dur compatible ST-506, avec Y dans ’a’-’d’ ; « sd » désigne un disque compatible SCSI, avec Y dans ’a’-’e’), Y la lettre ou le numéro du lecteur, et N le numéro (en décimal) de la partition sur ce périphérique.

Cela n’a rien à voir avec la désignation des périphériques dans le système de fichiers, le préfixe « /dev/ » est purement conventionnel.

La spécification numérique, plus compliquée et moins portable, du périphérique racine en utilisant les numéros majeur et mineur est également acceptée. (Par exemple, /dev/sda3 a pour nombres majeur et mineur respectivement 8 et 3, et peut donc être mentionné ainsi : « root=0x803 ».)

’rootdelay=’

Ce paramètre définit le délai (en seconde) de pause avant d’essayer de monter le système de fichiers racine.

’rootflags=...’

Ce paramètre définit la chaîne d’option de montage pour le système de fichiers racine (consultez aussi fstab(5)).

’rootfstype=...’

L’option « rootfstype » demande au noyau de monter le système de fichiers racine comme s’il était du type spécifié. Cela peut-être utile, par exemple, pour monter un système de fichiers ext3 en tant qu’ext2 et pouvoir alors supprimer le journal dans le système de fichiers racine, c’est-à-dire de repasser ce système de fichiers d’ext3 en ext2 sans avoir besoin de redémarrer à partir d’une autre source.

’ro’ et ’rw’

L’option « ro » demande au noyau de monter le système de fichiers racine en lecture seule, pour que les programmes de vérification de la cohérence du système de fichiers puissent travailler sur un système au repos. Aucun processus ne peut écrire sur le système de fichiers en question jusqu’à ce qu’il soit remonté en lecture/écriture, par exemple avec la commande « mount -w -n -o remount / ». (Consultez mount(8).)

L’option « rw » indique au noyau de monter le système de fichiers racine en lecture/écriture. C’est l’option par défaut.

’resume=...’

Cela indique au noyau l’emplacement des données stockées sur disque à utiliser pour revenir d’hibernation. C’est en général le même que la partition ou le fichier d’échange. Exemple :

resume=/dev/hda2

’reserve=...’

Ce paramètre permet de protéger une zone de ports d’entrée-sortie de l’autodétection. La forme de l’option est :

reserve=base_IO,longueur[,base_IO,longueur]...

Pour certaines machines, il peut être nécessaire d’empêcher les pilotes de rechercher des périphériques dans des régions spécifiques. En effet, certains matériels peuvent mal réagir à l’autodétection, ou seraient mal reconnus, ou simplement parce que vous ne souhaitez pas que le noyau initialise ces matériels.

L’option reserve indique une zone de ports d’entrée-sortie qu’il ne faut pas examiner. Un pilote de périphérique n’utilisera pas une région réservée, à moins qu’une autre option le lui indique explicitement.

Par exemple, la ligne de commande

reserve=0x300,32 blah=0x300

empêche tous les pilotes, sauf « blah », d’examiner 0x300-0x31F.

’panic=N’

Par défaut, le noyau ne redémarrera pas automatiquement après un cas de panique, mais cette option permet de faire redémarrer le noyau après N secondes (si N est supérieur à zéro). Ce délai peut également être configuré avec :

echo N > /proc/sys/kernel/panic

’reboot=[warm|cold][,[bios|hard]]’

Depuis le noyau 2.0.22, les redémarrages sont par défaut faits à froid. Certains ont demandé la restauration de l’ancienne valeur par défaut « reboot=warm ». (Un redémarrage à froid peut être nécessaire pour réinitialiser certains périphériques, mais risque de détruire des données présentes dans le cache des disques. Un redémarrage à chaud peut être plus rapide.) Par défaut, le redémarrage est effectué matériellement, en demandant au contrôleur de clavier de baisser le niveau de la ligne reset. Il existe toutefois des cartes mères où cela ne fonctionne pas. L’option « reboot=bios » permet alors de redémarrer de manière logicielle, en appelant le BIOS.

’nosmp’ et ’maxcpus=N’

(Seulement si la constante __SMP__ est définie.) L’option « nosmp » ou « maxcpus=0 » en ligne de commande empêche entièrement l’activation du mode SMP. Une option « maxcpus=N » limite le nombre maximal de processeurs activés en mode SMP.

Paramètres de démarrage pour les développeurs du noyau
’debug’

Les messages du noyau sont manipulés par un démon (par exemple klogd(8) ou équivalent), pour qu’ils puissent être stockés sur disque. Les messages disposant d’une priorité supérieure à la valeur console_loglevel sont aussi affichés sur la console. (Pour en savoir plus sur les niveaux de log, consultez syslog(2).) Par défaut, cette variable est définie pour journaliser tout ce qui est plus important que les messages de débogage (KERN_DEBUG). Ce paramètre de démarrage demandera au noyau d’afficher également les messages de la priorité KERN_DEBUG. Le niveau de la console peut aussi être modifié dans un système démarré grâce au fichier /proc/sys/kernel/printk (décrit dans syslog(2)), l’opération syslog(2) SYSLOG_ACTION_CONSOLE_LEVEL ou dmesg(8).

’profile=N’

Il est possible d’activer les fonctions de suivi du noyau si l’on désire s’assurer de l’emplacement où le noyau consomme ses cycles CPU. Le suivi est activé en définissant la variable prof_shift avec une valeur non nulle. Cela peut être effectué soit en définissant la constante CONFIG_PROFILE durant la compilation, soit en indiquant l’option « profile= » au démarrage. La valeur reçue par la variable prof_shift sera N s’il est fourni, ou CONFIG_PROFILE_SHIFT si cette variable existe ou 2 par défaut. La signification de la variable correspond à la finesse du suivi : à chaque saut d’horloge, si le système exécute du code du noyau, un compteur est incrémenté :

profile[adresse >> prof_shift]++;

Les informations brutes concernant le suivi peuvent être lues dans /proc/profile. Vous préférerez probablement utiliser un outil comme readprofile.c pour les examiner. L’écriture dans /proc/profile effacera les compteurs.

Paramètres de démarrage pour disques virtuels
(Uniquement si le noyau a été compilé avec l’option CONFIG_BLK_DEV_RAM.) Il est généralement déconseillé d’utiliser un disque virtuel sous Linux. Le système gérera mieux la mémoire disponible tout seul. Néanmoins, pendant le démarrage, il peut être utile de charger le contenu d’une disquette sur un disque virtuel. Il peut également arriver sur certains systèmes que des modules particuliers concernant les systèmes de fichiers ou le matériel doivent être chargés avant l’accès au disque principal.

Avec Linux 1.3.48, la gestion des disques virtuels a été profondément modifiée. Auparavant, la mémoire était allouée de manière statique, avec un paramètre « ramdisk=N » qui indiquait la taille (cela pouvait aussi être configuré directement dans l’image du noyau à la compilation). Actuellement, les disques virtuels utilisent les tampons caches et grossissent dynamiquement. Pour obtenir plus d’informations avec les disques virtuels actuels, consultez le fichier source du noyau Documentation/blockdev/ramdisk.txt (Documentation/ramdisk.txt dans les anciens noyaux).

Il y a quatre paramètres, deux booléens et deux entiers.

’load_ramdisk=N’

Si N vaut 1, un disque virtuel est chargé en mémoire. Si vaut 0 aucun disque virtuel n’est chargé (comportement par défaut).

’prompt_ramdisk=N’

Si N vaut 1, l’insertion d’une disquette est demandée (comportement par défaut). Si N vaut 0, rien n’est demandé (donc ce paramètre n’est jamais utilisé).

’ramdisk_size=N’ ou (obsolète) ’ramdisk=N’

Définit la taille maximale du disque virtuel à N ko. Par défaut, la valeur est de 4096 ko (4 Mo).

’ramdisk_start=N’

Indique le numéro de bloc de départ (l’emplacement sur la disquette où démarre le contenu du disque virtuel). C’est utile dans le cas où l’image du disque virtuel suit une image de noyau.

’noinitrd’

(Uniquement si le noyau a été compilé avec les options CONFIG_BLK_DEV_RAM et CONFIG_BLK_DEV_INITRD.) On peut actuellement compiler le noyau pour qu’il utilise initrd. Quand cette possibilité est activée, le processus de démarrage charge le noyau et un disque virtuel initial. Puis le noyau convertit initrd en un disque virtuel « normal » qui est monté en lecture/écriture à la racine. Ensuite /linuxrc est exécuté. Ensuite, le vrai système de fichiers est monté à la racine, et le système initrd est déplacé dans /initrd. Enfin, la séquence de démarrage habituelle (appel de /sbin/init) est exécutée.

Pour une description détaillée des possibilités de initrd, consultez le fichier source du noyau Documentation/admin-guide/initrd.rst (ou Documentation/initrd.txt avant Linux 4.10).

L’option « noinitrd » indique au noyau que contrairement aux options avec lesquelles il a été compilé, il ne doit pas effectuer les étapes sus-mentionnées, mais au contraire laisser les données de initrd sous /dev/initrd. (Ce périphérique ne peut être utilisé qu’une seule fois, les données sont libérées dès que le dernier processus les ayant utilisées a fermé /dev/initrd.)

Paramètres de démarrage pour périphériques SCSI
Notations générales pour cette section :

iobase -- le premier port d’entrée-sortie utilisé par l’hôte SCSI. Il est indiqué en notation hexadécimale, habituellement dans l’intervalle allant de 0x200 à 0x3ff.

irq -- l’interruption matérielle pour laquelle la carte est configurée. Les valeurs valables dépendent de la carte en question, mais sont généralement 5, 7, 9, 10, 11, 12, et 15. Les autres valeurs sont plutôt utilisées par des périphériques comme les disques IDE, les lecteurs de disquettes, les ports série, etc.

scsi-id -- l’identifiant utilisé par l’adaptateur pour se distinguer sur le bus SCSI. Peu d’adaptateurs permettent de modifier cette valeur, qui est la plupart du temps figée en interne. La valeur classique est 7 mais les cartes Seagate et Future Domain TMC-950 utilisent 6.

parité -- le fait que l’adaptateur SCSI attende que le périphérique lui fournisse ou non une valeur de parité pour tous les échanges d’informations. Un 1 valide le contrôle de parité, un 0 le désactive. Encore une fois, tous les adaptateurs ne gèrent pas la modification de ce comportement comme paramètre de démarrage.
’max_scsi_luns=...’

Un périphérique SCSI peut contenir plusieurs « sous-périphériques » en lui-même. L’exemple courant est celui des nouveaux lecteurs de CD-ROM qui gèrent plusieurs disques en même temps. Chaque CD est adressé par un numéro d’unité logique, « Logical Unit Number » (LUN). Cependant, la plupart des périphériques SCSI, comme les disques durs ou les lecteurs de bande, n’ont qu’un seul sous-périphérique avec un LUN nul.

Certains périphériques SCSI mal conçus ne peuvent pas être détectés sur un LUN différent de zéro. Ainsi, si la constante de compilation CONFIG_SCSI_MULTI_LUN n’est pas définie, les noyaux récents n’examineront que le LUN zéro.

Pour indiquer le nombre de LUN à examiner au démarrage, on indiquera « max_scsi_luns=n » comme paramètre, n étant un nombre entre 1 et 8. Pour éviter les ennuis décrits ci-dessus, on utilisera n=1 avec des périphériques à problèmes.

Configuration des lecteurs de bande SCSI

Certaines configurations au démarrage des lecteurs de bandes SCSI peuvent être effectuées ainsi :

st=taille_tampon[,seuil_écriture[,tampons_max]]

Les deux premiers nombres sont indiqués en ko. La valeur par défaut de taille_tampon est 32 ko, et la taille maximale exagérément grande est 16384 ko. Le nombre seuil_écriture représente la valeur à partir de laquelle le tampon est effectivement écrit sur la bande, par défaut 30 ko. Le nombre maximal de tampons varie avec le nombre de lecteurs détectés, et vaut 2 par défaut. Un exemple d’utilisation serait :

st=32,30,2

Des précisions complètes sont disponibles dans le fichier Documentation/scsi/st.txt (ou drivers/scsi/README.st pour les noyaux plus anciens) du répertoire scsi des sources du noyau Linux.

Disques durs
Paramètres des disques IDE et des lecteurs de CD-ROM

Le pilote IDE accepte plusieurs paramètres, principalement pour indiquer la géométrie du disque avec des contrôleurs obsolètes. Les spécifications du disque sont indiquées en utilisant « hdX= » avec X dans l’intervalle « a-h ».

Les options communes à plusieurs disques sont indiquées avec le préfixe « hd= ». L’utilisation d’un préfixe spécifique à un disque avec une option non spécifique marchera également comme prévu.

Notez encore que « hd= » peut être utilisé pour faire référence au disque suivant, non spécifié, dans la séquence (a, ..., h). Les options « hd= » sont présentées brièvement ci-dessous, consultez le fichier Documentation/ide/ide.txt (ou Documentation/ide.txt pour les noyaux anciens et drivers/block/README.ide pour les noyaux plus anciens encore) dans les sources du noyau Linux pour plus de précisions.

Options « hd=cylindres,têtes,secteurs[,wpcom[,irq]] »

Ces options sont utilisées pour indiquer la géométrie physique du disque. Seules les trois premières valeurs sont nécessaires. Les nombres de cylindres/têtes/secteurs seront ceux utilisés par fdisk. La valeur de compensation en écriture est ignorée pour les disques IDE. L’IRQ indiquée sera utilisée avec le contrôleur du disque dur, et n’est donc pas réellement spécifique au disque.

Option « hd=serialize »

L’interface double IDE CMD-640 est mal conçue, car lorsqu’un disque sur la seconde interface est utilisé simultanément au disque sur la première interface, les données seront corrompues. Utiliser cette option indique au pilote de s’assurer que les deux disques ne sont jamais utilisés en même temps.

Option « hd=noprobe »

Ne pas examiner ce disque. Par exemple,

hdb=noprobe hdb=1166,7,17

va désactiver la recherche, mais indique quand même les paramètres géométriques du disque, pour qu’il soit reconnu comme périphérique bloc valide, et pourra donc être utilisé.

Option « hd=nowerr »

Certains disques ont apparemment le bit WRERR_STAT positionné en permanence. Cela active un contournement pour ces périphériques défectueux.

Option « hd=cdrom »

Cela indique au pilote IDE qu’un lecteur de CD-ROM compatible ATAPI est attaché à la place d’un disque dur normal. Dans la plupart des cas, le CD-ROM est identifié automatiquement, mais à défaut cette option peut aider.

Options du pilote Standard ST-506 (« hd= »)

Le pilote standard peut accepter des paramètres concernant la géométrie des disques similaires à ceux du pilote IDE. Notez cependant qu’il n’attendra que trois valeurs (cylindres/têtes/secteurs) et tout ce qui suivra sera ignoré silencieusement. De plus, il n’accepte que l’option « hd= » en paramètre, « hda= » et autres ne seront pas valables. Le format est le suivant :

hd=cylindres,têtes,secteurs

Si deux disques sont installés, ce paramètre est répété avec les paramètres de géométrie du deuxième disque.

Périphériques Ethernet
Chaque périphérique utilise des paramètres spécifiques, mais ils partagent tous au moins une valeur d’IRQ, une base d’entrée-sortie et un nom. Dans sa forme la plus générique, les paramètres ressemblent à :

ether=irq,iobase[,param_1[,...param_8]],nom

Le premier paramètre non numérique est considéré comme le nom. La valeur de param_n (si elle existe) a une signification différente pour chacun des pilotes. Habituellement les valeurs param_n sont utilisées pour indiquer des options comme l’adresse d’une mémoire partagée, la sélection d’interface, le canal DMA, etc.

L’utilisation la plus courante de ce paramètre est de forcer la détection d’une seconde carte Ethernet, car l’attitude par défaut consiste a n’en détecter qu’une seule. Cela peut être effectué simplement avec :

ether=0,0,eth1

Les valeurs nulles pour irq et iobase dans l’exemple précédent indiquent au pilote d’effectuer l’autodétection.

L’Ethernet-HowTo contient une documentation très complète sur l’utilisation de plusieurs cartes, et sur les valeurs des param_n spécifiques aux cartes ou pilotes. Les lecteurs intéressés se référeront à la section traitant de leur carte dans ce document.

Lecteur de disquettes
Il existe de nombreuses options pour le pilote de lecteurs de disquettes, et elles sont listées dans le fichier Documentation/blockdev/floppy.txt (ou Documentation/floppy.txt pour les anciens noyaux et drivers/block/README.fd pour les noyaux plus anciens encore) dans les sources du noyau Linux. Veuillez consulter ce fichier pour plus d’informations.

Pilote sonore
Le pilote sonore ne peut accepter que des paramètres pour surcharger les valeurs définies à la compilation. Ce n’est pas recommandé car assez complexe. Les options sont décrites dans le fichier Documentation/sound/oss/README.OSS (ou drivers/sound/Readme.linux pour les noyaux plus anciens) dans les sources du noyau Linux. Les paramètres de démarrage de la forme suivante sont acceptés :

sound=device1[,device2[,device3...[,device10]]]

où chaque valeur de deviceN utilise le format 0xTaaaId, et les octets sont généralement utilisés de la manière suivante :

T - type de périphérique : 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401

aaa - adresse d’entrée-sortie en hexadécimal

I - ligne d’interruption en hexadécimal (10=A, 11=B, ...)

d - canal DMA

Cela est assez compliqué, et il vaut mieux compiler un noyau avec ses propres valeurs. L’utilisation du paramètre de démarrage « sound=0 » désactivera totalement le pilote sonore.

Pilote d’imprimante en ligne

’lp=’

Syntaxe :

lp=0
lp=auto
lp=reset
lp=port[,port...]

On peut indiquer au pilote d’imprimante les ports à utiliser et ceux à ne pas utiliser. Cela permet d’éviter que le pilote n’examine tous les ports parallèles afin que d’autres pilotes (PLIP, PPA) puissent les utiliser.

Le format du paramètre est une suite de noms de port. Par exemple, « lp=none,parport0 » utilisera le premier port parallèle pour lp1, et désactivera lp0. Pour désactiver complètement le pilote d’imprimante, utilisez lp=0.

VOIR AUSSI

klogd(8), mount(8)

Pour une description détaillée, consultez le fichier source du noyau Documentation/admin-guide/kernel-parameters.txt.

COLOPHON

Cette page fait partie de la publication 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l’adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>;, Stéphan Rafin <stephan.rafin [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french [AT] lists.org>.