Windows10マシンを使ってUSBメモリ起動LinuxをインストールしたらWindows10のブートローダがGRUBで上書きされた

Windows10マシンを使ってUSBメモリ起動LinuxをインストールしたらWindows10のブートローダがGRUBで上書きされてしまいました。

最近のPCでは、UEFIブートが普通になっていて、従来のCSMブートと同じつもりで作業をしていると、いろいろと問題が起きるようです。

UEFIベースのプラットフォームではディスクの先頭領域にあるSYSTEMパーティションテーブル(ESP、EFIシステムパーティション)を読み込んで、OSをブートします。このパーティションは特定のグローバルで固有となる識別子 (GUID) ラベルが付いた VFAT パーティションなので、Linuxからマウントしてファイル操作をすることができます。

ESPにはブートローダーやユーティリティソフトウェアなどのEFIアプリケーションが含まれていて、Windows、Grubといったディレクトリが保存されます。LinuxではESPは通常/boot/efi/にマウントして使います。例えば、Ubuntu 18.04 だと、下記のようなファイルが入っています。

$ sudo ls /boot/efi/EFI/BOOT
BOOTX64.EFI  fbx64.efi
$ sudo ls /boot/efi/EFI/ubuntu
BOOTX64.CSV  fw  fwupx64.efi  grub.cfg	grubx64.efi  mmx64.efi	shimx64.efi

Windows10マシンがインストールされたマシンで、起動時にF10などを押してBootデバイスの選択をして起動する時に、UbuntuのインストーラをUEFIで起動するのと、CSMで起動するのとで、インストーラの挙動が変わります。

Windows10マシンのPCでは、BIOSの設定で、Secure Bootを無効にして、CSMで起動するようにしてから作業をします。このとき、USBメモリーにUbuntuのインストーラを書き込んで起動してみたところ、CSMで起動するにはUSBメモリの名前だけの方を選び、UEFIで起動するにはUSBメモリの名前の前にEFIがついている方を選ぶ必要がありました。

まず、CSMで起動して、別のUSBメモリー(ここでは/dev/sdcとします)へUbuntu18.04をインストールしてみました。「/」を「/dev/sdc1」として、ブートローダーを書き込む先を「/dev/sdc」と指定すると、CSMで起動するUSBメモリ起動Linuxが作成できました。このときは、Windows10マシンのESPは変更されなくて、大丈夫でした。ただし、起動するにはPCのBIOS設定について、Secure Bootを無効にして、CSMで起動するようにしておく必要があります。

次に、UEFIで起動して、別のUSBメモリー(ここでは/dev/sdcとします)へUbuntu18.04をインストールしてみました。UEFIシステムパーティションを「/dev/sdc1」、「/」を「/dev/sdc2」として、ブートローダーを書き込む先を「/dev/sdc1」と指定すると、UEFIで起動するUSBメモリ起動Linuxが作成できました。「Secure Bootを無効にして、CSMで起動する」というBIOSの設定のままで起動を試したところ、UEFIで起動できました。ただし、Windows10マシンのESP(/dev/sda1)が変更されてデフォルトのブートローダーがGRUBになってしまいました。

これを修復するために、USBメモリーからUbuntuのインストーラを起動して、ディスクユーティリティで「/dev/sda」のESP(つまり/dev/sda1、SYSTEM領域と表示される)をマウントし、/media/ubuntu/SYSTEM/EFI/boot/bootx64.efi (インストーラのLinuxから/dev/sda1をマウントすると/media/ubuntu/SYSTEM/にマウントされるため、このファイル名になります。)をバックアップしてあったWindows10のものに置き換えました。また、GRUBは「/dev/sda」の方では使わないので「/media/ubuntu/SYSTEM/EFI/ubuntu」も削除しました。これで、Windows10マシンのブートローダーを復旧できました。

まだ試していませんが、UEFIで起動するUbuntuならSecure Bootを有効にして起動できる気がします。また、Ubuntu18.04のインストーラはUSBメモリ起動Linuxをインストールしてから、使い続けることができるので、インストールを開始する前に/boot/efi/EFI/BOOT/BOOTX64.EFIをバックアップして、インストールが終わってからすぐにマシンを再起動せずに作業を続けて、BOOTX64.EFIを戻すことができるはずです。

このあたり、きちんと調べることができていないのかもしれませんが、あまりネット上で整理された情報がないような気もします。Ubuntu18.04をUSBメモリから起動するという用途が少ないのかもしれません。備忘録として記事にしておきました。

そうそう、Ubuntuをインストールするときに、Windows10のパーティションが多く表示されて、ブートローダーのインストール先を指定するために外部ディスプレイをつなげて作業をしていたのですが、画面の設定で縦画面にするとなんとなかなると、知り合いに教えてもらいました。首を傾げながらのマウス操作になりますが、なんとかなりますね。ちょっとした裏技なので教えてもらって得した気分です。なるほどねー。

続きがあります。… 「USBメモリ起動のUbuntu18.04 について、EFIパーティションを修復するときの手順

同じタグの記事: Linux
同じタグの記事: Ubuntu18.04
同じタグの記事: UEFI
同じタグの記事: Windows10
同じカテゴリの記事: Linux