重启会加载哪个内核?

重启会加载哪个内核?

我正在使用 ssh 远程访问一些机器。这些机器安装了自定义内核(基于 2.6.28 源)。但是,每当我尝试使用 重新启动计算机时sudo reboot,系统都会使用 kexec 并加载 2.6.28-19-generic 内核,该内核也已安装在计算机上。

那么如何指定重启后加载哪个内核映像呢?

编辑:我的机器上安装了 ubuntu 9.04,带有 grub 1.something。自定义内核基于 2.6.28 源,名称为 2.6.28.10-custom-1.1。另外两个内核安装在机器上:2.6.28-19-generic 和 2.6.28-6-386。我检查过,在调用reboot后,机器实际上并没有重新启动,而是使用kexec加载19通用内核,即使当前内核是自定义内核。

答案1

通常,当您重新启动时,计算机将返回 grub,并允许您通过键盘选择内核,或启动默认配置的内核。但是,如果您安装了 kexec-tools,reboot 命令将短路此行为并直接 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

相关内容