Initramfs/Guide/fr

De plus en plus de systèmes requièrent un système de fichiers virtuel initial pour démarrer correctement. Dans ce guide, nous nous abordons le concept de système de fichiers virtuel initial (initramfs) et la manière de créer et de gérer des instances d'un tel système.

Introduction
For many users, an initramfs system is of no concern. Their system uses a simple partitioning schema with no exotic drivers or setups (like encrypted file systems), so the Linux kernel is entirely capable to hand over control to the binary on their system. But for many systems, an initramfs is mandatory.

La clé pour comprendre ce qu'est (ou ce à quoi sert) un système de fichiers virtuel initial, c'est de comprendre comment le processus de démarrage de Linux travaille, même dans les grandes lignes.

Le processus de démarrage de Linux
Once the Linux kernel has control over the system (which it gets after being loaded by the boot loader), it prepares its memory structures and drivers. It then hands over control to an application (usually ) whose task it is to further prepare the system and make sure that, at the end of the boot process, all necessary services are running and the user is able to log on. The application does that by launching, among other services, the  daemon who will further load up and prepare the system based on the detected devices. When is launched, all remaining file systems that have not been mounted are mounted, and the remainder of services is started.

For systems where all necessary files and tools reside on the same file system, the application can perfectly control the further boot process. But when multiple file systems are defined (or more exotic installations are done), this might become a bit more tricky:


 * Quand la partition est sur un système de fichiers séparé, les outils et les pilotes qui ont des fichiers stockés dans  ne peuvent être utilisés sauf si   est accessible. Si ces outils sont nécessaires pour rendre   accessible, alors il devient impossible de démarrer le système.


 * If the root file system is encrypted, then the Linux kernel will not be able to find the application, resulting in an unbootable system.

La solution à ces problèmes a été pendant longtemps d'utiliser un disque racine initial initrd.

Le disque root initial
The initrd is an in-memory disk structure (ramdisk) that contains the necessary tools and scripts to mount the needed file systems before control is handed over to the application on the root file system. The Linux kernel triggers the setup script (usually called but that name is not mandatory) on this root disk, which prepares the system, switches to the real root file system and then calls.

Bien que la méthode de l'initrd soit suffisante, elle présente quelques inconvénients :


 * C'est un périphérique de blocs à part entière, qui nécessite le surcoût d'un système de fichiers complet sur lui, et a une taille fixe. Choisissez un initrd trop petit, et vous ne pourrez y placer tous les scripts nécessaires. Choisissez-le trop grand et vous allez gaspiller la mémoire.


 * Comme c'est un périphérique réel, il consomme également de la mémoire cache dans le noyau Linux.

C'est pour résoudre ces problèmes, que le système de fichiers virtuel initial (initramfs) a été inventé.

Le système de fichiers virtuel initial
An initramfs is an initial ram file system based on tmpfs (a size-flexible, in-memory lightweight file system), which also did not use a separate block device (so no caching was done and all overhead mentioned earlier disappears). Just like the initrd, it contains the tools and scripts needed to mount the file systems before the binary on the real root file system is called. These tools can be decryption abstraction layers (for encrypted file systems), logical volume managers, software raid, bluetooth driver based file system loaders, etc.

The content of the initramfs is made by creating a cpio archive. is an old (but proven) file archiver solution (and its resulting archive files are called cpio files). cpio is definitely comparable to the archiver. The choice of here was because it was easier to implement (code-wise) and supported (back then) device files which  could not.

All files, tools, libraries, configuration settings (if applicable), etc. are put into the cpio archive. This archive is then compressed using the utility and stored alongside the Linux kernel. The boot loader will then offer it to the Linux kernel at boot time so the kernel knows an initramfs is needed.

Une fois détecté, le noyau Linux crée un système de fichiers tmpfs, extrait le contenu de l'archive dans ce système de fichiers, et lance le script    situé à la racine du système de fichiers tmpfs. Ce script monte ensuite le système de fichiers réel (après s'être assuré qu'il peut le faire, par exemple en chargeant des modules additionnels, en préparant un couche d'abstraction du chiffrage, etc.) ainsi que les autres systèmes de fichiers vitaux (comme and ).

Dès lors que le système de fichier root et les autres systèmes de fichiers vitaux sont montés, le script  depuis le initramfs commute la racine vers le système de fichiers racine réel et, finalement, appelle   sur ce système pour continuer le processus de démarrage.

Introduction et configuration du chargeur de démarrage
To create an initramfs, it is important to know what additional drivers, scripts and tools will be needed to boot the system. For instance, if LVM is used, then LVM tools will be needed in the initramfs. Likewise, if software RAID is used, utilities will be needed, etc.

Some tools exist that help users create initramfs (compressed archives) for their system. But for those who want total control can easily create personal, custom initramfs images as well.

Une fois créée, vous devez ajuster la configuration du chargeur de démarrage pour qu'il sache qu'un initramfs va être utilisé. Par exemple, si le fichier initramfs est stocké dans, alors la configuration dans pourrait ressembler à ceci :

En utilisant genkernel
Gentoo's kernel building utility,, can be used to generate an initramfs, even if was not used to configure and build the kernel.

To use for generating an initramfs, it is recommended all necessary drivers and code that is needed to mount the  and  file systems be included in the kernel (not as modules). Then, call as follows:

Selon votre système, il peut être nécessaire d'ajouter une, ou plus, des options suivantes :

Une fois terminé, le fichier initramfs résultant est stocké dans votre répertoire.

En utilisant dracut
The utility is created for the sole purpose of managing initramfs files. It uses a highly modular approach on what support is to be included and what is not to be included.

To install, make special care to include support for the correct value(s) in the DRACUT_MODULES variable. This variable can be set in to include support for system specific setups:

It is advisable to set (or unset) the modules needed. After configuring the DRACUT_MODULES variable in, to install the Dracut utility.

The next step is to configure by editing. In the configuration file, which is well commented, in order to add support for needed modules.

Once configured, create an initramfs by calling as follows:

The resulting image supports generic system boots based on the configuration in. It is also possible to generate an initramfs specifically tailored to your system (which tries to detect the needed tools, drivers, etc. from the existing system). If the modules and drivers are built into the kernel (not as separate modules and references to the firmware), then the  option can be added:

Pour plus d'informations, jetez un coup d'œil aux page de manuel  et.

Ressources spécifiques à Gentoo

 * Initramfs sur le wiki officiel de Gentoo
 * Dracut sur le wiki officiel de Gentoo


 * The ramfs-rootfs-initramfs.txt file within the Linux kernel documentation.