Debian 6默认的bootloader是grub2,其启动菜单由一系列的/etc/grub.d中的脚本自动生成。其中默认包含10_linux脚本用来枚举本地linux内核生成启动项,安装xen后,20_linux_xen添加了自动枚举xen dom0内核的功能。但是,xen安装的dom0内核也能被10_linux检测到,于是启动菜单里dom0相关的启动项会出现两遍,而由于10_linux生成的项没有启动xen本身,所以这些多余的项目存在没有意义,需要将其删除。
让10_linux仿照20_linux_xen脚本用内核对应的config-XXXversion文件信息判断内核是否是dom0内核,如果是的话,则从生成列表中将其剔除,改动的代码如下:
--- 10_linux.bak 2012-10-16 22:30:43.893612434 +0800 +++ 10_linux 2012-10-17 09:16:09.192399881 +0800 @@ -51,6 +51,18 @@ LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} fi +# check kernel's flavor to prevent xen kernel from booting natively without hypervisor +is_not_xen () +{ + basename=$(basename $1) + version=$(echo $basename | sed -e "s,^[^0-9]*-,,g") + if grep -qx "CONFIG_XEN_DOM0=y" /boot/config-${version} ; then + false; + else + true; + fi +} + linux_entry () { os="$1" @@ -95,7 +107,7 @@ } list=`for i in /boot/vmlinu[zx]-* /vmlinu[zx]-* ; do - if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi + if grub_file_is_not_garbage "$i" && is_not_xen "$i" ; then echo -n "$i " ; fi done` prepare_boot_cache=
没有评论:
发表评论