Alguma maneira de reiniciar uma máquina Linux via SSH se o sistema de arquivos raiz não estiver funcionando?

15

Apenas como uma curiosidade; algo deu errado com uma máquina Linux, fazendo o sistema de arquivos raiz aparecer como "64Z". Alguns comandos funcionam, como top,, dfe kill, mas outros, como reboot"comando não encontrado" (como ele não consegue ler o sistema de arquivos raiz), chmodsurgem com uma falha de segmentação.

Existe alguma maneira de reiniciar o sistema de qualquer maneira, ou seja, sem o rebootprograma? Eu tentei kill -PWR 1(enviando SIGPWR para init), mas isso não pareceu fazer nada.

É principalmente uma curiosidade acadêmica. O colega de laboratório que estava realizando qualquer trabalho de banco de dados grande que causou a falha estará reiniciando fisicamente a máquina em breve.

gatoatigrado
fonte
Esperemos que isto irá me salvar do problema da próxima vez ... [ cyberciti.biz/tips/reboot-linux-box-after-a-kernel-panic.html ]
gatoatigrado
Você viu que o problema com o root fs provocou um pânico no kernel?
Hanan N.

Respostas:

25

Tente reiniciar com a chave sysrq mágica:

echo b > /proc/sysrq-trigger

Para mais informações, leia a documentação do wiki ou do kernel .

pressa
fonte
1
Obrigado! Isso reiniciou o sistema. (Infelizmente, o que aconteceu com o sistema de arquivos raiz parece irrecuperável ... triste).
gatoatigrado
5

Um RAC (cartão de acesso remoto) ou iLO (luzes apagadas integradas) ou MP (processador de gerenciamento) fornecerá meios de redefinir seu servidor.

Por exemplo, se você possui um Dell PowerEdge com uma placa RAC (chamada DRAC), é possível ligar e desligar o servidor via ssh:

ssh drac "racadm serveraction powercycle"

A outra opção é usar a GUI da Web para RAC / iLO e fazer o mesmo lá.

Também existe um padrão aberto para esse material: IPMI.

Nils
fonte
3

Ainda mais interessante do que a resposta do @Rush é a capacidade de reiniciar (e muito mais) o sistema, mesmo que o sistema não esteja respondendo ao teclado. Mas deve responder aos pacotes de ping (ICMP).

Veja aqui a documentação completa e instruções sobre como implementá-lo.

Hanan N.
fonte
4
Que tal dar um resumo das instruções / resumo dos princípios em vez de apenas um link?
kizzx2
você precisa fazer um pouco de configuração para essa abordagem, mas definitivamente uma idéia interessante.
gatoatigrado
Isso parece interessante - mas não há um risco de segurança considerável envolvido? Permitir que um servidor seja reinicializado por meio de um único pacote ICMP parece um ataque de negação de serviço esperando para acontecer.
bgvaughan
@ bgvaughan: você está certo, e no link que forneci acima, existem os prós e os contras a respeito, e um deles é a segurança, embora você possa restringir quem pode fazer isso.
Hanan N.
2

A maneira mais fácil é geralmente alterar apenas o nível de execução.

No Linux, você pode fazer:

Prompt# init 6

Mais informações aqui: http://linux.about.com/od/itl_guide/a/gdeitl36t04.htm

Patrick
fonte
1
Isso não funcionará nesta situação. O comando init está em / sbin (pelo menos no ubuntu), portanto, requer acesso ao sistema de arquivos.
ensolarada
1

Isso requer configuração prévia, mas se você está acostumado a travar uma máquina (por exemplo, porque está desenvolvendo um nível baixo), convém configurar um watchdog , ou seja, um kernel ou tarefas de usuário que a reinicialize automaticamente quando fica sem resposta. O Linux pode usar um watchdog de hardware se a sua placa-mãe tiver um, ou um watchdog de software caso contrário.

Gilles 'SO- parar de ser mau'
fonte