如何使用 Xen 设置 grub2?

如何使用 Xen 设置 grub2?

我正在启动一个新的 Xen 内核,一切正常,直到启动过程中的某个时刻机器无警告地重新启动。不幸的是,在那之前我没有看到错误闪烁。

有没有办法用工作内核启动机器并查看上次启动的日志或其他内容?

编辑:我没有注意到屏幕上实际上有一个错误。它只是在重新启动之前非常快速地闪烁。该错误与无法挂载根文件系统有关,因为我的 grub 配置有问题。

grub.cfg 中的正常条目如下所示:

menuentry 'Ubuntu, with Linux 2.6.32-33-server' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 75475e50-82e2-4f74-b860-6cf92c91b42e
        linux   /vmlinuz-2.6.32-33-server root=/dev/mapper/xenserver-root ro   crashkernel=384M-2G:64M,2G-:128M 
        initrd  /initrd.img-2.6.32-33-server
}

我在 /etc/grub.d/40_default 中添加了以下内容

menuentry 'Xen 4 with Linux 2.6.32.45-xen' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set=root 75475e50-82e2-4f74-b860-6cf92c91b42e
        echo 'Loading Xen 4 ...'
        multiboot /xen.gz placeholder
        echo 'Loading Linux 2.6.32.45-xen ...'
        module  /vmlinuz-2.6.32.45-xen placeholder root=/dev/mapper/xenserver-root ro iommu=1
        echo 'Loading initial ramdisk ...'
        module  /initrd.img-2.6.32.45-xen
}

但由于某种原因,它无法工作。有什么想法吗?

编辑:我还尝试了 20_linux_xen 脚本。不幸的是,它不起作用。查看以下错误:

Found linux image: /boot/vmlinuz-2.6.32.45-xen
Found initrd image: /boot/initrd.img-2.6.32.45-xen
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
/etc/grub.d/20_linux_xen: 57: uses_abstraction: not found
Found linux image: /boot/vmlinuz-2.6.32.45-xen
Found initrd image: /boot/initrd.img-2.6.32.45-xen
/etc/grub.d/20_linux_xen: 156: gettext_printf: not found

gettext 已安装。
我在 ubuntu 10.04 LTS 上。

启动时闪现的错误类似于“请插入正确的 root=boot 内核选项...”

为什么这这么难,为什么有这么多不同的 grub2 xen 示例?有些将 /boot 放在前面,有些则只放 /。我尝试将 /boot 放在前面,但没有用。此外,有些有 --set=root uuid,而我所有其他工作条目只有 --set uuid。这与不同的 grub2 版本有关吗?

答案1

回答我自己的问题。这个 grub2 条目有效。

menuentry 'Xen 4 with Linux 2.6.32.45-xen' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 75475e50-82e2-4f74-b860-6cf92c91b42e
        multiboot /xen.gz placeholder
        module  /vmlinuz-2.6.32.45-xen placeholder root=/dev/mapper/xenserver-root ro 
        module  /initrd.img-2.6.32.45-xen
}

但是,我的内核也出了问题。所以我不得不重建它。重建之后一切就都好了。

答案2

为了grub2-mkconfig检测您的 Linux 内核,它们必须被命名vmlinuz-*为 或kernel-*。在某些脚本中您vmlinux-*也可以看到。例如(末尾的 ...-xen 只是我的注释):

/boot/kernel-3.6.2-xen

为了让20_linux_xen脚本包含您的 Xen 内核,/boot必须包含与您的内核文件完全对应的内核配置文件config-*。例如:

/boot/config-3.6.2-xen

要制作此文件,只需运行zcat /proc/config.gz > /boot/config-[your_version],然后您应该grub2-mkconfig再次运行。此时脚本可能会为 Xen 内核生成重复记录,因为(可能)您有几个指向 xen 内核的符号链接。因此请删除它们并仅保留原始文件(xen-4.2.0.gz)。(我希望这是安全的,如果删除这些符号链接是错误的,请在下面保留您的评论。)

initrd/initramfs 文件的情况相同,但有很多变化。

已描述添加内核参数这里

来源:内核命名,,20_linux_xen:14710_linux:194-201

相关内容