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 :

  1. formater obligatoirement sa racine dans un de ces systèmes de fichiers
  2. 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 ou xfs).

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, ici vmlinuz par défaut, pointant sur le noyau nommé noyau-VERSION.
  • APPEND contient les options à passer au noyau à l'amorçage, parmi les suivantes :
    1. 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 par rw 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é).
    2. 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écifiant root=LABEL=monlabel ou bien, encore mieux, spécifier l'identifiant unique UUID en spécifiant root=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)
    3. 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 simplement initrd et se trouve sous /boot, donc dans le répertoire parent de extlinux, 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 de syslinux à charger, ici chain.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/… dans extlinux.conf ; tout se fera désormais selon des chemins relatifs, en prenant comme base le répertoire extlinux/ (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 forme noyau-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