Arch Linux / Windows のデュアルブートで 'Reboot and Select Proper Boot Device' エラー

July 20, 2020

開発用の自作PCへArch Linuxを入れてとくに不便なく使えていたのだが、DTMやゲーム用途で使っていたもう一台のWindows自作環境に寿命が来たことにより、デュアルブート環境を作り始めた。

WindowsとArchのデュアルブートには、

Linux/Windows のデュアルブートをセットアップする場合、最初に Windows をインストールするのが推奨されます。Windows はディスクの一部を使ってパーティションを作ります。Windows のセットアップが終わったら、Linux のインストール環境にブートして、既存の Windows のパーティションには触れずに Linux 用のパーティションを作成することができます。Windows をインストールすると、Linux のブートローダーから使うことができる EFI System Partition が作成されます。

との記載があったのだが、既存のLinux環境を作り直してWindowsを先にインストールするのも面倒であることと、SSDを別にして切り離してインストールすれば大丈夫だろうと考えていた。

計画では、以下のSATAのドライブスイッチャーを使ってSSDごと切り替えることで、Linux / Windowsの切り替えを行う予定で、こうすることで、パーティション分割で疲弊せず、将来自作マシンをまた組むときにSSDごと移植できると思っていた。

Richer-R ドライブセレクタ

が、別SSDにWindowsをインストールしたところ、LinuxのSSDから起動の際に Reboot and Select Proper Boot Device で起動できなくなってしまった。BIOSから起動順なども確認したが変わらない。

原因

UEFIブートへの理解が足りていなかったのだが、NVRAMの設定がWindowsのブートローダーに書き換わっていることが原因だった。SSDを物理スイッチで切り替えるのではなく、ブートはgrubから両方呼び出せるようにすることにした。

grubを再インストール

ひとまず、Linuxが起動できないので、ArchLinux用のインストールメディアを用意してそこから復旧していく。

  1. ArchLinux用のインストールメディア を利用してArchLinuxを起動する。
  2. rootでzshが立ち上がったら lsblk や fdisk -l などでパーティションやディスクを確認。
  3. インストール時同様にマウントする。
mount /dev/sda3 /mnt
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi
  1. マウント先へchroot。
arch-chroot /mnt /bin/bash
  1. ブートローダーの再インストール。
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch --boot-directory=/boot/efi/EFI --recheck
grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg

grubでArch LinuxとWindowsを選べるようにする

os-prober を利用することで、システム上のディスクからOSを探し出してブートローダーに追加することができる。

  1. NTFSを読み書きできるようにし、os-proberでWindows Boot Managerが検出できたら、grub-mkconfig で反映する。
pacman -S os-prober ntfs-3g
os-prober
/dev/sdb1@/efi/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager: Windows:efi
grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg
  1. chrootから抜けてシャットダウン。インストールメディアが無くとも起動でき、起動時に起動するOSを選択できるようになっている。
exit
shutdown -h now

トラブルシューティング

os-prober インストール時に 「signature from “Levente Polyak (anthraxx) levente@leventepolyak.net” is unknown trust」で失敗する。

keyringをアップデートしてから再度試す。

pacman -Sy archlinux-keyring && pacman -Syyu

os-proberでWindows Boot Managerが検出できているが、grubのメニューにWindowsが出てこない。

カスタムで作る。

  1. lsblkos-prober などで、Windowsのブートローダーのパーティションを確認し、blkidでUUIDを調べる。
blkid /dev/sdb1
/dev/sdb1: LABEL_FATBOOT="EFI" LABEL="EFI" UUID="HOGEHOGE" TYPE="fuga" .......
  1. /etc/grub.d/40_custom へ以下のように追加する。
menuentry "Windows10" --class windows --class os {
   insmod ntfs
   search --no-floppy --set=root --fs-uuid=上記で取得したUUID
   ntldr /bootmgr
}
  1. 反映する。
grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg

© 2020-2024 ntsk.