Důvod, proč switch_root
nefunguje na příkazovém řádku je tento kód v 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();
}
Nejste PID 1, takže spadáte do této bb_show_usage
. Z toho vyplývá, že switch_root
příkaz ve vašem initramfs init skriptu by měl spustit switch_root
s exec
. tj.
exec switch_root ...
Další problém s chybami „nenalezeno“ je pravděpodobně proto, že sdílené knihovny potřebné pro spustitelné soubory nebyly nalezeny, protože kořenový souborový systém initramfs je nemá. Pokud můžete získat switch_root
pracovat s exec
, pak je pravděpodobné, že chyba „nenalezeno“ zmizí.