Após algumas atualizações recentes, meu computador não inicializa mais! Aqui está o que eu poderia determinar:
- Este é um computador muito recente que me foi fornecido pela TI corporativa. Possui um CPU Intel recente (geração Skylake).
- O computador executa o Ubuntu 16.04.
- O computador foi inicializado corretamente pela última vez em março. O problema provavelmente se deve a uma atualização de software ou a um erro de hardware.
- Eu tenho outro computador executando o 16.04 com praticamente o mesmo software instalado (eu usei
apt-clone
) e funciona muito bem. Possui hardware diferente (também amd64, mas CPU diferente, GPU diferente etc.). - O kernel inicia, o initrd funciona corretamente. Quando inicializo com uma tela inicial no modo gráfico, a senha do meu volume dm-crypt é solicitada e a última coisa que vejo é que ele foi montado com sucesso.
- O travamento ocorre antes que eu receba um prompt de logon. Quando o computador trava, é difícil. Mesmo Alt+ SysRqnão responde. A CPU está evidentemente fixada em 100%, já que os ventiladores são ativados a todo vapor.
- Eu ainda tenho o kernel que estava executando antes de reiniciar. Quando seleciono este kernel no menu Grub, recebo o mesmo bloqueio. Portanto, parece que este é um bug do kernel pré-existente que é acionado por outra coisa - mas o que?
- Se eu desligar a tela inicial (remover
splash
dalinux
linha de comando no Grub), vejo vários serviços sendo iniciados, e ela trava. Eu posso obter um shell raiz adicionando
init=/bin/sh
àlinux
linha de comando no Grub. Eu posso ir mais longe adicionandosystemd.unit=basic.target systemd.shell
Isso inicia vários serviços e executa um shell raiz no tty9.
- Se eu executar a
systemctl start multi-user.target
partir desse shell raiz, o computador trava. Portanto, presumivelmente, o problema é desencadeado por um desses serviços. - Corri
systemctl list-dependencies multi-user.target
para ver quais serviços são iniciados. Comecei manualmente as dependências listadas uma a uma e tudo começou bem.
Portanto, isso parece um bug de hardware (já que ocorre em um computador, mas não no outro), que é acionado por algum software. Mas qual software? Como o computador trava com tanta força, não consigo obter nenhum registro. Nem consigo obter nenhuma saída útil do console.
Técnicas úteis de depuração:
- Alt+ SysRq: tecla mágica SysRq , que permite fazer coisas como uma reinicialização de emergência. Ele acessa o kernel em um nível muito baixo, portanto funciona em todas as falhas, exceto as piores. No meu caso, o Alt+ SysRqnão responde, o que mostra a profundidade da falha.
- Para modificar os parâmetros de inicialização, pressione e segure Shiftalguns segundos após ligar a energia. Você precisa pressioná-lo depois que o BIOS inicializar o teclado, mas antes que o sistema operacional seja inicializado. Isso faz o menu Grub aparecer.
- No menu Grub, pressione epara editar a linha de comando para uma entrada de menu. Para alterar os parâmetros de inicialização do Linux, navegue até a linha que começa com
linux
. Em um Ubuntu moderno, você encontrará kernels antigos em "Opções avançadas para o Ubuntu". Depois de fazer as alterações desejadas na linha de comando, pressione Ctrl+ xpara inicializar. Qualquer alteração feita aqui é apenas para esta inicialização, não é salva no disco. - Algumas opções úteis na
linux
linha de comando:quiet nosplash
oculta quase todas as mensagens de inicialização. Remova-os para obter mensagens no console durante a inicialização, o que é necessário para ter alguma chance de diagnosticar problemas.recovery
fornece um shell raiz com quase nenhum serviço. Você precisará saber a senha root. A entrada do menu "modo de recuperação" usa isso.init=/bin/sh
fornece um shell raiz sem serviços. Para retomar a inicialização normal, executeexec init
. Você pode passar as opções systemd neste momento, por exemplo,exec init --unit=basic.target
para iniciar o init e alguns serviços (observe que isso não inicia nenhuma maneira de efetuar login, portanto é melhor ter um shell em execução em outro console). Observe que o sistema de arquivos raiz é montado como somente leitura; executarmount -o remount,rw /
para poder escrever nele.systemd.unit=basic.target
inicia um conjunto muito básico de serviços. Observe que isso não inclui nenhuma maneira de fazer login! Você pode tornar isso o padrão executandosystemctl set-default basic.target
em um prompt raiz. Para restaurar o destino padrão original, executesystemctl set-default graphical.target
(ousystemctl set-default multi-user.target
para um servidor sem GUI).systemd.debug-shell
inicia um shell raiz no tty9. Você pode habilitar isso para cada inicialização executandosystemctl enable debug-shell
em um prompt raiz. Não se esqueça de desativar isso depois de resolver o problemasystemctl disable debug-shell
. Pressione Alt+ F9para alternar para tty9.- Veja também dicas do sistema Fedora , dicas sobre problemas de inicialização do Arch Linux .
noipbp
principalmente como uma maneira de inicializar o sistema afetado. Eu acho que a melhor solução aqui é atualizar o kernel.