Maintenant, pour l'explication détaillée de ce que j'avais mis ci-dessus.
Bien qu'un initramfs et un initrd servent le même but, il y a 2 différences. La différence la plus évidente est qu'un initrd est chargé dans un disque virtuel. Il se compose d'un système de fichiers réel (généralement ext2) qui est monté sur un disque virtuel. Un initramfs, d'autre part, n'est pas un système de fichiers. Il s'agit simplement d'une archive cpio (compressée) (de type newc) qui est décompressée dans un tmpfs. Cela a pour effet secondaire de rendre les initramfs un peu plus optimisés et capables de se charger un peu plus tôt dans le processus de démarrage du noyau qu'un initrd. De plus, la taille des initramfs en mémoire est plus petite, car le noyau peut adapter la taille des tmpfs à ce qui est réellement chargé, plutôt que de s'appuyer sur des tailles de disque virtuel prédéfinies,
Il existe également une autre différence d'effets secondaires: la façon dont le périphérique racine (et le passage à celui-ci) est géré. Puisqu'un initrd est un système de fichiers réel décompressé dans ram, le périphérique racine doit en fait être le ramdisk. Pour un initramfs, il y a un noyau "rootfs" qui devient le tmpfs dans lequel les initramfs sont décompressés (si le noyau charge un initramfs; sinon, le rootfs est simplement le système de fichiers spécifié via le paramètre de démarrage root = kernel), mais ce rootfs intérimaire ne doit pas être spécifié comme paramètre root = boot (et il n'y aurait aucun moyen de le faire, car il n'y a pas de périphérique attaché). Cela signifie que vous pouvez toujours transmettre votre véritable périphérique racine au noyau lorsque vous utilisez un initramfs. Avec un initrd, vous devez traiter ce que le véritable périphérique racine est vous-même. De plus, puisque le "vrai" le périphérique racine avec un initrd est le ramdisk, le noyau doit vraiment basculer les périphériques racine d'un périphérique réel (le ramdisk) à l'autre (votre vraie racine). Dans le cas d'un initramfs, l'espace initramfs (le tmpfs) n'est pas un vrai périphérique, donc le noyau ne change pas de vrais périphériques. Ainsi, alors que la commande pivot_root est utilisée avec un initrd, une commande différente doit être utilisée pour un initramfs. Busybox fournit switch_root pour accomplir cela, tandis que klibc propose new_root. une commande différente doit être utilisée pour un initramfs. Busybox fournit switch_root pour accomplir cela, tandis que klibc propose new_root. une commande différente doit être utilisée pour un initramfs. Busybox fournit switch_root pour accomplir cela, tandis que klibc propose new_root.
pivot_root
dans le passé pour les initramfs,switch_root
n'existait pas à l'époque.switch_root
semble être une méthode pratiquepivot_root
qui fait un peu plus de nettoyage et se déplace également/proc
/sys
,/dev
etc. et pas seulement la racine elle/
. Donc, d'après ma compréhension, cela pourrait être n'importe quel chemin et n'a rien à voir avec de véritables "disques".