[solved] KVM boot to Opensuse Leap 42.1 distro kernel -- dropped to grub> prompt ?
Current kernel's
ls -al /boot/{vml,ini}*
lrwxrwxrwx 1 root root 32 Nov 22 06:36 /boot/initrd -> initrd-4.3.0-17.g6a48ac7-default
-rw------- 1 root root 17M Nov 22 08:05 /boot/initrd-4.3.0-17.g6a48ac7-default
-rw-r--r-- 1 root root 6.9M Nov 22 00:08 /boot/vmlinux-4.3.0-17.g6a48ac7-default.gz
lrwxrwxrwx 1 root root 33 Nov 22 06:36 /boot/vmlinuz -> vmlinuz-4.3.0-17.g6a48ac7-default
-rw-r--r-- 1 root root 5.9M Nov 22 00:50 /boot/vmlinuz-4.3.0-17.g6a48ac7-default
With kernel config, per
https://www.linode.com/docs/platform/kvm
"For standard paravirtualized KVM Linodes, add the following to your kernel .config file:"
CONFIG_KVM_GUEST=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_SCSI_VIRTIO=y
CONFIG_VIRTIO_NET=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
verifying here
egrep "CONFIG_KVM_GUEST=|CONFIG_VIRTIO_PCI=|CONFIG_VIRTIO_PCI_LEGACY=|CONFIG_SCSI_VIRTIO=|CONFIG_VIRTIO_NET=|CONFIG_SERIAL_8250=|CONFIG_SERIAL_8250_CONSOLE=" /boot/config-4.3.0-17.g6a48ac7-default
CONFIG_KVM_GUEST=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
Bootloader was grub-legacy, v0.97
Grub cfg was,
cat /boot/grub/menu.lst
default 0
timeout 1
title PVGRUB-XEN-PV (symlink)
root (hd0)
kernel /boot/vmlinuz root=/dev/xvdc noresume xencons=hvc0 kbdtype=us text nofb selinux=0 apparmor=0 edd=off noshell showopts splash=verbose systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0
initrd /boot/initrd
Worked great.
Grub-legacy's officially deprecated.
I couldn't manage to find an answer re PVGRUB2 support with Xen @Linode, and since KVM seems a done deal anyway … I migrated my linode to KVM.
Simple/error-free migration & boots to linode-provided kernel OK.
...
Welcome to openSUSE Leap 42.1 - Kernel 4.1.5-x86_64-linode61 (ttyS0).
Everything appears to be functioning normally.
Following, generally,
I switched to grub2. Note that grub-legacy is now removed/absent from the system; ONLY grub2 packages remain.
Currently,
rpm -qa | grep -i grub
grub2-2.02~beta2-70.1.x86_64
grub2-i386-pc-2.02~beta2-70.1.x86_64
rpm -qa | grep -i ^kernel | sort
kernel-default-4.3.0-17.1.g6a48ac7.x86_64
kernel-default-devel-4.3.0-17.1.g6a48ac7.x86_64
kernel-devel-4.3.0-17.1.g6a48ac7.noarch
kernel-docs-4.3.0-17.1.g6a48ac7.noarch
kernel-firmware-20151109git-35.1.noarch
kernel-macros-4.3.0-17.1.g6a48ac7.noarch
kernel-source-4.3.0-17.1.g6a48ac7.noarch
kernel-syms-4.3.0-17.1.g6a48ac7.x86_64
cat /etc/default/grub
# If you change this file, run 'grub2-mkconfig -o /boot/grub2/grub.cfg' afterwards to update
# /boot/grub2/grub.cfg.
GRUB_DEFAULT=saved
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_CMDLINE_LINUX_DEFAULT="noresume kbdtype=us text quiet selinux=0 apparmor=0 noshell splash=silent systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0"
GRUB_CMDLINE_LINUX="console=ttyS0,19200n8"
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_DISABLE_LINUX_UUID=true
Since on linode/KVM, the grub search path appears to be
/boot/grub/grub.cfg
I exec
mkinitrd
mkdir -p /boot/grub
grub2-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.3.0-17.g6a48ac7-default
Found initrd image: /boot/initrd-4.3.0-17.g6a48ac7-default
Found linux image: /boot/vmlinuz-4.3.0-17.g6a48ac7-default
Found initrd image: /boot/initrd-4.3.0-17.g6a48ac7-default
done
which generates
cat /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${env_block}" ] ; then
load_env -f "${env_block}"
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
if [ "${env_block}" ] ; then
save_env -f "${env_block}" next_entry
fi
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod ext2
set root='hd2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd2 --hint-efi=hd2 --hint-baremetal=ahci2 5939c461-8927-4682-ab15-2ed625b79c2d
else
search --no-floppy --fs-uuid --set=root 5939c461-8927-4682-ab15-2ed625b79c2d
fi
font="/usr/share/grub2/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
if [ x${boot_once} = xtrue ]; then
set timeout=0
elif [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=10
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=10
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Leap 42.1' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5939c461-8927-4682-ab15-2ed625b79c2d' {
load_video
set gfxpayload=keep
insmod gzio
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
linux /vmlinuz-4.3.0-17.g6a48ac7-default root=/dev/sdc console=ttyS0,19200n8 noresume kbdtype=us text quiet selinux=0 apparmor=0 noshell splash=silent systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0
echo 'Loading initial ramdisk ...'
initrd /initrd-4.3.0-17.g6a48ac7-default
}
submenu 'Advanced options for openSUSE Leap 42.1' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-5939c461-8927-4682-ab15-2ed625b79c2d' {
menuentry 'openSUSE Leap 42.1, with Linux 4.3.0-17.g6a48ac7-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.3.0-17.g6a48ac7-default-advanced-5939c461-8927-4682-ab15-2ed625b79c2d' {
load_video
set gfxpayload=keep
insmod gzio
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
linux /vmlinuz-4.3.0-17.g6a48ac7-default root=/dev/sdc console=ttyS0,19200n8 noresume kbdtype=us text quiet selinux=0 apparmor=0 noshell splash=silent systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0
echo 'Loading initial ramdisk ...'
initrd /initrd-4.3.0-17.g6a48ac7-default
}
menuentry 'openSUSE Leap 42.1, with Linux 4.3.0-17.g6a48ac7-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.3.0-17.g6a48ac7-default-recovery-5939c461-8927-4682-ab15-2ed625b79c2d' {
load_video
set gfxpayload=keep
insmod gzio
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
linux /vmlinuz-4.3.0-17.g6a48ac7-default root=/dev/sdc console=ttyS0,19200n8
echo 'Loading initial ramdisk ...'
initrd /initrd-4.3.0-17.g6a48ac7-default
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
menuentry 'openSUSE Leap 42.1, with Xen hypervisor' --class opensuse --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-simple-5939c461-8927-4682-ab15-2ed625b79c2d' {
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Xen xen ...'
if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
xen_rm_opts=
else
xen_rm_opts="no-real-mode edd=off"
fi
multiboot /xen.gz placeholder ${xen_rm_opts}
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
module /vmlinuz-4.3.0-17.g6a48ac7-default placeholder root=/dev/sdc console=ttyS0,19200n8 noresume kbdtype=us text quiet selinux=0 apparmor=0 noshell splash=silent systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0
echo 'Loading initial ramdisk ...'
module --nounzip /initrd-4.3.0-17.g6a48ac7-default
}
submenu 'Advanced options for openSUSE Leap 42.1 (with Xen hypervisor)' $menuentry_id_option 'gnulinux-advanced-5939c461-8927-4682-ab15-2ed625b79c2d' {
submenu 'Xen hypervisor, version xen' $menuentry_id_option 'xen-hypervisor-xen-5939c461-8927-4682-ab15-2ed625b79c2d' {
menuentry 'openSUSE Leap 42.1, with Xen xen and Linux 4.3.0-17.g6a48ac7-default' --class opensuse --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.3.0-17.g6a48ac7-default-advanced-5939c461-8927-4682-ab15-2ed625b79c2d' {
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Xen xen ...'
if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
xen_rm_opts=
else
xen_rm_opts="no-real-mode edd=off"
fi
multiboot /xen.gz placeholder ${xen_rm_opts}
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
module /vmlinuz-4.3.0-17.g6a48ac7-default placeholder root=/dev/sdc console=ttyS0,19200n8 noresume kbdtype=us text quiet selinux=0 apparmor=0 noshell splash=silent systemd.log_level=error systemd.log_target=syslog-or-kmsg net.ifnames=0
echo 'Loading initial ramdisk ...'
module --nounzip /initrd-4.3.0-17.g6a48ac7-default
}
menuentry 'openSUSE Leap 42.1, with Xen xen and Linux 4.3.0-17.g6a48ac7-default (recovery mode)' --class opensuse --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.3.0-17.g6a48ac7-default-recovery-5939c461-8927-4682-ab15-2ed625b79c2d' {
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 022fcf42-6418-46b1-b6d7-4b0185d269e2
else
search --no-floppy --fs-uuid --set=root 022fcf42-6418-46b1-b6d7-4b0185d269e2
fi
echo 'Loading Xen xen ...'
if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
xen_rm_opts=
else
xen_rm_opts="no-real-mode edd=off"
fi
multiboot /xen.gz placeholder ${xen_rm_opts}
echo 'Loading Linux 4.3.0-17.g6a48ac7-default ...'
module /vmlinuz-4.3.0-17.g6a48ac7-default placeholder root=/dev/sdc single console=ttyS0,19200n8
echo 'Loading initial ramdisk ...'
module --nounzip /initrd-4.3.0-17.g6a48ac7-default
}
}
}
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###
I then ensure the default
grub2-set-default "openSUSE Leap 42.1"
@ Linode control panel, I select
boot settings -> kernel -> Grub2
Then my profile, and reboot.
I get immediately dropped to a grub prompt
grub>
logview @ lish doesn't provide anything more
# logview
GNU GRUB version 2.00
Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists possible
device or file completions.
grub>
@ the grub prompt
grub> ls
(hd0) (fd0) error: failure reading sector 0x6 from `fd0'.
error: failure reading sector 0x0 from `fd0'.
What have I missed in the grub2 conversion/config?
2 Replies
For a Linode profile partition layout:
BlkDevs:
/dev/sda BOOT
/dev/sdb SWAP
/dev/sdc ROOT
/dev/sdd -
/dev/sde -
/dev/sdf -
/dev/sdg -
/dev/sdh -
initrd no initrd
Root/Boot device: /dev/sda
1st, boot to Linode kernel. Create grub2 -> grub symlink to satisfy KVM's apparent insistence on /boot/grub paths,
cd /boot
rm -rf grub
ln -sf grub2 grub
rm -f /boot/grub2/device.map
Reboot to 'own-kernel' profile.
At fail -> grub prompt, entering manually
set root=(hd0)
linux /vmlinuz root=/dev/sdc noresume net.ifnames=0 console=ttyS0,19200n8 systemd.log_level=error systemd.log_target=kmsg
initrd /initrd
boot
THIS^^ boots correctly/completely to 'my kernel'
uname -rm
4.3.0-17.g6a48ac7-default x86_64
But creating a 'simple' custom grub2 config template,
cat /etc/default/grub
GRUB_DEFAULT=saved
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 console=ttyS0,19200n8"
GRUB_SERIAL_COMMAND=" serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_DISABLE_LINUX_UUID=true
GRUB_DISABLE_LINUX_RECOVERY="true"
and a single-config 'custom' override
cat /boot/grub2/custom.cfg
menuentry 'LINODE-openSUSE-kernel-default' {
insmod gzio
insmod ext2
set root='hd0'
linux /vmlinuz root=/dev/sdc noresume net.ifnames=0 console=ttyS0,19200n8 systemd.log_level=error systemd.log_target=kmsg
initrd /initrd
}
setting the boot entry
grub2-set-default LINODE-openSUSE-kernel-default
then creating the grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
mkinitrd
shutdown -r now
simply drops to the 'grub>' prompt again
Anyone with any idea why the manual boot works, but the auto-grub.cfg does not?
cd /boot
ln -sf . /boot
restart
kudos to akerl!