Hyper-V の第2世代で Linux の起動ログを追いかける

どうも、みむらです。

Hyper-V 上で Linux を動かすかとやっていたのですが
内部で起動がコケてしまって、その追跡にとても時間が掛かったのでそのメモです。

1.COM ポートを生やす

PowerShell で “Set-VMComPort” コマンドを使うことで生やせます。

Set-VMComPort (Hyper-V) | Microsoft Learn
https://learn.microsoft.com/en-us/powershell/module/hyper-v/set-vmcomport

Set-VMComPort -VMName "Gentoo Linux" -Number 1 -Path \.\pipe\vm_debugcom

-VMName は VM 名、 -Number は 1を最小値として ttyS0 に当たっていきます。

2. COM を見る

手っ取り早いのが PuTTY です。
管理者権限で起動した PuTTY で、名前付きパイプの文字列をそのまま入力すると繋いでくれます。

その後、起動オプションに CONSOLE の設定を入れて起動します。
サンプルとしては下記のような感じです:

linux /vmlinuz-6.5.4-gentoo console=ttyS0,9600
boot

3.ログを眺める

コンソールの内容が PuTTY 側に流れてきます。

今回の場合はどうやら “noxsave” を入れれば治るらしいのですが、
気持ち悪いので原因調査をしてみます。


“XSAVE has to be disabled as it is not supported by this module” ということで、
これで検索を掛けて見ると、下記のパッチが見つかります。

https://lwn.net/ml/linux-kernel/1678386957-18016-3-git-send-email-ssengar@linux.microsoft.com/

コードを抜粋するとまさにこんな感じ。

+++ b/arch/x86/hyperv/hv_vtl.c

+static int __init hv_vtl_early_init(void)
+{
+	/*
+	 * `boot_cpu_has` returns the runtime feature support,
+	 * and here is the earliest it can be used.
+	 */
+	if (cpu_feature_enabled(X86_FEATURE_XSAVE))
+		panic("XSAVE has to be disabled as it is not supported by this module.\n"
+			  "Please add 'noxsave' to the kernel command line.\n");
+
+	real_mode_header = &hv_vtl_real_mode_header;
+	apic->wakeup_secondary_cpu_64 = hv_vtl_wakeup_secondary_cpu;
+
+	return 0;
+}

調べてみると、 “Enable Linux to boot in VTL context” という項目を発見。

切ってみたところ、正常に起動しました。


というわけで、第2世代でコンソールを生やして中身を追いかける話・・でした!
エラーメッセージを見れば一撃なんですけど、ここにたどり着くまでに数時間溶かしてしまったので、まだまだ精進します、、、💦

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です