Você precisa montar sua raiz na qual você irá alternar. Eu suponho que você já saiba como fazer isso. Basicamente é apenas mkdir /newroot; mount -r /dev/something /newroot
Em seguida, você precisa substituir seu shell de fallback em execução no momento. Ele está sendo executado com o PID 1 (você pode verificar isso com echo $$
) e o alvo de init precisa obter esse número novamente. Então você precisa de um exec
shell embutido para ser usado.
switch_root
aceita pelo menos dois argumentos: o diretório raiz a ser alternado e o nome do arquivo executável do init a ser executado após o switch.
Então você acabou de substituir seu shell de fallback:
exec switch_root /newroot /sbin/init
e /sbin/init
ganham novamente o PID 1 depois de alterar a raiz para /newroot
montado e ele pode continuar a inicialização.