Parando um loop de reinicialização infinito de /etc/rc.local

0

Resumindo, uma infeliz série de erros de desenvolvimento de minha parte levou /etc/rc.local a executar rapidamente reboot (em um Pi no meu caso). A máquina agora está presa em um loop de reinicialização infinito.

Posso pará-lo? Ele é reinicializado antes que o prompt de login seja exibido e eu não teria tempo de pará-lo, mesmo que isso não acontecesse.

Existe algum atalho de teclado mágico que impeça a execução do /etc/rc.local?

Eu encontrei Saindo de um loop de reinicialização infinito na inicialização (rc.local) aqui, mas que na verdade lida com a prevenção preventiva do problema, não corrigindo-o após o fato. Ops.

    
por Jason C 28.01.2017 / 19:09

1 resposta

2

Em um PC, você editaria a linha de comando do kernel e (por exemplo,) acrescentaria um de:

  • systemd.unit=emergency.target para obter apenas um shell (requer systemd);
  • systemd.unit=rescue.target para obter mais algumas coisas, então um shell (requer systemd);
  • single para inicializar no modo de usuário único, em sistemas init SysV. Não totalmente certo de que isso evitará rc.local em Wheezy; ou
  • init=/bin/bash , que evitaria iniciar o init, dando-lhe um shell (onde você poderia então remontar o sistema de arquivos raiz de leitura-gravação e editar o arquivo quebrado). Eu não estou totalmente certo em um Pi, porém, que isso lhe dará um teclado em funcionamento. E requer algum conhecimento, pois você estará executando sem um init configurando o sistema para você; você geralmente pode usar exec /sbin/init para continuar a inicialização. (Funciona com qualquer sistema init, porque você o ignora completamente).

Eu não acho que haja uma maneira de fazer isso em um Raspberry Pi a menos que você esteja usando o NOOBS. Nesse caso, manter pressionada a tecla Shift deverá obter uma interface de recuperação que permitirá editar cmdline.txt - e isso alterará a linha de comando do kernel. (Ou, provavelmente, basta editar o arquivo quebrado - sugiro fazer isso, se possível)

A outra alternativa é tirar o cartão SD do Pi, e usar um leitor de cartão SD para montar a partição de inicialização (que eu acredito que seja FAT32, então você deve ser capaz de fazer isso no Windows) ou a raiz partição (que provavelmente é ext4, então você precisa estar executando o Linux). Em seguida, você pode alterar a linha de comando do kernel em cmdline.txt ou corrigir diretamente seu rc.local . Se você editar cmdline.txt no Windows, certifique-se de usar um editor que entenda as terminações de linha do estilo Unix e não faça bagunça delas.

Pessoalmente, minha abordagem seria montar o sistema de arquivos raiz do Pi em uma caixa Linux e editar o rc.local quebrado.

Uma vez que você tenha o seu Pi reiniciado, lembre-se de remover as opções de recuperação de cmdline.txt , é claro.

    
por 28.01.2017 / 19:45

Tags