💭

systemdでArchlinuxとWindowsのデュアルブートする方法

2023/07/07に公開

はじめに

ThinkpadなりLGgramなり、自分でメモリやSSDを増設して色々インストールして遊ぶのが好きで、元々のSSDにはWindowsをインストールし、増設したSSDにArchlinuxをインストールしたが、起動するのはArchlinuxばかりで、Windowsを起動するにはいちいちBIOS画面に入り、起動順番を変更しなければならないという非常に面倒臭い状況になってしまった。EndeavourOSをインストールしたときには自動で起動時にEndeavourOSにするかWindowsにするか選択できたのだから、Archlinuxでもできるはずだと色々調べて上手く行ったことをメモ。GRUBではなくsystemdからの起動だったことや、同一のSSDにパーティションを区切ってWindowsとArchlinuxをインストールするのではなく、2つのSSDにそれぞれインストールしたから、なかなか同じような条件の解決策がネット上になくて苦労した。ちなみに私はIT関係の仕事をしているわけでもなく、全くの素人が趣味で遊んでいるだけなので、情報の正確さは保証しないし、あくまで自己責任ということで。

環境

  • 1stSSDにWindowsをインストール済み
  • 2ndSSDにArchlinuxをインストールした
  • 1stSSDにも2ndSSDにもEFIパーティションが存在する
  • ArchlinuxはGRUBではなくsystemdで起動する状態

問題点

電源onにするとsystemdの起動選択がArchlinuxしか出て来ず、Windowsの起動が選択できない。

望む状態

systemdでの起動でArchlinuxもWindowsも選択できるようにしたい

SSDパーティション構成

1st SSD

  • /dev/sda1 Windowsの EFI System
  • /dev/sda2 Microsoft reserved
  • /dev/sda3 Microsoft basic data
  • /dev/sda4 Windows recoverry environment

2nd SSD

  • /dev/sdb1 Archlinuxの EFI System
  • /dev/sdb2 Linux filesystem

解決策

  1. WindowsのEFIからMicrosoftフォルダをサブフォルダごとArchlinuxの/boot/EFIにコピーする
    Archlinuxにrootでログインして作業を行う。
# mount /dev/sda1 /mnt
# cd /mnt/EFI
# cp -r /Microsoft /boot/EFI/
  1. /boot/loader/loader.confを以下のように編集する
default windows.conf
timeout 5
console-mode auto
editor no

arch.conf
  1. /boot/loader/entries にwindows.confを作成し、windowsのboot場所を教えてやる
title Windows 11
efi /boot/EFI/Microsoft/Boot/Bootmgfw.efi

これでWindowsも選択可能になる。

・・・と思っていたのだが、意外な事実判明

どこまでが必要なのだろうと、逆向きに遡ってみた。

    1. のwindows.confを別フォルダに移してみた。
      →起動時にWindows11の選択ができる
    1. のloader.confを以下のように元に戻す
default arch.conf
timeout 5
console-mode auto
editor no

→起動時にWindows11の選択がまだできる

  • EFIディレクトリにコピーしたMicrosoftフォルダをEFI外に移動した
    →起動時にwindows11の表示が消えた

結論

WindowsのEFIフォルダの中にあるMicrosoftフォルダを丸ごとArchLinuxの/boot/EFI/ディレクトリ内にコピーしてやればいい。

疑問

本来は1stSSDにインストールしたWindowsのEFIパーティションにArchlinuxの/boot/をインストールしなければいけなかったのだろうが、今まで散々ブート領域をダメにしてWindowsもLinuxも立ち上がらなくなった経験があるものだから、上書きしてしまったら悪夢再び、と怯えて、2個EFI領域を作ってしまった。上記の状態でWindows選択しても、ちゃんと1stSSDのWindowsが立ち上がったし、今の所不具合もなさそう。ならばloader.confやwindows.confの役割って何だよ!と思ってしまう。それにloader.confやwindows.confの書き方が合っているのかどうかもわからない。ご存知の方いらっしゃいましたら、ぜひご教授いただけると幸いです。

Discussion