![在引导过程中 switch_root 之后,Systemd 立即挂起在 Xen Dom0 中](https://linux22.com/image/36090/%E5%9C%A8%E5%BC%95%E5%AF%BC%E8%BF%87%E7%A8%8B%E4%B8%AD%20switch_root%20%E4%B9%8B%E5%90%8E%EF%BC%8CSystemd%20%E7%AB%8B%E5%8D%B3%E6%8C%82%E8%B5%B7%E5%9C%A8%20Xen%20Dom0%20%E4%B8%AD.png)
我一直在尝试设置 Xen 以与 UEFI 和我的 Arch Linux 安装一起使用(3.18.2)作为 Dom0 但一直无法启动。值得注意的是,否则它可以完全正常启动,只是不能在 Xen 下启动。
具体来说,我的计算机完全冻结,我必须对其进行硬重置,据我所知,没有出现任何相关的错误消息。经过大量努力(并发现),我发现它在被调用debug=postmount
后立即冻结。systemd
switch_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/sh
和exec /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