起動中に switch_root の直後に Systemd が Xen Dom0 でハングします。

起動中に switch_root の直後に Systemd が Xen Dom0 でハングします。

UEFIおよびArch Linuxのインストールで動作するようにXenを設定しようとしました(3.18.2)をDom0として指定しましたが、起動できません。それ以外の場合、Xenでは起動しませんが、完全に起動することは注目に値します。

特に、私のコンピュータは完全に停止してハードリセットをしなければなりませんでしたが、私が知る限り、関連するエラーメッセージは表示されませんでした。多くの努力と発見の終わりに、私はそれがdebug=postmount呼び出された直後に停止することを発見しました。systemdswitch_root

本当の問題は、コンピュータが停止する前にシステムからログや情報を送信できないことです。さまざまなカーネルとシステム固有のロギングオプションを試しましたが、インストール後にシェルを終了した後、画面が停止する前にログなしでカーソルが半分点滅します。

私の現在の設定はゴムブーツ互いに関連する場合は、次の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のダウングレードバージョンが必要だと言われていますが、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(No EFI Runtime Service)フラグを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

関連情報