부트로더 없이 실행 중인 Linux에서 다른 커널로 직접 부팅

부트로더 없이 실행 중인 Linux에서 다른 커널로 직접 부팅

머신을 재설정하고 부트로더를 거치지 않고 Linux 실행에서 디스크의 다른 커널로 직접 부팅할 수 있는 방법이 있습니까?

이론적으로 Linux는 다른 커널을 RAM에 로드하고, initrd도 로드하고, 모든 것을 정상적으로 종료한 shutdown다음 제어권을 새 커널에 전달할 수 있어야 합니다.

이를 수행하는 실용적인 방법이 있습니까?

답변1

찾고 있는 것 같군요.프로그램 실행

문서의 예:

예를 들어, 다시 시작하려는 커널 이미지가 /boot/vmlinux이고, /proc/cmdline의 내용이 root=/dev/hda1이고, initrd의 경로가 /boot/initrd인 경우 다음 명령을 사용할 수 있습니다. 커널을 로드하려면:

kexec -l /boot/vmlinux --append=root=/dev/hda1 --initrd=/boot/initrd

커널이 로드된 후 다음 명령을 사용하여 언제든지 시작할 수 있습니다.

kexec -e

답변2

"폐쇄"에 관하여:

이는 종료할 때와 거의 동일합니다. pid 1물론 커널도 지워지고 다시 로드되므로 포함된 모든 프로세스가 지워집니다. 그러나 kexec가 완전히 재부팅되지 않기 때문에 일부 펌웨어 항목(EFI 변수)이 중단될 수 있습니다.

kexec는 커널 다음에 커널을 테스트(컴파일 및 테스트)하지 않는 경우 제한적으로 사용됩니다. 이것은 "실험적"입니다.

하지만 시도해 보는 것은 멋진 일입니다. 재부팅과 런레벨 변경 사이에 있습니다(systemd 시대에 의미했던 것이 무엇이든, 실제로 Linux에서는 항상 그랬습니다). 몇 번의 성공적인 시도 끝에 충돌이 발생하여 그대로 두었습니다. (하지만 아무 일도 일어나지 않았습니다.)

방금 최신 댓글을 읽었습니다.

아이디어는 최소한 기존 파일 시스템 등을 마운트 해제하는 것입니다.

그러나 이것은 특히 systemd가 없는 경우 ctrl-alt-del과 동일한 문제입니다. 회의적이어서 미안하지만 sysvinit를 사용한 종료 프로세스는 약간 까다롭습니다(systemd에서도 마찬가지입니다). kexec(또는 ctrl-alt-del)과 함께 "제어된 종료"는 약간 모순되는 것 같습니다.

나는 항상 "잠깐만"을 합니다. "시스템 연결을 해제"하기 전에: 파일 닫기/저장, Firefox 닫기, tmpfs 마운트 확인, 파티션 마운트 해제... 그런 다음: reboot, poweroff, halt, shutdown, init 6, init 0ctrl-alt-del 또는 ON/OFF 버튼을 5초 동안 누르십시오.. . 나는 kexec가 잠재적인 문제의 또 다른 원인이 되는 것을 원하지 않습니다.


며칠 후 추가됨:

실제로 systemd는 kexec( man systemctl)를 통합합니다. 이 아이디어를 "조금 모순된 표현"이라고 부르게 되어 유감이지만, 제 말을 따르세요. 일반 재부팅 후 몇 초 후에 부트로더의 명령줄에서 해당 커널 명령줄을 선택(또는 수동으로 입력)하는 것은 어떨까요?

답변3

efibootmgr부팅 항목의 번호 BootNext(일반적으로 4자리 숫자 포함)를 확인한 후 다음 명령을 실행할 수 있습니다 .

# efibootmgr --bootnext BootNext

EFIBOOTMGR(8)에서:

• BootNext - 다음 부팅 시 실행되도록 예약된 시작 항목입니다. 이는 BootOrder를 한 번만 대체하고 처음 사용 후 부팅 관리자에 의해 제거됩니다. 이를 통해 부팅 순서를 변경하지 않고도 다음 부팅 동작을 변경할 수 있습니다.

관련 정보