왜“shutdown -r now”가 Debian Linux의“reboot -f”와 다르게 동작합니까? -r now전혀 작동하지 않습니다. 나는 이후 발견했습니다

최근에 성가신 간헐적 NFS 클라이언트 / 서버 중단 마운트 포인트 문제를 처리해야했습니다. 클라이언트에서 문제가 발생하면 다른 이상한 동작과 함께 마운트를 해제 할 수 없습니다. 내가 지금 당장해야 할 유일한 해결책은 클라이언트 상자를 재부팅하는 것입니다.

그러나 shutdown -r now전혀 작동하지 않습니다. 나는 이후 발견했습니다 reboot -f하는 않는 시스템을 재부팅합니다. 왜? 맨 페이지를 읽었지만 내 질문에 대답하는 것은 없습니다.

shutdown -r now다르게 행동 합니까 reboot -f?

(NFS 문제를 계속 해결하고 있지만 여기서는 제 질문이 아닙니다.)



답변

종료 매뉴얼 페이지에서 :

TIME이 경과되면 shutdown은 요청을 init (8) 데몬으로 보내 시스템을 적절한 런레벨로 가져옵니다.

init시스템이 실행 레벨을 변경함에 따라 작업을 시작 및 중지합니다. 재부팅으로 인해 런레벨 6에 들어가면 시스템은 /etc/rc6.d의 모든 스크립트를 실행합니다. 시스템이에 응답하지 않기 때문에 ( NFS 문제가 있을 수 있음) shutdown스크립트 가 중단되어 종료 시퀀스가 ​​완료되지 않을 수 있습니다. 실제로 runlevel 6으로 변경할 때 init가 마지막으로 실행하는 것은입니다 ./etc/rc6.dK05nfs-commonreboot -d -f -i

reboot -f 모든 스크립트를 건너 뛰고 시스템을 직접 재부팅합니다.


답변

shutdowninit종료 절차를 시작하도록 지시 합니다. 여기에는 로그인 한 사용자에게 시스템이 종료되고 있음을 알리고 모든 프로세스를 정상적으로 종료하며 드라이브 마운트 해제 및 동기화 등이 포함됩니다. IO를 기다리면서 프로세스가 중단되기가 매우 어려워서 중단 된 NFS 마운트를 마운트 해제 할 수 없기 때문에 여기에서 중단됩니다.

reboot -f반면에 서버는 아무 것도하지 않고 즉시 서버를 재부팅합니다. ( reboot프로그램 init은 서버를 종료하기 위해 호출합니다. -f플래그가 없으면 init현재 재부트 중이라고 생각 하는지 확인 하고 그렇지 않은 경우 shutdown프로세스를 시작하기 위해 대신 호출 합니다).


답변

‘reboot -f’는 실행 레벨 0으로 들어 가지 않기 때문에 OS에 CPU를 직접 초기화하도록 지시합니다. 가장 가까운 Linux 상자의 맨 페이지에 다음과 같이 나와 있습니다.

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

종료 매뉴얼 페이지에 자세한 내용이 있습니다.


답변

intrNFS 마운트 에서 옵션 을 사용하면 shutdown -r nowNFS IO에서 대기중인 프로세스가 종료 될 수 있습니다. 이로 인해 파일이 손상 될 수 있지만 더 이상 만들 수 없습니다 shutdown -f.