Open1

LinuxとWindowsのデュアルブートでUEFIのブートエントリ書き換え禁止に対抗する

tbt_rpngtbt_rpng

はじめに

ArchLinuxとWindowsのデュアルブート環境をWin->Archの順で構築したところ,Archのブートローダが無視されてインストール後も起動できないという問題が生じた.これに対する回避法を記述する.
検証はしていないけれど他のLinux(Ubuntu)等でも再現・解決できそう.

環境

  • セキュアブートoff
  • Windows 11インストール済み(ディスク暗号化off)
  • ArchLinuxインストール済み(systemd-boot使用)
    • ただし起動できずUEFIのブートエントリ選択でも項目が出てこない
  • thinkbook 14 gen4 intel

症状

  • bootctl installしてもEFIのブートエントリが書き込まれない
    • カーネルやブートローダ自体のインストールは成功する
    • ArchLinux単独なら正しくインストールできる
    • WindowsのEFIエントリを消してもインストールできない
      • この場合,再起動後にディスクからWindowsが起動->自動的にWindowsのエントリ追加という挙動だった気がします(記憶あやふや,再検証面倒)

対処

  1. 最初にWindowsインストール
  2. 一旦WindowsのEFIバイナリをバックアップして削除する
$ mv /efi/EFI/Microsoft{,.backup} # 例
  1. 通常通りブートローダ込みでArchをインストール
    この段階ではEFIエントリが追加されなかったかも(記憶があやふや)
  2. 再起動(Archが起動する)
  3. バックアップしたWindowsのEFIを元に戻す
  4. Windowsを再起動
    UEFIのブートエントリ選択でもbootloaderの選択機能でもOK
    この段階でWindowsのEFIエントリが自動で追加される.この時点でArchとWindowsのエントリが両方になるはず.
  5. Archを再起動
    この段階ではデフォルトがWindowsなのでUEFIのブート選択でArchを選択する必要がある.
  6. UEFIのブート優先順位をArchが最上位になるよう書き換える
  7. 再起動

最後に

再現実験と詳細な検証はしていないので間違っているかもしれません.自分の環境では概ねこの方法で解決できました.
他にも再現するPCがあったらコメントいただけるとありがたいです.