どうも、みむらです。
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世代でコンソールを生やして中身を追いかける話・・でした!
エラーメッセージを見れば一撃なんですけど、ここにたどり着くまでに数時間溶かしてしまったので、まだまだ精進します、、、💦