Por que “shutdown -r now” se comporta de maneira diferente de “reboot -f” no Debian Linux?

11

Recentemente, tive de lidar com um incômodo problema intermitente de ponto de montagem pendente cliente / servidor do NFS. Quando o problema ocorre no cliente, não consigo desmontar, junto com algum outro comportamento estranho. A única resolução imediata que tenho até hoje é reiniciar a caixa do cliente.

Mas shutdown -r now não funciona de todo. Eu descobri desde reboot -f , que faz reiniciar o sistema. Por quê? Eu li as man pages mas nada parece responder à minha pergunta.

Por que o shutdown -r now se comporta de maneira diferente de reboot -f ?

(continuo a resolver a questão do NFS, mas essa não é a minha pergunta aqui.)

    
por Stu Thompson 28.03.2011 / 16:51

4 respostas

18

Na página de manual do encerramento:

Once TIME has elapsed, shutdown sends a request to the init(8) daemon to bring the system down into the appropriate runlevel.

init inicia e interrompe as tarefas quando o sistema altera os níveis de execução. Ao entrar no runlevel 6 devido a uma reinicialização, o sistema executa todos os scripts em /etc/rc6.d. Como o seu sistema não está respondendo a shutdown , é provável que um script em /etc/rc6.d (possivelmente K05nfs-common dado seus problemas de NFS) esteja bloqueado, não permitindo que a sequência de encerramento seja concluída. Na verdade, a última coisa que o init executa ao mudar para o runlevel 6 é reboot -d -f -i .

reboot -f ignora todos os scripts e reinicializa o sistema diretamente.

    
por 28.03.2011 / 17:02
12

shutdown instrui init para iniciar o procedimento de desligamento, o que envolve permitir que usuários logados saibam que o sistema está sendo encerrado, matando todos os processos normalmente, desmontando e sincronizando unidades, e assim por diante. Você está ficando preso aqui porque os processos presos à espera por IO tendem a ser muito difíceis de matar, e sua montagem NFS presa não pode ser desmontada.

reboot -f , por outro lado, reinicia imediatamente o servidor sem fazer nada disso. ( reboot é o programa init chamadas para desligar o servidor. Sem o sinal -f , ele verificará se init acha que está reinicializando e, caso contrário, chamará shutdown para iniciar o processo).

    
por 28.03.2011 / 17:01
4

Como 'reboot -f' não entra no nível de execução 0 - ele informa ao sistema operacional para reinicializar a CPU diretamente. A página man na minha caixa Linux mais próxima diz:

 -f     Force halt or reboot, don't call shutdown(8)

A página do manual do encerramento explica mais.

    
por 28.03.2011 / 16:59
1

Se você usar a opção intr em suas montagens NFS, então shutdown -r now deve ser capaz de eliminar processos que aguardam a conclusão do I / O NFS. Isso pode resultar em corrupção de arquivos, mas provavelmente não mais do que shutdown -f cria.

    
por 28.03.2011 / 19:43

Tags