在引导过程中 switch_root 之后,Systemd 立即挂起在 Xen Dom0 中

在引导过程中 switch_root 之后,Systemd 立即挂起在 Xen Dom0 中

我一直在尝试设置 Xen 以与 UEFI 和我的 Arch Linux 安装一起使用(3.18.2)作为 Dom0 但一直无法启动。值得注意的是,否则它可以完全正常启动,只是不能在 Xen 下启动。

具体来说,我的计算机完全冻结,我必须对其进行硬重置,据我所知,没有出现任何相关的错误消息。经过大量努力(并发现),我发现它在被调用debug=postmount后立即冻结。systemdswitch_root

真正的问题是我无法让 systemd 在计算机死机之前吐出任何日志或信息。我已经尝试了各种内核以及 systemd 特定的日志记录选项,但是在我退出安装后 shell 后,在屏幕冻结之前,我的光标可能会闪烁半次,没有日志。

我当前的设置是橡胶靴使用两个小配置文件启动 Xen EFI,如下所示,以防它们相关:

$esp/loader/conf/xen.conf:

title   Xen
efi     xen-4.5.0.efi

$esp/xen.cfg(与 同一目录xen-4.5.0.efi):

[global]
default=xen

[xen]
options=console=none dom0_mem=2048M,max=2048M dom0_max_vcpus=1 loglvl=all noreboot
kernel=vmlinuz-linux root=/dev/sda3 rw systemd.unit=emergency.service systemd.log_level=debug
ramdisk=initramfs-linux.img

注意事项:

  • 尝试使用 AUR Xen 4.4.1-3 软件包以及从源代码下载和编译 Xen 4.5.0,但两个版本都在启动过程中的同一点冻结。
  • 我确实必须重新编译 binutils 以获得x86_64-pep支持才能生成 EFI,但只是替换了它。我也不需要更换 GCC 吗?另请注意,Xen 的 Arch 维基页面提到需要降级版本的 binutils,但它和最新版本都无法以相同的方式启动。
  • 我也尝试启用/禁用所有与 xen 相关的 systemd.services,但由于看起来 systemd 在加载任何服务之前就崩溃了。
  • 不幸的是,在调用 systemd 后,两者都systemd.crash_shell=true无法systemd.unit=emergency.service将我放入 shell 中。
  • init=/bin/sh据我所知,工作正常,所以问题肯定systemd不是switch_root问题本身。
  • 从 shell 运行 systemd(通过init=/bin/shexec /usr/lib/systemd/systemd)也会以同样的方式崩溃,而且这样做systemd --system --test --log-level=debug似乎并没有太吓人。也就是说,它会输出它知道它在 Xen 虚拟化和 x86_64 系统中的信息,但不会输出超过 5 行的内容。然后测试失败一些错误具有讽刺意味的是……尚未运行 systemd。

我真的希望(并且有点害怕)需要传递一些简单的内核参数或 Xen Dom0 选项来解决此问题,但任何见解或建议将不胜感激。

答案1

我的问题最终通过将no-efi-rs(无 EFI 运行时服务)标志传递给xen.cfg.

如果您的引导过程可以进入该/sbin/init阶段,下面是 Xen 的有用配置:

[global]
default=xen

[xen]
options=loglvl=all guest_loglvl=all conring_size=10M console_to_ring=true noreboot
kernel=vmlinuz-linux root=/dev/whatever rw init=/bin/sh log_buf_len=10M loglevel=9 
ramdisk=initramfs-linux.img

一旦你进入 shell,你就可以运行

# mount xenfs so that the next command actually works
mount -t xenfs xenfs /proc/xen
# display the Xen log, pipe it to a file if you want to save it for later
xl dmesg

相关内容