Ahora, a la explicación detallada de lo que había puesto arriba.
Si bien tanto un initramfs como un initrd tienen el mismo propósito, hay 2 diferencias. La diferencia más obvia es que un initrd se carga en un disco RAM. Consiste en un sistema de archivos real (típicamente ext2) que está montado en un disco ram. Un initramfs, por otro lado, no es un sistema de archivos. Es simplemente un archivo cpio (comprimido) (de tipo newc) que se descomprime en un tmpfs. Esto tiene el efecto secundario de hacer que initramfs sea un poco más optimizado y capaz de cargarse un poco antes en el proceso de arranque del kernel que un initrd. Además, el tamaño de los initramfs en la memoria es menor, ya que el núcleo puede adaptar el tamaño de los tmpfs a lo que realmente se carga, en lugar de depender de tamaños de disco ram predefinidos,
También hay otra diferencia de efectos secundarios: cómo se maneja el dispositivo raíz (y cómo cambiarlo). Dado que un initrd es un sistema de archivos real descomprimido en ram, el dispositivo raíz debe ser el disco ram. Para un initramfs, hay un kernel "rootfs" que se convierte en el tmpfs en el que se desempaqueta initramfs (si el kernel carga un initramfs; si no, entonces el rootfs es simplemente el sistema de archivos especificado a través del parámetro de arranque root = kernel), pero este rootfs provisional no debe especificarse como el parámetro root = boot (y no habría forma de hacerlo, ya que no hay ningún dispositivo conectado). Esto significa que aún puede pasar su dispositivo raíz real al núcleo cuando usa un initramfs. Con un initrd, debe procesar cuál es el dispositivo raíz real usted mismo. Además, desde lo "real" el dispositivo raíz con un initrd es el ramdisk, el núcleo realmente tiene que cambiar los dispositivos raíz de un dispositivo real (el ramdisk) al otro (su raíz real). En el caso de un initramfs, el espacio initramfs (tmpfs) no es un dispositivo real, por lo que el kernel no cambia dispositivos reales. Por lo tanto, mientras que el comando pivot_root se usa con un initrd, se debe usar un comando diferente para un initramfs. Busybox proporciona switch_root para lograr esto, mientras que klibc ofrece new_root. Se debe usar un comando diferente para un initramfs. Busybox proporciona switch_root para lograr esto, mientras que klibc ofrece new_root. Se debe usar un comando diferente para un initramfs. Busybox proporciona switch_root para lograr esto, mientras que klibc ofrece new_root.
pivot_root
en el pasado para initramfs,switch_root
no existía en ese momento.switch_root
parece ser un método de conveniencia depivot_root
la que hace un poco más de limpieza y también se mueve/proc
/sys
y/dev
etc, y no sólo la propia raíz