茱萸note

電子工作の備忘録と旅行の記録

OS Ubuntu 電子工作

【Ubuntu】【上級者向け】Grubブートローダをインストールする

投稿日:2020年4月26日 更新日:

「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.efiEFI/Boot/bootx64.efi のように小文字だったりもするみたいです。上の例では rm で削除してますが、バックアップとっておいた方が無難な気がします。

以上の作業で、他のPCでもUSBメモリ or 外付けHDDからUbuntuの起動ができます。

-電子工作
-, ,


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Online Storageの画像を貼る

Online Storage上にアップロードした画像をBlog等に貼る方法を考察します。

ESP8266 で Tp-Link のスマートプラグ『Tapo P105』を直接操作する

Tp-Link のスマートプラグ『Tapo P105』をアプリや IFTTT といった外部サービスを用いずに、ESP8266 から直接操作してみます。

空のSSD・HDDにWindowsをインストールする

空っぽのSSD・HDDにWindowsをインストールする方法です。

Tp-Link のスマートプラグ『Tapo P105』を PC・Raspberry Pi から直接操作する

Tp-Link のスマートプラグ『Tapo P105』をアプリや IFTTT といった外部サービスを用いずに、PC・Raspberry Pi から直接操作してみます。

権限のない環境でvirtualenvを入れる

sudoが使えない、root権限のない環境でvirtualenvを入れます。