Linux에서 재부팅 프로세스는 어떻게 작동합니까?

Linux에서 재부팅 프로세스는 어떻게 작동합니까?

Linux 재부팅 프로세스가 어떻게 작동하는지 검색했는데 어디에서나 부팅/시작 프로세스만 찾았습니다. 머신의 불법 재부팅을 가정하여 실행 중인 프로세스/서비스를 어떻게 복구합니까(예: 데이터베이스가 실행 중이고 머신을 강제 재부팅하는 경우)?

답변1

제어된 재시작은 기본적으로 정상적인 종료이지만, 마지막에 전원을 끄는 대신 하드웨어 재설정 프로세스가 적용되어 기본적으로 부팅할 때와 마찬가지로 펌웨어가 시스템을 인계받아 다시 시작합니다. (펌웨어가 시스템이 "콜드" 상태에서 부팅되지 않았음을 감지할 수 있는 경우 일부 테스트를 단축하거나 생략하도록 선택할 수 있습니다.)

시스템 상태를 자동으로 저장하는 시스템 전체 메커니즘은 없습니다. ifconfig또는 ip명령을 사용하여 네트워크 인터페이스를 구성했지만 해당 구성 파일을 편집하여 구성을 유지하지 않은 경우,구성이 손실됩니다.재부팅할 때마다. 서비스를 수동으로 시작했지만(예: service <something> start또는 systemctl start <something>) 부팅 시 자동으로 시작되도록 설정하지 않은 경우(예: chkconfig <something> on또는 systemctl enable <something>) 서비스는아니요재부팅 후 자동으로 시작됩니다.

일부 시스템 관리 도구는 NetworkManager사용자가 명시적으로 변경하지 않도록 지정하지 않는 한 구성 변경 사항을 유지하기 위해 자동으로 구성 파일을 업데이트합니다.지금다른 사람이 변화를 만든다영구.

일부 데스크탑 환경에서는 사용자가 제어된 방식으로 로그오프하고 일부 GUI 프로그램이 계속 실행 중인 경우 다음 로그인 시 동일한 GUI 프로그램이 자동으로 시작되도록 사용자 세션 상태를 유지하려고 시도할 수 있습니다. 그러나 프로그램 자체가 내부 상태를 유지한다는 보장은 없습니다. 일부는 그렇게 할 수도 있고 일부는 그렇지 않을 수도 있습니다. GUI 환경의 텍스트 기반 프로그램은 GUI 로그아웃을 원격 SSH 사용자가 갑자기 네트워크 연결을 끊는 것과 동일하게 처리할 수 있습니다. 특히 텍스트 편집기는 vi중단된 작업을 용이하게 하기 위해 저장되지 않은 데이터를 특수 백업 파일에 저장하는 경우가 많습니다. .

시스템이 강제로 종료되는 경우(하드웨어 재설정 버튼을 누르거나 전원 코드를 뽑는 등) 모든 내용은 RAM에만 저장됩니다.~ 할 것이다길을 잃다. 시작 시 파일 시스템 검사는 파일 시스템이 올바르게 마운트되지 않았음을 감지합니다. 저널 파일 시스템은 일반적으로 파일 시스템 메타데이터를 내부적으로 일관성을 유지하기 위해 자동으로 저널 복구를 수행하지만 데이터도 저널되지 않으면 일부 데이터가 실제로 도달하지 못하는 것을 발견할 수 있습니다. 디스크( \000마지막으로 할당되었지만 기록되지 않은 블록에는 0바이트만 있으므로 로그 파일에 중복 문자열로 표시될 수 있음) 데이터베이스는 강제 종료 후에 일종의 일관성 복구 작업을 수행해야 할 수도 있습니다.

정상적인 제어된 종료(또는 다시 시작)에는 다음이 포함됩니다.

  • 사용자 로그인 세션의 일부인 모든 프로세스에 HUP 신호를 보내 종료하기 전에 필요한 작업을 수행할 수 있도록 합니다(예: 저장되지 않은 작업의 백업 저장).
  • 다른 서비스에 의존하는 서비스가 의존하는 서비스보다 먼저 종료되도록 합리적인 순서로 시스템 서비스를 종료합니다. 대규모 데이터베이스와 같은 경우 이는 그 자체로 상당한 작업입니다.
  • 사용자의 프로세스나 시스템 서비스가 제때 종료되지 않으면 먼저 일반 TERM 신호를 보내고 약간의 시간을 준 다음 마지막으로 KILL 신호를 보내 프로세스가 완료되거나 미해결된 작업을 롤백할 수 있도록 합니다. 요청이 있을 수 있습니다. 그러나 결국 모든 파일을 닫고 파일 시스템을 완전히 마운트 해제할 수 있도록 프로세스를 종료해야 합니다.
  • 실행 중인 나머지 프로세스 수가 필요한 최소 수준으로 줄어든 후 모든 네트워크 기반 파일 시스템을 제어된 방식으로 마운트 해제하여 마운트 해제하기 전에 캐시된 모든 쓰기가 완료되었는지 확인합니다.
  • 네트워크 파일 시스템 액세스와 관련된 모든 서비스를 닫습니다.
  • 로컬 디스크에 대한 모든 캐시된 쓰기를 완료한 다음 일반적으로 읽기 전용 모드로 전환되는 루트 파일 시스템을 제외하고 해당 디스크를 마운트 해제합니다. (최신 파일 시스템은 오류 없는 상태에서 올바르게 마운트 해제되었다는 사실을 기록할 수 있으며 다시 마운트하기 전에 복구 작업이 필요하지 않습니다.)
  • 마지막으로, 커널은 (적절한 경우) 시스템 전원을 끄거나 재설정하기 위해 하드웨어 신호를 보내라는 지시를 받습니다.

적절하게 구성된 시스템에서는 systemdor 명령을 사용할 때 init 하위 시스템(아마도 전형적인 SysVinit 등)이 이 모든 것을 처리합니다.shutdown -hshutdown -r

를 사용하는 경우 reboot -f위의 마지막 닫기 단계를 제외한 모든 단계를 의도적으로 건너뛰는 것을 의미합니다.

관련 정보