一部のコンピュータにリモートでアクセスするためにSSHを使用しています。これらのマシンにはカスタムカーネルがインストールされています(2.6.28ソースベース)。ただし、kexecを使用してコンピュータを再起動しようとするたびに、sudo reboot
システムはkexecを使用してコンピュータにインストールされている2.6.28-19汎用カーネルをロードします。
それでは、再起動後にロードするカーネルイメージをどのように指定しますか?
編集:私のコンピュータにgrub 1.somethingと一緒にUbuntu 9.04がインストールされています。カスタムカーネルは2.6.28ソースに基づいており、名前は2.6.28.10-custom-1.1です。 2つの異なるカーネル(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