茱萸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

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

関連記事

WindowsでSerialポートを使う

C++/CLI又はC#を使い、Windows上でSerialポートの制御をしてみます。

Windows 10 で OpenSSH サーバーを使う

Windows 10 で OpenSSH サーバーを立ち上げて、外部から SSH ログインできるようにします。

プロキシ設定が必要な学内LANに接続するときに役に立つスクリプト

プロキシ設定が必要な学内 or 社内LANに接続する際のプロキシ設定の切り替えをしやすくするスクリプトを用意します。

【Ubuntu】NVIDIAドライバ・CUDA・CUDNNをインストールして深層学習環境を整える

Ubuntuで Nvidiaドライバ、CUDA、CUDNN をインストールし深層学習環境を整える方法を説明します。

【Ubuntu】【上級者向け】Grubブートローダを削除する

「デュアルブートしてたけどUbuntuを削除することにした。」という人などに向けて、Grubブートローダ(Ubuntuのブートローダ)を削除する方法を説明します。