Windows 11とUbuntu 20.04のデュアルブート環境で、Windows 11をアップデートしたところ、Ubuntuが起動しなくなってしまうという問題が発生しました。この問題の原因は、GRUB(Grand Unified Boot Loader)と呼ばれるブートローダーの設定が破損してしまったことです。
試行錯誤の後に解決できたので、同じエラーが起こってしまった人のために解決方法を共有します。
GRUBとは
GRUBは、コンピューターを起動する際に、どのOSを起動するかを選択するためのプログラムです。WindowsとUbuntuの両方をインストールしている場合、GRUBが両方のOSの起動エントリーを表示し、ユーザーが選択できるようにします。
エラー内容
PCの電源を入れるとGRUBメニューが表示され、その画面でUbuntuかWindowsを選ぶと通常であれば各OSが起動されます。
今回は、GRUBメニューでUbuntuを選んでもエラーが表示されUbuntuが起動できなくなるという事象でした。
具体的には、真っ黒な画面に以下のエラーメッセージが表示されて動かなくなります。
Failed to open \EFI\ubuntu\grubx64.efi - Not Found
Failed to load image : Not found
start...image() returned Not Found, falling back to default loader

原因は、メッセージにあるとおり、EFIパーティションからgrubx64.efiファイルが消えていることです。
Ubuntuには消えたgrubx64.efiを含むGRUB関連ファイルを再構築する仕組みが備わっていますが、このままではUbuntu自体を起動できないので、代わりにUSBにインストールしたUbuntuを起動し、元々のUbuntuパーティションをマウントして解決していきます。
解決方法
- Windows11でUbuntu起動用USBメモリの作成
- USBからUbuntuを起動し、GRUBを再インストール
Windows11でUbuntu起動用USBメモリの作成
すでにUbuntuの起動用USBメモリを持っている場合、このステップはスキップしてください。
Ubuntuが動かないので、まずはGRUBからWindowsを起動します。
なお、後述のUSBからの起動がうまくいかないなどの理由でWindowsを何回か再起動する場合、その度にBitLocker回復キーを入力しなければならない可能性があるので、スマホなどにメモしておくことをおすすめします。
Windowsが起動したら、Ubuntu公式サイトの手順に沿って起動可能なUbuntuのUSBメモリを作成します。
UbuntuをUSBから起動し、GRUB再インストール
作成したUSBからUbuntuを起動するには2種類の方法があります。
1つ目はWindowsから再起動する方法です。作成したUSBをPCに差し、シフトキーを押しながらWindowsを再起動します。再びGRUBからWindowsを選ぶと、「オプションの選択」という画面が表示されますので、「デバイスの使用」を選び、「USB HDD」を選択します。


2つ目の方法はPCメーカーのブートメニューから起動する方法です。 PCの電源を入れ、F12(Lenovoの場合。メーカーによってキーは異なります。)を連打すると、Boot Menuが表示されます。そこでUSBドライブを選択するとUSBから起動します。

いずれの方法でも元のハードディスクではなくUSBのGRUBメニューが表示されますので、Ubuntuを選択します。
Ubuntuのインストールメニューが表示されますので、日本語を選択します。もし日本語でなく英語など別の言語をいつも使っている場合はそちらでも結構です。ターミナルしか使わないので、言語の選択はキーボードレイアウトとターミナルのメッセージくらいにしか影響しません。
「Ubuntuを試す」を選択すると、元のハードドライブにインストールすることなくUbuntuを使えるようになります。

なお、WIFIなどのネットワーク接続は特に必要ありません。
それでは、いよいよGRUBを再インストールして消えたファイルを復元します。
まずターミナルを開いて、ルートユーザーになります。
$ sudo -s
次に元のUbuntuで使っていたパーティションをマウントしていきます。パーティション名はfdiskコマンドで探せます。
# fdisk -l
個別環境によってパーティションの構成は若干変わりますが、私の場合はNVMe規格のSSDなので以下のとおりです。
| Device | Type | 筆者脚注 |
| /dev/nvme0n1p1 | EFI System | UEFIパーティション |
| /dev/nvme0n1p2 | Microsoft reserved | Windowsパーティション |
| /dev/nvme0n1p3 | Microsoft basic data | Windowsパーティション |
| /dev/nvme0n1p4 | Windows recovery environment | Windowsパーティション |
| /dev/nvme0n1p5 | Linux filesystem | Ubuntu boot用パーティション |
| /dev/nvme0n1p6 | Linux filesystem | Ubuntuメインパーティション |
| /dev/nvme0n1p7 | Linux swap | Ubuntuスワップ |
このうちGRUB再インストールに必要になるのは、UEFIパーティション、Ubuntu boot用パーティション、Ubuntuメインパーティションの3つです。
各パーティションのファイルパスがわかったら正しい順番でマウントしていきます。
まずはメインのパーティションをマウントします。
# mount /dev/nvme0n1p6 /mnt
筆者の例のように、もしBootパーティションがメインパーティションと別の場合、メインパーティションのマウントポイント下にBootパーティションをマウントします。このステップを怠ると、Grub再インストールの際にLinuxカーネルイメージを見つけられず、GrubメニューにUbuntuが表示されなくなりWindowsだけになってしまうので忘れないようにしましょう。
# mount /dev/nvme0n1p5 /mnt/boot
UEFIパーティションをBootパーティションのマウントポイント下にマウントします。
# mount /dev/nvme0n1p1 /mnt/boot/efi
mountコマンドのbindオプションを使い、chroot後にgrub-installコマンドが以下の必要ディレクトリにアクセスできるようにマウントします。
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
メインパーティションのマウントポイント下にchrootすることで、ルートディレクトリが元のUbuntuと同じになるようにします。こうすることで、grubインストールコマンド実行時に、USBのファイルシステムではなく元のUbuntuファイルシステム内の適切な場所にGrub関連のファイル作成が行われるようになります。
# chroot /mnt
efiディレクトリを指定してGrubを再インストールします。このプロセスの一環で、なくなっていたファイルがUEFIパーティション内に再作成されます。
# grub-install --efi-directory=/boot/efi
もしうまくいかずデバッグしたかったり、どのようなファイルがどこからどこへコピーされているかを知りたければ、grub-instalに-v (verbose)オプションを付けます。
これで消えていたgrubx64.efiファイルが復元されているはずなので、確認します。
# ls /boot/efi/EFI/ubuntu/
最後に、必須ではありませんが念のためGRUB設定ファイルを更新します。
# update-grub
これで作業は完了です。
ターミナルを終了し、USB上のUbuntuを再起動します。
「Please remove the installation medium, then press ENTER.」のように、USBを抜くように指示が表示されますので、USBを抜いてEnterキーを押下すると、Grubメニューが表示されます。ここでUbuntuを選ぶと、今度はエラーなしで起動できるはずです。

まとめ
この記事では、デュアルブート環境下でWindows 11アップデート後にUbuntuが起動しなくなった場合の対処法を、具体的な手順と解説とともに紹介しました。
なお、このような問題に遭遇したときに自分で素早く解決できるよう、Ubuntuについてより体系的に学びたい方は、「Linuxをマスターしたい人のための実践Ubuntu」という本が参考になります。また、本記事で使用したfdisk、mount、chrootなどシステム・デバイス系のコマンドはシステムを壊しそうで苦手という人は、Linuxコマンドのリファレンス本を手元に置いておくと、いざという時に助けになりますのでおすすめです。

“デュアルブート環境でWindows11アップデート後にUbuntuが起動しなくなった場合の対処法” への1件のコメント
LINUX初心者です。
Windows11とUBUNTのデュアルブートを試みました。
Windowsのアップデートで起動しなくなりこのページを参考にコマンドを打ち込んでみましたが、まず、パーティションの構成が違い、打ち込んだ後返ってくる言葉がどうやら違うことをやっているようなので、一旦打ち切りました。
私のパソコンはUbuntはメインパーティションだけで、boot用パーティションとUbuntスワップがありません。dev/nvme0n1p6だけなので、
# mount /dev/nvme0n1p6 /mnt/bootとしました。次の
# mount /dev/nvme0n1p1 /mnt/boot/efiのところではファイルが見つからない旨が書いてあったのでお手上げということになってしまいました。一応現在Windowsは起動する状態になっているのですが、Windowsの方のファイル構成が変わってしまっているのかなとも思われるのですが、何か解決の方法はないでしょうか。わかることがありましたらよろしくお願いいたします。