ブートプロセスで 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 固有のログ オプションをいろいろ試しましたが、マウント後のシェルを終了した直後に、画面がフリーズする前に、ログなしでカーソルが半点滅する程度です。

私の現在の設定はガミブート関連する場合は以下に示す 2 つの小さな設定ファイルを使用して 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 をダウンロードしてコンパイルしましたが、両方のバージョンともブート プロセスの同じ時点でフリーズします。
  • EFIを生成するためにサポートのためにbinutilsを再コンパイルする必要がありましたx86_64-pepが、置き換えたのはそれだけです。GCCも置き換える必要はないですよね?また、Xen の Arch Wiki ページbinutils のダウングレード版が必要であると記載されていますが、そのバージョンと最新バージョンの両方が同じように起動に失敗します。
  • xen 関連の systemd.services もすべて有効/無効にしてみましたが、systemd はサービスをロードする前にクラッシュしているようです。
  • 残念ながら、どちらもsystemd が呼び出された後にシェルにドロップすることはできませsystemd.crash_shell=trueん。systemd.unit=emergency.service
  • init=/bin/sh私の知る限りでは問題なく動作しているので、問題は間違いなくこれsystemdではなくこれ自身にあります。switch_root
  • シェルから 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の Xen ブート オプションに (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

シェルにドロップしたら、実行できます

# 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

関連情報