재부팅하지 않고 다른 버전의 커널 간 전환


11

재부팅하지 않고 시스템에 설치된 다른 버전의 커널간에 전환하고 싶습니다.

즉, 3.0.0-16-generic현재 ' 커널을 실행 중이고 이전 커널 3.0.0-14-generic도 가지고 있다면 3.0.0-14-generic재부팅하지 않고 (다른 커널) 로 전환 할 수 있습니다 .

(실시간 커널 디버깅을 수행하고 변경을 수행해야 재부팅 할 수 없습니다)

답변:


8

두 개의 완전한 커널을 바꾸는 방법은 없습니다. 나는 당신이 리눅스와 같은 모 놀리 식 커널의 중요성을 이해하고 그것이 왜 간단하게 교체 할 수 없는지 이해할 수 있다고 확신합니다.

가장 가까운 것은 Ksplice를 사용한 라이브 패치 프로세스 입니다. 커널 업데이트를 실행중인 커널에 구멍을 뚫을 수있는 마법의 심으로 변환하여 컴퓨터를 재부팅하지 않고도 무기한으로 유지할 수 있습니다. 목적에 따라 변경 사항을 롤백 할 수도 있습니다.

Ubuntu Desktop 에디션의 경우 무료이므로 사용할 수 있지만 서버에 대한 구독료를 지불해야합니다 (이 종류의 항목이 가장 필요함).


편집 내용을 보았습니다. "서비스"는 특별한 업데이트를 제공하고 스스로 생성 할 수있는 것이 아니라는 이유로 Ksplice는 디버깅을 위해 직접 커널을 해킹하고 직접 빌드하는 경우 도움이되지 않을 것입니다.

공식 커널 대해서만 빌드하는 경우 여전히 작동합니다.


한가지 더 아이디어 : 가상화. 새로운 커널을 구축하고 VM에서 주변 환경을 바꾸고 재부팅 할 수 있습니다. 여전히 재부팅하는 데 시간이 걸리지 만 VM을 개발 시스템보다 훨씬 가볍게 만들 수 있습니다 (Ubuntu 서버 기반, 필요하지 않은 경우 X 서버 삭제 등).


1
하지만 내 / boot 디렉토리에있는 두 개의 다른 커널 사이를 전환하고 싶습니다
코더

1
예, 두 커널 사이를 임의로 전환 할 수는 없습니다. 그래도 다른 아이디어로 다른 편집을 추가했습니다.
Oli

2

으로 OLI가 언급 한, 당신의 최선은 아마도 가상화입니다.

즉, 하드웨어를 다루는 경우 가상화로 인해 하드웨어가 잘리지 않을 수 있습니다 kexec.이 경우 전체 재부팅없이 실행중인 커널을 교체하는 데 사용할 수 있습니다 .

ArchWiki kexec페이지 에서 가져온 것 :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

위의 방법으로 init 시스템, 디스플레이 서버, 네트워킹 등 모든 서비스를 다시 시작할 수 있습니다 . 그러나 init 시스템과 같은 빠른 init 시스템을 사용하면 systemd2-3 초 안에 새로운 커널로 부팅 할 수 있습니다. BIOS / UEFI와 부트 로더를 우회합니다.


비슷한 설명은 RapidReboot Ubuntu Wiki 페이지 에서 찾을 수 있습니다 .


0

이 답변을 업데이트해야한다고 생각합니다.

kpatch 지금 보다 더 기본 인 Ksplice에서 등.

커널 내부 데이터 구조를 변경할 수는 없지만 분명한 이유로 보안 핫 패치에 유용합니다.

일반적인 문제는 항상 다음과 같습니다. 프로세스를 계속 실행하면 커널 데이터 구조를 계속 유지하면서 커널 함수가이를 기대하고 되돌려 줄 수 있습니다. 그리고 그러한 프로세스가 이루어지지 않으면 그것이 사실인지 알 수 없습니다. 따라서이를 사용하는 모든 프로세스가 다시 시작될 때까지 변경할 수 없습니다. 모든 프로그램을 라이브 패치해야합니다.
그리고 하드웨어가 특별한 상태에있을 때 드라이버 변경에 대해서는 언급하지 않았습니다. ( kexec 와 동일한 문제 )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.