19.2. 패키지 및 이미지 모드에서 소프트 재부팅 동작
이미지 모드에서 실행되는 시스템은 사용자 공간만 재부팅하는 패키지 모드 시스템과 유사하게 소프트 재부팅을 수행합니다. 차이점은 컨테이너 이미지에서 먼저 이러한 패키지 및 서비스에 대한 업데이트를 빌드해야 한다는 것입니다.
- 패키지 모드에서 소프트 재부팅 동작
예를 들어
dnf를 사용하는 RHEL 시스템에서 소프트 재부팅 프로세스는 시스템 장치를 종료하고 다시 시작하여 새 라이브러리및바이너리를 로드합니다. 다운타임을 최소화하여 업데이트를 적용할 수 있습니다. RHEL에서dnf를 사용하여 업데이트를 적용하면systemd에서 소프트 재부팅 중에 시스템의 동작을 관리합니다. 주요 단위 및 예상 동작은 다음과 같습니다.-
서비스 다시 시작: 소프트 재부팅 트리거
systemd를 트리거하여 실행 중인 모든 서비스를 중지하고 다시 시작합니다. 업데이트된 서비스 패키지(예: 웹 서버 또는 데이터베이스)는 서비스가 다시 시작되면 패치를 적용하고 새 바이너리를 다시 로드합니다. -
장치 종속성:
systemd가 정의된 종속 항목 및 순서에 따라 장치를 종료하고 시작합니다. 소프트 재부팅은 이러한 관계가 유지되도록 하여 부적절한 종료 시퀀스의 가능성을 최소화합니다. -
프로세스 및 라이브러리:
glibc또는openssl과 같은 업데이트된 공유 라이브러리의 경우 실행 중인 프로세스에서는 다시 시작할 때까지 매핑된 이전 라이브러리를 계속 사용합니다. 소프트 재부팅을 사용하면 모든 프로세스가 중지 및 재시작되어 새 버전의 라이브러리에 대해 연결됩니다. - 최소 다운타임: 커널과 하드웨어를 다시 초기화하지 않기 때문에 소프트 재부팅은 하드 재부팅보다 훨씬 빠릅니다. 서비스 중단을 최소화하여 대부분의 사용자 공간 업데이트를 적용하는 데 유용합니다.
-
명령줄 툴:
dnf-plugins-core패키지에는needs-restarting툴이 포함되어 있습니다.dnf 업데이트를 실행한 후명령을 실행하여 변경 사항을 적용하기 위해 소프트 재부팅 또는 특정 서비스 재시작이 필요한지 확인할 수 있습니다.dnfneeds-restarting
-
서비스 다시 시작: 소프트 재부팅 트리거
사용자 공간 패치는 사용자 애플리케이션 및 공유 라이브러리의 보안 취약점과 버그를 해결합니다. 패치를 적용하면 새 코드를 로드하려면 소프트 재부팅 또는 프로세스 재시작이 필요합니다. 예를 들면 다음과 같습니다.
-
OpenSSL: 사용 사례: 발견된 중요한 OpenSSL 취약점.
문제: 웹 서버, 데이터베이스, SSH 데몬과 같은 OpenSSL을 사용하는 애플리케이션은 다시 시작하지 않고 노출된 상태로 유지되어 취약한 공유 라이브러리를 계속 사용합니다.
소프트 재부팅 솔루션: dnf 업데이트 openssl 을 수행한 후 소프트 재부팅은 종속 프로세스를 중지합니다. 그런 다음 systemd는 이러한 서비스를 다시 시작하여 새로운 패치된 libssl.so 및 libcrypto.so 라이브러리를 자동으로 로드하여 전체 시스템을 재부팅하지 않고 시스템을 보호합니다.
-
glibc : 사용 사례:
GNU C라이브러리(glibc)에서 버그 또는 보안 취약점이 발견됩니다.
문제: Glibc는 시스템의 거의 모든 프로그램이 의존하는 기본 사용자 공간 구성 요소입니다. glibc의 취약점은 전체 시스템에 영향을 미칩니다. 하나 또는 두 개의 서비스를 다시 시작하는 것만으로는 충분하지 않습니다. 다른 많은 프로세스가 여전히 취약합니다.
소프트 재부팅 솔루션: dnf 업데이트 glibc 이후 소프트 재부팅은 모든 프로세스가 다시 시작되고 새 glibc에 다시 연결할 수 있도록 하는 가장 안정적인 방법입니다. 이로 인해 업데이트가 모든 곳에 적용되도록 보장하면서 전체 시스템 재부팅 시간이 길어집니다.
-
dbus-broker:
사용 사례: 보안 또는 성능을 위해 dbus-broker 데몬 업데이트.
문제: Dbus-broker는 중요한 시스템 서비스입니다. 업데이트는 일반적으로 탄력적이지만 프로토콜의 민감도는 브로커 및 관련 서비스를 다시 시작해야 합니다.
소프트 재부팅 솔루션: 소프트 재부팅은 systemd 를 사용하여 dbus-broker 및 모든 종속 서비스 및 애플리케이션을 다시 시작하여 완전히 종료 및 다시 시작합니다.
- RHEL의 이미지 모드에서 소프트 재부팅 동작
-
RHEL 이미지 모드(bootc)에서
systemd는 빠른 사용자 공간 전용 재시작(소프트 재부팅)을 수행합니다.systemd-soft-reboot.service는 이 프로세스를 오케스트레이션하여 커널 및 하드웨어를 계속 실행하는 동안 사용자 공간을 재설정합니다.
이미지 기반 시스템에서는 다음 두 가지 방법으로 업데이트를 관리할 수 있습니다.
- 준비됨 업데이트: 시스템이 컨테이너 레지스트리에서 이러한 업데이트를 가져와서 대체 비활성 파티션 또는 파일 시스템에 설치합니다. 재부팅을 시작할 때까지 이전 버전에서 계속 실행됩니다.
소프트 재부팅은 시스템을 새로 준비된 루트 파일 시스템으로 전환하고 한 번에 전체 사용자 공간을 대체합니다. 시스템은 업데이트된 새로운 운영 체제 이미지로 부팅되며 문제가 발생하면 후속 부팅 시 이전 이미지로 롤백할 수 있는 기능이 유지됩니다.
- 단계적 업데이트: 구성 변경 또는 단일 서비스 재시작과 같은 실행 중인 사용자 공간에 대한 동적 인플레이스 업데이트. 새로운 완전한 운영 체제 이미지를 생성하고 부팅하지 않습니다. 소프트 재부팅은 동일한 루트 파일 시스템에서 현재 사용자 공간을 다시 로드합니다. 업데이트된 새 운영 체제 이미지로 가져오거나 전환하지 않습니다.
이를 사용하여 커널을 건드리지 않고 현재 소프트웨어 상태를 재설정할 수 있습니다. 이는 이미지 수준이 아닌 변경 사항을 적용하거나 사용자 공간 문제를 해결하는 데 유용합니다.
systemd 소프트 재부팅 메커니즘은 kexec 재부팅과 다릅니다. kexec 및 커널 전환 기능은 사용자 공간만 재시작하므로 systemd 소프트 재부팅에서는 사용할 수 없으며 커널은 변경되지 않습니다. 이를 통해 지속성을 보장하고 하드웨어를 재설정하지 않고도 커널을 변경할 때 발생할 수 있는 잠재적인 복잡성과 불일치를 방지할 수 있습니다. 새 커널 버전이 포함된 업데이트된 운영 체제 이미지에는 기존의 전체 재부팅이 필요합니다.