La razón por la que switch_root
no funciona en la línea de comando es este código en busybox:
if (st.st_dev == rootdev || getpid() != 1) {
// Show usage, it says new root must be a mountpoint
// and we must be PID 1
bb_show_usage();
}
No eres PID 1, por lo que estás cayendo en este bb_show_usage
. La implicación es que el switch_root
el comando en su script de inicio initramfs debe ejecutar switch_root
con exec
. es decir,
exec switch_root ...
El otro problema con los errores "no encontrados" probablemente se deba a que no se encuentran las bibliotecas compartidas que necesitan los ejecutables, porque el sistema de archivos raíz initramfs no las tiene. Si puedes obtener switch_root
para trabajar con exec
, es probable que el error "no encontrado" desaparezca.