일부 컴퓨터에 원격으로 액세스하기 위해 SSH를 사용하고 있습니다. 이러한 머신에는 사용자 정의 커널이 설치되어 있습니다(2.6.28 소스 기반). 그러나 kexec 를 사용하여 컴퓨터를 다시 시작하려고 할 때마다 sudo reboot
시스템은 kexec를 사용하고 컴퓨터에도 설치된 2.6.28-19 일반 커널을 로드합니다.
그렇다면 재부팅 후 로드할 커널 이미지를 어떻게 지정합니까?
편집: 내 컴퓨터에 grub 1.something과 함께 우분투 9.04가 설치되어 있습니다. 사용자 정의 커널은 2.6.28 소스를 기반으로 하며 이름은 2.6.28.10-custom-1.1입니다. 두 개의 다른 커널(2.6.28-19-generic 및 2.6.28-6-386)이 시스템에 설치되어 있습니다. 재부팅을 호출한 후 시스템이 실제로 재부팅되지 않고 현재 커널이 사용자 정의 커널임에도 불구하고 kexec를 사용하여 19 일반 커널을 로드하는 것을 확인했습니다.
답변1
일반적으로 재부팅하면 컴퓨터가 grub으로 돌아가 키보드를 통해 커널을 선택하거나 기본 구성된 커널을 부팅할 수 있습니다. 그러나 kexec-tools가 설치된 경우 재부팅 명령은 이 동작을 단락시키고 kexec를 커널로 직접 연결합니다. kexec 도구를 제거하거나 파일을 편집하고 재부팅 시 grub으로 돌아가서 이 동작을 비활성화할 수 있습니다.
/etc/default/kexec
및 설정:
LOAD_KEXEC=false
또는 kexec를 활성 상태로 유지하고 원하는 커널로 재부팅하려면 다음과 같은 명령줄을 사용하여 원하는 커널을 로드해 보세요.
kexec -l /boot/vmlinux --append=root=/dev/hda1 --initrd=/boot/initrd
그런 다음 나중에 "kexec -e"를 실행하면 kexec 라인에 구성된 커널도 실행됩니다. 나는 재부팅 스크립트가 "kexec -e"만 호출하게 될 것이라고 믿기 때문에 커널 변경 사항이 적용되어야 한다고 믿습니다.
답변2
아주 좋은 글을 발견했어요여기. 여기에는 kexec를 수동으로 호출하는 스크립트가 포함되어 있습니다. 여기에 스크립트를 다시 게시합니다.
UNAMER=`uname -r` # this checks the version of the kernel
#just to save typing
#This just puts all of the parameters for loading in one place
KPARAMS="-l " # tells kexec to load the kernel
# --append tells the kernel all of its parameters
# cat /proc/cmdline gets the current kernel's command line
KPARAMS=$KPARAMS"--append=\"`cat /proc/cmdline`\" "
# this tells the kernel what initrd image to use
KPARAMS=$KPARAMS"--initrd=/boot/initrd.img-$UNAMER "
# this tells the kexec what kernel to load
KPARAMS=$KPARAMS"/boot/vmlinuz-$UNAMER"
# Message should end with a newline since kFreeBSD may
# print more stuff (see #323749)
log_action_msg "Will now restart"
if [ -x `locate kexec | grep sbin` ]; then # check for the kexec executable
kexec $KPARAMS # load the kernel with the correct parameters
sync # sync all of the disks so as not to lose data
umount -a # make sure all disks are unmounted
kexec -e # reboot the kernel
fi
#This next line should never happen.
reboot -d -f -i