Eu usei kexec para carregar meu kernel com sucesso, mas está apenas imprimindo linhas dmesg. Como faço para sair disso para cair no prompt do initramfs? Ctrl-Alt-F2 apenas carrega uma tela preta e ctrl-c não faz nada.
Aqui está minha linha de comando kexec:
kexec -l $kernel --initrd=$initrd --command-line="root=UUID=... acpi=off ro text earlyshell debug showerr debuginitrd"
earlyshell deve me fornecer acesso a um shell, mas isso não acontece. Sem essa linha de comando, acabo em um loop de script do qual não consigo sair mesmo com ctrl-c.
Resolvido:
O argumento do kernel:
realmente não lançou um shell?? Mas rodando o kernel com o argumento:
me deu o shell initramfs.
Este recurso foi muito útil: https://wiki.debian.org/InitramfsDebug
Você deu o correto
--initrd=
para o kexec?Acabei de instalar e tentei o kexec. Funciona se eu for
E então
kexec -e
. (não tenho criptografia...)Tentei primeiro seguir a dica "use
/proc/cmdline
" mas não funcionou. Para mim, parece que você tem que dar a--initrd=
opção extra.Você precisa do "prompt initramfs" para fornecer a senha (para poder montar o dispositivo criptografado)?
Normalmente minha
/proc/cmdline
aparência é assimApós o kexec acima (e reboot)
/proc/cmdline
fica assimO nome do kernel e do initrd sumiram! Apenas a parte --append é deixada. Isso nem me confunde muito: apenas adiciona uma nova faceta à pergunta: a imagem do kernel e a imagem initrd são opções do kernel ? Eles fazem parte da linha de comando (kernel) ?
Eu uso o shell uefi para inicializar. Eu sei o quão importante este "initrd=" é. Com um carregador de inicialização (grub), deve funcionar da mesma forma. É apenas uma maneira diferente (indireta) de escolher um kernel, um initrd (se necessário / desejado), um root, um init e todas as "opções de kernel" normais
Um initrd padrão faz isso:
carregar módulos para acessar root (meu caso: sata, ahci para minha unidade SSD SIMPLE)
monte esse dispositivo (dado por root=/dev/xxx)
"switch_root" para ele (inclui executar /sbin/init)
No seu caso, você precisa de um prompt de senha (?), e não de um módulo sata. Mas o resultado é o mesmo: o root não pode ser montado.
Descubra como seu carregador de boot inicializa com sucesso e tente imitá-lo com o kexec.
adicionado:
o initrd (nomes não importam...) é iniciado por padrão com o
/init
script (confira ardinit=
opção de inicialização). Este é o "espaço de usuário inicial", correspondente ao earlyshell. Parece que com issoinitramfs-tool
você tem pontos de interrupção suficientes para controlar /init e os scripts que são chamados.Caso contrário, pode-se extrair esse initrd (com
gzip
ecpio
), alterar /init (ou adicionar /init_new e ir rdinit=/init_new como opção de inicialização) e arquivar as pastas novamente. Este comando cpio eu nunca havia usado antes, mas na verdade é mais simples que o tar. Apenas um pouco diferente.mkinitcpio
é uma ferramenta para isso. Ele menciona o espaço do usuário inicial e a criptografia logo no início. É, acabei de ler, uma coisa do archlinux e também tem "ganchos" tardios e iniciais. Mesma função que initramfs-tools, eu acho.