「EFIシステムパーティションを新たに作成した」などの理由でGrubブートローダをインストールしたい人に向けてその方法を説明します。
目次
更新履歴
- 2020年4月26日 ……
bash💩/etc/fstab
の編集について追記
注意事項
上級者向けです。
基本的に Grub を修復するのであれば、『boot-repair』というソフトを Ubuntu Live USB(Ubuntuインストールディスク)で実行すれば大丈夫なのですが、空 or GrubがインストールされたことのないEFIシステムパーティションにGrubを新しく入れようとすると、『boot-repair』では無理だった気がします。
今回は、 Ubuntu Live USB(Ubuntuインストールディスク)で 任意の EFIシステムパーティションに Grub をインストールします。
前提として、PCのどこかに(内蔵 or 外付けデバイス問わない)Ubuntuがインストールされている必要があります。Ubuntuをインストールする際に Grub はインストールされるので、特別な事情が無い限りこんなことする必要が無いと思うのですが、
- 内蔵SSD・HDDのEFIシステムパーティションにGrubブートローダをインストールしていたが、外付けHDDのEFIシステムパーティションにGrubをインストールしなおしたい
といった時に役立つと思います。
Grubをインストールする
Ubuntu Live USB(Ubuntuインストールディスク) を立ち上げます。
まずは、『GParted』でGrubをインストールしたいEFIシステムパーティションの場所と Ubuntu がインストールされた場所を確認しましょう。今回は、
/dev/sda1
:GrubをインストールしたいEFIシステムパーティション/dev/sda2
:Ubuntu
と仮定します。EFIシステムパーティションが無いUSBメモリ or 外付けHDD等を使う場合は、 EFIシステムパーティションを作成する必要があるので、別記事にまとめます。
sudo -s
mkdir /chroot
mount /dev/sda2 /chroot
mount --bind /dev /chroot/dev
mount --bind /dev/pts /chroot/dev/pts
mount --bind /proc /chroot/proc
mount --bind /sys /chroot/sys
mount --bind /run /chroot/run
chroot /chroot
上の通りにコマンドを実行して、/dev/sda2
にインストールされた Ubuntu に chroot します。
mount /dev/sda1 /boot/efi
grub-install --efi-directory=/boot/efi
update-grub
で、 /dev/sda1
に Grub をインストールします。
Grub をインストールすると、自動的に、マザボのNVRAMに ubuntu のブートエントリが作成(上書き)されます。
最後に、 /etc/fstab
を編集します。
blkid /dev/sda1
でEFIシステムパーティションのUUIDを確認し、 /etc/fstab
の該当箇所のUUIDを修正します。
これで Grub ブートローダのインストールは終了です。
USBメモリや外付けHDDを他のPCに挿してUbuntuを起動させたい場合
USBメモリや外付けHDDにUbuntuをインストールさせた場合、そのUSBメモリ or 外付けHDDのEFIシステムパーティションにGrubがインストールされていれば、理論上はUbuntuを他のPCに挿して起動することができそうです。
しかし、実際には、できないっぽいです。GrubをインストールしたPCのマザボのNVRAMにはUbuntuのブートエントリ、すなわち、「UUIDがXXXのパーティションのGrubを読み込め!」みたいな内容が書き込まれますが、他のPCではUSBメモリ or 外付けHDDのGrubが見つからないからです。これは、 USBメモリ or 外付けHDDの『BOOT Order(BOOT優先度)』を上げれば解決するように思えますが、それでも解決しない事があります。拙者の環境では、Grubメニューが表示されず、『System BootOrder not found. Initializing defaults.』と表示されて再起動する問題に直面しました。
どうやら、次の方法を使えば解決するようです。
sudo -s
mkdir /mnt/efi
mount /dev/sda1 /mnt/efi
cd /mnt/efi
rm EFI/Boot/BOOTX64.efi
cp EFI/ubuntu/grubx64.efi EFI/Boot
cd EFI/Boot
mv grubx64.efi bootx64.efi
umount /dev/sda1
EFI/Boot/BOOTX64.efi
は EFI/Boot/bootx64.efi
のように小文字だったりもするみたいです。上の例では rm で削除してますが、バックアップとっておいた方が無難な気がします。
以上の作業で、他のPCでもUSBメモリ or 外付けHDDからUbuntuの起動ができます。