Ubuntu をインストールした後に、Windows をインストールしてデュアルブートを構成したのでそのメモ。
Contents
イントロ
Windows 環境に後から Ubuntu をインストールする際には、
Ubuntu のインストーラーが Windows のシステムを認識して良きに計らってくれる(た?)ので、
(最近 or Server版ではそうでもなかったような気もするが。。。?)
実に簡単にデュアルブートを構成することができる。
ユーザー数の観点からも、この流れの方がまだ多いだろう。
一方、Ubuntu が入っている環境に後から Windows を入れようとするとどうなるか?
残念ながら Windows(10) のインストーラーは良きに計らってくれないので、
全て自分でやる必要があり、grub やら UEFI を自分で触る必要がある。
なかなかに煩雑で失敗できない作業だったので備忘録を残しておく。
前述したように、grub や UEFI を直接触るので、最悪なにもブートしなくなる可能性もあるため、
以降の作業は、くれぐれも読んで分かる方のみ、自己責任でお試しください。
WSL2 などで手軽に Linux を試せるコンニチ、あまり需要はないと思うが、
Windows + Linux のデュアルブートを構成した場合は、
先に Windows, 後から Linux の方がトラブルが少ないのではないかと思います。
環境
- Storage: NVMe SSD x2
- OS: Ubuntu 20.04 (+ Windows 10)
Windows のインストール
今回は、Ubuntu が入っている NVMe とは別の、もう一方の NVMe に Windows 10 をインストールした。
# この状態でも Bios/UEFI から直接それぞれの OS を選択すれば、いずれでも起動はできる。
Ubuntu 側の対応
この時点での構成
Ubuntu 側からは以下のように見えていた
1 2 3 4 5 6 7 8 |
/dev/nvme0n1 nvme0n1p1 BIOS boot nvme0n1p2 Linux filesystem /dev/nvme1n1 nvme1n1p1 EFI System nvme1n1p2 Microsoft reserved nvme1n1p3 Microsoft basic data (メイン) nvme1n1p4 Windows recovery environment |
この時点で気づいたのだが、
Linux は BIOSブート、Windows は UEFIブートとなっており、
BIOSブートの Linux からは、UEFIブートの Windows が検出できず、
Linux の grub エントリーに簡単に追加することはできないようだ。
なので Linux 側を UEFI化して、Windows が作成した EFI パーティションに grub を追加することにする。
UFEI化の下準備
1 2 3 4 |
$ sudo apt install grub-efi-amd64-bin $ sudo mount /dev/nvme1n1p1 /boot/efi /etc/fstab にも UUID指定で /boot/efi を追加しておく $ sudo grub-install --target=x86_64-efi --efi-directory=./efi --bootloader-id=ubuntu |
こうすると、"Bios ブートしたこのシステムからは EFI は変更できないよ" 的なエラーが出るので、
次に EFIシェルからこの Ubuntu を直接起動する。
# grub(UEFI) のエントリーにこの Ubuntu がまだ追加されていないため
UEFIシェルからのLinux手動起動
bootオプションから UEFIシェルで起動
map で EFI パーティションを探す
1 2 3 |
# fs0: # cd EFI/ubuntu # grubx64.efi |
--> Ubuntu が起動
grubエントリーの追加
これで UFEI から Ubuntu が起動したので、
先ほど失敗したコマンドをもう一度実行してエントリーを追加する。
# Windows は勝手に見つけて良い塩梅に設定してくれる。
1 2 3 |
$ sudo grub-install --target=x86_64-efi --efi-directory=./efi --bootloader-id=ubuntu ($ sudo grub-reboot 2) $ sudo reboot |