Amorçage
0Linux s'amorce avec extlinux
, inclus dans le paquet syslinux
, servant également à amorcer les DVD et les clés USB autonomes.
Systèmes de fichiers supportés
extlinux
ne supporte que les systèmes de fichiers ext2
, ext3
, ext4
et btrfs
.
Ces contraintes impliquent un choix, soit :
- formater obligatoirement sa racine dans un de ces systèmes de fichiers
- dédier une partition à
/boot
, formatée dans un de ces systèmes de fichiers et avoir un peu plus de choix pour sa racine (jfs,
reiserfs
ouxfs
).
extlinux
prend en charge l'amorçage via BIOS et EFI. Néanmoins, 0Linux ne propose pas (encore) de méthode automatisée pour mettre en place un amorçage par EFI. Il faut pour le moment le paramétrer manuellement.
Les EFI proposent une option appelée « Legacy BIOS » ou « Legacy Boot » qui permet d'amorcer le système à la manière des BIOS. Activez-la si vous ne savez pas mettre en place un amorçage par EFI et que vous voulez installer extlinux
automatiquement pour amorcer 0Linux.
Configuration
La configuration d'extlinux
se trouve dans le fichier /boot/extlinux/extlinux.conf
.
Ce fichier doit obligatoirement être encodé en CP850 ou IBM850. Le codage ISO-8859-1 n'affichera pas correctement les accents et le codage UTF-8 le rendra inutilisable.
Systèmes Linux
Voici une entrée typique servant à amorcer le système 0Linux :
- extlinux.conf
# 0Linux : LABEL 0linux MENU LABEL 0 Linux LINUX /boot/vmlinuz APPEND ro root=/dev/sda2 initrd=../initrd
LABEL
est un mot simple identifiant le choix de l'utilisateur, il n'est pas affiché.MENU LABEL
est le libellé du menu, il sera affiché à l'utilisateur dans le menu.LINUX
contient le chemin du noyau à amorcer, icivmlinuz
par défaut, pointant sur le noyau nomménoyau-VERSION
.APPEND
contient les options à passer au noyau à l'amorçage, parmi les suivantes :ro
pour « read only » : le système est d'abord chargé en lecture seule afin que les scripts d'initialisation de puissent vérifier l'intégrité des systèmes de fichiers ; il les remonteront ensuite en lecture-écriture. C'est le mode par défaut. Le remplacer parrw
forcera le montage de la racine en lecture-écriture, ne permettant pas de vérifier les systèmes de fichiers (plus rapide, mais potentiellement plus risqué).root=/dev/sda2
indique au noyau sur quelle partition se trouve la racine du système. C'est généralement le seul paramètre à personnaliser. On peut également et de préférence spécifier soit le LABEL de la partition racine, moins sujette aux changements que le nom de périphérique '/dev/sdX' en spécifiantroot=LABEL=monlabel
ou bien, encore mieux, spécifier l'identifiant unique UUID en spécifiantroot=UUID=1234-1234-1234-1234
. Notez bien que l'utilisation du LABEL ou de l'UUID requiert d'inclure le chargement de l'initrd de 0Linux (cf. plus bas)initrd ../initrd
charge « l'initrd » (ou « intramfs ») de 0Linux, lequel contient un système minimal permettant de reconnaître et d'amorcer les partitions selon leur LABEL ou leur UUID (cf. plus haut). L'initrd s'appelle simplementinitrd
et se trouve sous/boot
, donc dans le répertoire parent deextlinux
, d'où la notation../initrd
Cette entrée permettra d'amorcer le fichier vmlinuz
, même si celui-ci est mis à niveau entretemps (ce fichier est d'ordinaire un lien vers le noyau noyau-3.x.x
de toute façon). Il n'y a donc pas besoin de réinitialiser extlinux
lors d'une mise à niveau du noyau Linux.
Autres systèmes
L'amorçage d'autres systèmes passe par la technique du chainloading, qui consiste à passer la main au chargeur d'amorçage de la partition s'il y en a un. Par exemple, si un système Windows est installé sur /dev/sda1
:
- extlinux.conf
# Windows : LABEL windoz MENU LABEL Windows XTruc Ultime KERNEL chain.c32 APPEND hd0 1
LABEL
est un mot simple identifiant le choix de l'utilisateur, il n'est pas affiché.MENU LABEL
est le libellé du menu, il sera affiché à l'utilisateur dans le menu.KERNEL
contient le module desyslinux
à charger, icichain.c32
, servant à chainloader un autre chargeur. Ce module est déjà placé par défaut sous/boot/extlinux
.APPEND
désigne la partition où se trouve le chargeur à invoquer. La notation des partitions se fait ainsi :
hd<numéro du disque commençant à 0><numéro de partition commençant à 1>
Ainsi :
/dev/sda1 -> hd0 1 /dev/sda2 -> hd0 2 /dev/sda7 -> hd0 7 /dev/sdb4 -> hd1 4 /dev/sdd9 -> hd4 9
Installation
extlinux
s'installe par défaut en début de partition, il n'attaque pas le bloc d'amorçage principal (ou « MBR », pour « Master Boot Record ») du disque dur. Il s'installe sur un système de fichiers déjà monté.
Par exemple, si l'on désire pouvoir amorcer la partition /dev/sda2
, on doit d'abord la monter dans un répertoire :
mkdir /mon_0 mount /dev/sda2 /mon_0
On installe ensuite extlinux
simplement :
extlinux --install /mon_0/boot/extlinux
On démonte :
umount /mon_0
Mise à jour
extlinux
ne nécessite pas d'être mis à jour si le noyau est mis à niveau car il s'occupe d'amorcer le fichier /boot/vmlinuz
, lequel est un lien symbolique vers le noyau /boot/noyau-3.<version>
.
Il ne doit être mis à jour que si son fichier de configuration extlinux.conf
est modifié : soit en mettant à jour avec l'option --update
, soit en le réinstallant simplement :
extlinux --install /mon_0/boot/extlinux
Ou bien :
extlinux --update /mon_0/boot/extlinux
Modification du MBR
Si l'on désire faire d'extlinux
le chargeur d'amorçage par défaut de sa machine, on peut le placer dans le bloc d'amorçage principal (« Master Boot Record » ou « MBR »).
syslinux
fournit un bloc d'amorçage principal sous forme binaire, c'est le fichier /usr/share/syslinux/mbr.bin
, lequel est à écrire au début du disque dur, sur les premiers octets. Si notre disque dur est /dev/sda
:
Pour les diques MBR :
cat /usr/share/syslinux/mbr.bin > /dev/sda
Pour les disques GPT :
cat /usr/share/syslinux/gptmbr.bin > /dev/sda
Lors de mises à jour ou de réinstallations d'extlinux
, il n'est pas nécessaire de réinstaller le MBR. On peut néanmoins répéter l'opération sans risque.
Partition /boot séparée
Utiliser une partition /boot
séparée permet le « multiboot », ou l'amorçage de système multiples, que ce soit Linux, Windows, BSD ou autres, depuis une unique partition d'amorçage.
On considère ici que notre/boot
séparée se trouve sur/dev/sda8
.
extlinux
recherche la première partition amorçable du disque. Veiller donc à ce qu'aucune autre partition amorçable ne soit devant la partition /boot
, soit en supprimant tous les marqueurs d'amorce des autres partitions (seule /boot
sera donc amorçable), soit en plaçant la partition /boot
devant toutes les autres partitions amorçables.
Pour les disques GPT, on active l'attribut « Legacy BIOS bootable » ainsi (ici avec sgdisk
) :
# sgdisk DISQUE --attributes=NUMERODEPARTITION:set:2 sgdisk /dev/sda --attributes=8:set:2
Cette méthode implique plusieurs choses :
- créer une petite partition (1 Go suffit amplement) et la marquer amorçable (ou active/bootable), avec
cfdisk
par exemple. - créer un système de fichiers sur cette partition : ext2, ext3 ou ext4. En profiter pour indiquer une étiquette/libellé (ou « label ») n'est pas une mauvaise idée :
mkfs.ext4 -L MONBOOT /dev/sda8
- monter cette partition dans un emplacement temporaire, par exemple :
mount /dev/sda8 /mnt/hd
- Y copier tout le contenu du répertoire
/boot
original :
cp -ar /boot/* /mnt/hd/
…afin de disposer du noyau et du répertoire extlinux/
, dont l'indispensable extlinux.conf
. On copiera donc dans cette partition tous les noyaux et éventuels initrd dont on a besoin pour amorcer nos différents systèmes. Ne pas copier le répertoire /boot
lui-même mais bien son contenu !
- On ne doit plus spécifier le chemin absolu
/boot/…
dansextlinux.conf
; tout se fera désormais selon des chemins relatifs, en prenant comme base le répertoireextlinux/
(voir l'exemple ci-dessous). - On ne peut plus se fier au lien symbolique
vmlinuz
mais on doit indiquer explicitement le nom de fichier de chaque noyau à amorcer. Pour 0, ce nom est donc de la formenoyau-3.x.x
.
Exemple de multiboot
- extlinux.conf
# # Fichier de configuration de 'syslinux'. # # ATTENTION ! Ce fichier doit être encodé en CP850 ou IBM850, et non en # ISO ou UTF-8 ! # On charge d'emblée le module du menu graphique. On n'indique PAS la racine "/boot/extlinux" : UI vesamenu.c32 PROMPT 0 # On laisse 10 secondes de réflexion avant d'amorcer : TIMEOUT 100 # Couleurs : menu color border * #00000000 #00000000 none menu color screen * #90ffffff #00000000 * menu color title * #ffffffff #00000000 * menu color unsel * #90ffffff #00000000 * menu color hotkey * #ff6bff6b #00000000 * menu color sel * #e0ffffff #200cd22d * menu color hotsel * #e06bff6b #200cd22d * menu color scrollbar * #200cd22d #00000000 * menu color tabmsg * #60ffffff #00000000 * menu color cmdmark * #c000ffff #00000000 * menu color cmdline * #c0ffffff #00000000 * menu color timeout_msg * #80ffffff #00000000 * menu color timeout * #c0ffffff #00000000 * # Image d'arrière-plan. On n'indique PAS la racine "/boot/extlinux" : MENU BACKGROUND syslinux.png # Titre du menu : MENU TITLE Démarrage du système # On remplace le message anglophone "Press [tab] to edit options." MENU TABMSG Appuyez sur TAB pour éditer les options de démarrage # Message d'attente : MENU AUTOBOOT Lancement automatique dans # seconde{,s}... # 0Linux. On indique le noyau en relatif, d'où le "../" : LABEL 0 MENU LABEL 0Linux LINUX ../noyau-3.3.4 APPEND ro root=/dev/sda3 # On pourrait aussi spécifier un LABEL (requiert l'initrd) : # APPEND ro root=LABEL=MONBOOT initrd=../initrd # Un autre système Linux. On indique le noyau en relatif, d'où le "../" : LABEL LINUXTRUC MENU LABEL TrucLinux 13.1 LINUX ../vmlinuz-2.6.38.2 APPEND ro root=/dev/sda6 # Un autre système Windows : LABEL windoz MENU LABEL Windows Ultra Business Pro KERNEL chain.c32 APPEND hd0 1 # Menu pour redémarrer. On n'indique PAS la racine "/boot/extlinux". # Le module reboot.c32 et tous les autres se trouvent aux côtés du fichier extlinux.conf : LABEL reboot MENU LABEL Redémarrer la machine KERNEL reboot.c32
On installe ensuite extlinux
simplement :
extlinux --install /mnt/hd/extlinux
On n'oublie pas d'installer le MBR (voir plus haut dans cette page). Pour les disques GPT, voir les fichiers gptmbr*.bin
:
cat /usr/share/syslinux/mbr.bin > /dev/sda
On démonte :
umount /mnt/hd
On ajoute à notre fichier /etc/fstab
la partition à monter automatiquement dans /boot
:
- fstab
/dev/sda8 /boot ext4 defaults 1 2
Aller plus loin
man extlinux
man syslinux
- Documentation dans
/usr/doc/syslinux
- Commentaires dans
/boot/extlinux/extlinux.conf
- Site officiel : http://syslinux.org