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
Beaucoup d'utilisateur ne se soucient pas de ce système de fichiers virtuel. Leur système utilise un schéma de partitionnement simple, sans pilote exotique ou sans configuration particulière (comme un système chiffré), et ainsi, le noyau Linux est en mesure de passer le contrôle au binaire  sur leur système. Mais, pour beaucoup de système, un système de fichiers virtuel initial est presque indispensable.

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
Dès lors que le noyau Linux a le contrôle sur le système (qu'il obtient après avoir été chargé par le chargeur de démarrage), il prépare ses structures mémoire et ses pilotes comme il le peut. Il passe ensuite le contrôle à une application (en général ) dont la tâche et de compléter la préparation du système et de s'assurer que, à la fin du processus de démarrage, tous les services nécessaires sont démarrés et que l'utilisateur est en mesure de se connecter.L'application   accomplit cela en lançant, entre autres services, le démon    qui chargera ensuite et préparera le système en fonction des périphériques détectés. Lorsque   est lancé, tous les systèmes de fichiers qui n'ont pas encore été montés le sont, et le reste des services est démarré.

Pour les systèmes dans lesquels tous les fichiers et outils nécessaires résident sur le même système de fichiers, l'application   peut parfaitement contrôler la suite du processus de démarrage. Mais lorsque des systèmes de fichiers multiples sont définis (ou des installations plus exotiques ont lieu), ceci peut devenir plus problématique :


 * 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.


 * Si le système de fichier root est chiffré, alors le noyau Linux ne sera pas capable de trouver l'application   ce qui conduira à un système non amorçable.

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

Le disque root initial
initrd est une structure de disque en mémoire (ramdisk) qui contient les outils et scripts nécessaires au montage les systèmes de fichiers requis avant que le contrôle ne soit passé à l'application   application sur le système de fichier root. Le noyau Linux déclenche le script de configuration (ordinairement appelé   mais ça n'est pas une obligation) sur ce disque root, qui prépare le système, commute vers le système de fichiers root réel et appelle ensuite.

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
Un système de fichiers virtuel initial (initramfs) est un système de fichiers initial en mémoire ram basé sur tmpfs (un système de fichiers léger de taille flexible, en mémoire), qui n'utilise pas un périphérique de blocs séparé (ainsi aucun cache n'est nécessaire, ce qui élimine les surcoûts mentionnés précédemment). Tout comme le initrd, il contient les outils et les scripts nécessaire au montage des systèmes de fichiers avant que le contrôle e soit passé à l'application   sur le système de fichiers root réel.Ces outils peuvent être, des couches d'abstraction du chiffrage (pour les système chiffrés), des gestionnaire de volumes logiques, le raid logiciel, des chargeurs de systèmes de fichiers basés sur des pilotes bluetooth, etc.

Le contenu de l'initramfs est créé en créant une archive cpio. est une ancienne (mais qui a fait ses preuves) solution d'archivage de fichiers. Les archives produites sont appelées fichiers cpio. Vous pouvez le comparer à. Il a été choisi ici parce que le code est plus facile à mettre en œuvre et qu'il prend en charge des fichiers de périphériques que  ne prend pas en charge.

Tous les fichiers, les outils, les bibliothèques, les fichiers de configuration (si applicables), etc. sont placés dans l'archive cpio. L'archive est ensuite compressée avec l'utilitaire  et stockée avec le noyau Linux. Le chargeur d'amorçage le présente ensuite au noyau Linux au moment du démarrage de manière à ce que le noyau sache qu'un système de fichiers virtuel initial est nécessaire.

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
Pour créer un système de fichiers virtuel initial, il est important de connaître quels pilotes, scripts et outils additionnels sont nécessaires au démarrage du système. Par exemple, si vous utilisez LVM, vous devez disposer des outils de prise en charge de LVM dans l'initramfs. De la même manière, si vous utilisez le RAID logiciel, vous avez besoin de , et ainsi de suite.

Quelques outils existent pour vous aider à créer l'archive compressée du système de fichiers virtuel initial pour votre système. Mais si vous tenez à conserver un contrôle total, vous pouvez créer facilement votre propre initramfs également.

Once created, you will need to adjust the bootloader configuration to tell it that an initramfs is to be used. For instance, if the initramfs file is stored as, then the configuration in  could look like so:

Using genkernel
Gentoo's kernel building utility,, can be used to generate an initramfs, even if you didn't use   to configure and build your kernel.

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

Depending on your system, you might want to add one or more of the following options:

When finished, the resulting initramfs file will be stored in your.

Using dracut
The  utility is created for the sole purpose of managing initramfs files. It uses a highly modular approach on which support you want to include and which not.

When you install, you will need to take care to include support for the correct. This is a variable you can set in to include support for specific setups:

It is advisable to set (or unset) those modules you need (and don't need). Afterwards,  to install the utility on your system.

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

Once configured, create an initramfs by calling  as follows:

The resulting image supports generic system boots based on the configuration in. You can also opt to generate an initramfs specifically tailored to your system (in which  tries to detect the needed tools, drivers, etc. from your existing system). If you know that the needed support (code and drivers) is built in in your kernel (and not as module), then you can even add in :

For more information, check out the  and   manual pages.

Gentoo-specific

 * Initramfs on Gentoo-wiki.com
 * Initramfs on the official Gentoo Wiki
 * Dracut on the official Gentoo Wiki

General resources

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

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Sven Vermeulen