Como desligar quando não há systemd / init (por exemplo, usando init = / bin / bash)?

9

poweroffreclama que não pode se conectar ao systemd via DBus (é claro, não está vivo). Eu tinha syncseguido por kill $$, pensando que pid 1 morrendo seria cue o kernel para desligamento, mas que causou um kernel panic. Então segurei o botão liga / desliga para forçar o desligamento.

Qual é a maneira mais adequada de desligar neste cenário?

JoL
fonte
Há uma premissa implícita não declarada da pergunta de que o conjunto de ferramentas systemd está instalado. Quando "não há systemd" na verdade significa que nenhum conjunto de ferramentas systemd está instalado, e é assim que o título também pode ser lido, as respostas são bem diferentes; e isso provavelmente vale uma pergunta separada por si só.
JdeBP
@JdeBP Você está certo que, lendo apenas o título e ignorando a init=/bin/bashdica / implicação, é ambíguo se o systemd estiver instalado ou não. Eu quis dizer que não há nenhum systemd em execução . De qualquer forma, não tendo o systemd em execução, pensei que o conjunto de ferramentas do systemd seria inútil e que as respostas usariam outros meios, como o sysrq.
JOL

Respostas:

10

Desmonte os sistemas de arquivos que você montou. O sistema de arquivos raiz é um caso especial; para isso você pode usar mount / -o remount,ro. No Linux, umount /também funciona, porque é efetivamente convertido no comando anterior.


Dito isto, você não precisa se preocupar em desmontar demais, a menos que

  1. Você montou um sistema de arquivos antigo como o FAT - usado pela partição do sistema EFI - ou ext2, que não implementa o diário ou equivalente. Com um sistema de arquivos moderno, syncé suposto ser suficiente, e o sistema de arquivos se reparará muito rapidamente na próxima inicialização.
  2. Você pode ter deixado um processo em execução que grava no sistema de arquivos e pretendia desligá-lo corretamente. Nesse caso, é útil tentar desmontar os sistemas de arquivos, porque umount falharia e mostrava um erro ocupado para lembrá-lo sobre o gravador restante.

O acima é a parte importante. Depois disso, você também pode desligar convenientemente o hardware usando poweroff -f. Ou reinicie com reboot -f.

Há um systemdequivalente espec�ico de poweroff -f: systemctl poweroff -f -f. No entanto, poweroff -ffaz a mesma coisa e systemdsuporta esse comando, mesmo que tenha sido criado sem compatibilidade com o SysV.


Tecnicamente, lembro que meu disco rígido USB foi documentado como exigindo "remoção segura" do Windows ou equivalente. Mas esse requisito não é seguro para powerfail e o Linux não faz isso durante um desligamento normal de qualquer maneira. É melhor interpretado como significando que você não deve movimentar o disco rígido enquanto ele gira, inclusive tentando desconectá-lo. Um desligamento total deve parar a unidade girando. Você provavelmente pode ouvir, sentir ou ver se não para :-).

sourcejedi
fonte
Só para você saber, não estou esquecendo de aceitar. Só que vi o conselho de esperar um pouco antes de aceitar uma resposta para permitir que outras pessoas (talvez em fusos horários diferentes) vejam a pergunta e tenham a chance de fornecer suas próprias respostas.
JOL
sync()é suficiente para ext2. Ele reclamará de estar sujo, mas não será realmente corrompido, exceto pelas informações resumidas. Geralmente considero init = / bin / bash ou qualquer equivalente local como uma situação de emergência.
Joshua
@Joshua ext2 fsck é incrível . Mas o desempenho do fsck em sistemas de arquivos grandes é muito pior do que a reprodução em um diário. Em uma situação de emergência, você não quer se atrasar devido a uma desmontagem imunda.
sourcejedi
Você sabe sobre fsck.mode=skipcerto?
Joshua
3
@ Josué, que é relevante por quê? Se você fizer uma desmontagem impura, será necessário reparar o FS. Não use fsck.mode=skippara inicializar normalmente após uma desmontagem imunda!
sourcejedi
5

Simplesmente executarei abaixo de dois comandos:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Supondo que a chave mágica esteja ativada no kernel

SHW
fonte
4

Ok, então me ocorreu que eu tinha a opção exec init. De lá, eu provavelmente seria capaz mais tarde poweroff. Eu me pergunto se existem alternativas melhores, no entanto.

JoL
fonte
@ G-Man, ele não iniciará o processo de inicialização normal e, eventualmente, fornecerá seu shell normal?
Muru
2
@muru Você poderia fazer exec init 0. Isso não funcionará com todos os sistemas init, mas os mesmos passarão por uma sequência de desligamento.
Austin Hemmelgarn
1
Eu acho que essa é uma resposta muito boa por outros motivos; principalmente porque a maioria dos casos em que o desligamento não é tão desejado quanto a reinicialização e isso evita a reinicialização depois de corrigir o dano.
Joshua
1
@ Joshua Isso é conveniente, mas se você quiser ser mais seguro, geralmente é uma boa ideia verificar se o processo de inicialização completo funciona :-).
sourcejedi
3

Efetivamente, você deseja chamar o reboot (2) syscall.

Duas maneiras de fazer isso:

  1. Executar reboot -fou poweroff -f, isso deve chamar reboot(2)diretamente.

  2. Se você estiver no terminal virtual real do Linux (não no emulador de terminal da GUI), pressionando Ctrl+ Alt+ Delete.

Observe que o atalho de teclado pode ser desativado por algum programa de espaço do usuário (geralmente init); quando desativado, o atalho envia um sinal para init.

Todos os comandos acima devem ser executados após a desmontagem de todos os discos ou a remontagem como somente leitura e a execução da sincronização; caso contrário, você poderá perder dados não escritos. Se o seu shell for o único processo em execução, a sincronização poderá ser suficiente.

Lie Ryan
fonte
1

Você pode usar as teclas Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) para desligar o computador.

Para desligar corretamente, você pode usar o seguinte (formulário de cotação Wikipedia):

Um uso comum da chave mágica SysRq é executar uma reinicialização segura de um computador Linux que foi bloqueado ( abrev . REISUB ). Isso pode impedir a necessidade fsckde reinicialização e dá a alguns programas a chance de salvar backups de emergência de trabalho não salvo. [5]   O QWERTY (ou AZERTY) mnemónicas: " R aising E lephants I s S S L tterly B oring", " R eboot E ven I f S istema L tterly Broken "ou simplesmente a palavra" BUSIER ", lida para trás, costuma ser usada para lembrar a seguinte sequência de teclas SysRq:

  • un Raw (controle o teclado do X),
  • t Erminate (envie o SIGTERM a todos os processos, permitindo que eles terminem normalmente),
  • k Ill (envie SIGKILL para todos os processos, forçando-os a terminar imediatamente),
  • Sync (liberar dados para o disco),
  • Unmount (remontar todos os sistemas de arquivos somente leitura),
  • re Boot.

Mas substituindo o último B por O (para azerty / qwerty) por "power O ff"

breversa
fonte