Dans la mesure de mes connaissances, initrd agit comme un périphérique bloc, nécessitant donc un pilote de système de fichiers (tel que ext2). Le noyau doit avoir au moins un module intégré pour détecter le système de fichiers de initrd
. Dans cet article, Présentation de l'initramfs, un nouveau modèle pour les disques RAM initiaux, il est écrit que :
Mais les ramdisks gaspillent en fait encore plus de mémoire en raison du cache. Linux est conçu pour mettre en cache tous les fichiers et entrées de répertoires lus à partir ou écrits sur des périphériques blocs, donc Linux copie les données du ramdisk vers et depuis le "cache de pages" (pour les données de fichiers), et le "cache d'entrées d'entrée" (pour les entrées de répertoire). L'inconvénient du ramdisk se faisant passer pour un périphérique bloc est qu'il est traité comme un périphérique bloc.
Qu'est-ce que le cache de pages
et le cache d'entrées d'entrée
? Dans le paragraphe, est-ce que cela signifie que les données sont dupliquées car le ramdisk
est traité comme un périphérique bloc, donc toutes les données sont mises en cache?
En revanche, le ramfs
:
Il y a quelques années, Linus Torvalds a eu une idée intéressante : Et si le cache de Linux pouvait être monté comme un système de fichiers? Il suffit de garder les fichiers en mémoire cache et de ne jamais s'en débarrasser jusqu'à ce qu'ils soient supprimés ou que le système redémarre? Linus a écrit un petit wrapper autour du cache appelé "ramfs", et d'autres développeurs de noyau ont créé une version améliorée appelée "tmpfs" (qui peut écrire les données dans l'espace d'échange, et limiter la taille d'un point de montage donné pour qu'il se remplisse avant de consommer toute la mémoire disponible). Initramfs est une instance de tmpfs.
Ces systèmes de fichiers basés sur la RAM grandissent ou rétrécissent automatiquement pour s'adapter à la taille des données qu'ils contiennent. Ajouter des fichiers à un ramfs (ou étendre des fichiers existants) alloue automatiquement plus de mémoire, et supprimer ou tronquer des fichiers libère cette mémoire. Il n'y a pas de duplication entre le périphérique bloc et le cache, car il n'y a pas de périphérique bloc. La copie dans le cache est la seule copie des données. Et le mieux, ce n'est pas un nouveau code mais une nouvelle application pour le code de mise en cache Linux existant, ce qui signifie qu'il ajoute presque aucune taille, est très simple et repose sur une infrastructure extrêmement bien testée.
En résumé, le ramfs
est simplement un fichier ouvert et chargé en mémoire, n'est-ce pas?
Les deux initrd
et ramfs
sont compressés au moment de la compilation, mais la différence est que initrd
est un périphérique bloc décompressé pour être monté par le noyau au démarrage, tandis que ramfs
est décompressé via cpio en mémoire. Ai-je raison? Ou est-ce que ramfs
est un système de fichiers très minimal?
Enfin, jusqu'à ce jour, l'image initrd
est encore présentée dans le dernier noyau. Cependant, est-ce que cet initrd
est en fait le ramfs
utilisé actuellement et le nom est-il simplement à des fins historiques?