我正在启动一个新的 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:147
10_linux:194-201