「設定 - ブートローダ」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の16版が非表示)
36行目: 36行目:
*: 設定や拡張が容易で、組み込みLinuxの開発に適している。
*: 設定や拡張が容易で、組み込みLinuxの開発に適している。
*: <br>
*: <br>
* AT91Bootstrap
* AT91Bootstrap <span style="color:#C00000">(※)</span>
*: Microchip (旧Atmel) のAT91シリーズARM SoCを対象とした小型のブートローダである。
*: Microchip (旧Atmel) のAT91シリーズARM SoCを対象とした小型のブートローダである。
*: メモリの初期化、クロックの設定、U-Boot等の他のブートローダの起動を行う。
*: メモリの初期化、クロックの設定、U-Boot等の他のブートローダの起動を行う。
*: シンプルで軽量であり、AT91シリーズのSoCを使用する組み込みシステムに適している。
*: シンプルで軽量であり、AT91シリーズのSoCを使用する組み込みシステムに適している。
*: <br>
*: <br>
* Coreboot
* Coreboot <span style="color:#C00000">(※)</span>
*: オープンソースのファームウェアプロジェクトであり、主にx86ベースのシステムをサポートしている。
*: オープンソースのファームウェアプロジェクトであり、主にx86ベースのシステムをサポートしている。
*: BIOS/UEFIの代替として使用され、高速起動とセキュリティ機能を提供する。
*: BIOS/UEFIの代替として使用され、高速起動とセキュリティ機能を提供する。
72行目: 72行目:
*: Linux、MacOS、Windows等の複数のOSを検出して、ブートメニューに自動的に追加する。
*: Linux、MacOS、Windows等の複数のOSを検出して、ブートメニューに自動的に追加する。
*: テーマやアイコンのカスタマイズが可能であり、視覚的に魅力的なブート環境を提供する。
*: テーマやアイコンのカスタマイズが可能であり、視覚的に魅力的なブート環境を提供する。
<br>
<u>※注意</u><br>
<u>AT91BootstrapやCorebootは、ブートプロセスの初期段階を担当するブートローダ (ファームウェア) である。</u><br>
<u>これらは、ハードウェアの初期化、メモリの設定、クロックの設定等の低レベルのタスクを処理する。</u><br>
<br>
<u>一方、U-Boot等のブートローダは、より高レベルの機能を提供する。</u><br>
<u>これには、カーネルのロード、ブートパラメータの渡し、ファイルシステムの読み込み等が含まれている。</u><br>
<br>
したがって、AT91BootstrapやCorebootを使用する場合、一般的には以下に示すようなブートプロセスを行う。<br>
# まず、AT91Bootstrap / Corebootが、ハードウェアの初期化と低レベルの設定を行う。
# 次に、AT91Bootstrap / Corebootが、U-Boot等の高レベルのブートローダをロードして実行する。
# AT91Bootstrap / Corebootにより実行されたU-Bootが、カーネルのロード、ブートパラメータの渡し、ルートファイルシステムのマウント等を行う。
# U-Bootがカーネルを起動して、システムが立ち上がる。
<br>
<u>このように、AT91BootstrapやCorebootは、U-Boot等のブートローダと組み合わせて使用されることが一般的である。</u><br>
<u>これにより、ブートプロセスを段階的に行うことができ、それぞれのブートローダがその得意とする部分を担当することができる。</u><br>
<br><br>
<br><br>


== GRUB2 ==
== GRUB2 ==
==== GRUB2とは ====
GRUB2 (GRand Unified Bootloader version 2) は、Linuxシステムで広く使用されているブートローダである。<br>
GRUB2 (GRand Unified Bootloader version 2) は、Linuxシステムで広く使用されているブートローダである。<br>
GRUB2は、Linuxシステムにおいて重要な役割を果たしており、ブートプロセスをカスタマイズや複数のOSを管理するための強力で柔軟なツールである。<br>
GRUB2は、Linuxシステムにおいて重要な役割を果たしており、ブートプロセスをカスタマイズや複数のOSを管理するための強力で柔軟なツールである。<br>
100行目: 115行目:
*: GRUB2は、システムが起動しない場合に備えて、復旧モードを提供する。
*: GRUB2は、システムが起動しない場合に備えて、復旧モードを提供する。
*: これにより、ユーザはシステムを修復するためのオプションにアクセスできる。
*: これにより、ユーザはシステムを修復するためのオプションにアクセスできる。
<br><br>
== GRUB2のブートエントリ ==
==== Linuxのブートエントリ ====
デュアルブートをしている場合、WindowsのアップデートによりLinuxのGRUB2ブートローダが表示されない場合がある。<br>
この時、以下に示す手順を行うことにより、GRUB2のブートメニューのエントリを復旧することができる。<br>
<br>
===== 方法 1 : chrootの使用 =====
各LinuxディストリビューションのライブUSBを準備する。<br>
ライブUSBからLinuxを起動する。<br>
<br>
ターミナルを開いて、既存のLinuxのインストール先パーティションをマウントする。<br>
※Xは、既存のLinuxがインストールされているストレージ番号を指定する。
※Yは、既存のLinuxがインストールされているGRUB2ブートローダのパーティション番号を指定する。
sudo mount /dev/sdXY /mnt
<br>
必要なディレクトリをバインドマウントする。<br>
<syntaxhighlight lang="sh">
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
</syntaxhighlight>
<br>
chroot環境に入る。<br>
sudo chroot /mnt
<br>
GRUB2を再インストールする。<br>
※Xは、既存のLinuxがインストールされているストレージ番号を指定する。
grub-install /dev/sdX
# または
grub2-install /dev/sdX
<br>
GRUB2を更新する。<br>
update-grub
<br>
chroot環境を終了する。<br>
exit
<br>
マウントを解除する。<br>
sudo umount /mnt/sys /mnt/proc /mnt/run /mnt/dev /mnt
<br>
PCを再起動して、GRUB2のブートメニューが表示されるかどうかを確認する。<br>
<br>
===== 方法 2 : efibootmgrの使用 =====
各LinuxディストリビューションのライブUSBを準備する。<br>
ライブUSBからLinuxを起動する。<br>
<br>
現在のブートエントリを確認して、現在の/boot/EFIディレクトリに何が登録されているかを確認する。<br>
例えば、"sles"は存在しているが、"sles-secureboot"は他のOSにより削除されている等。<br>
sudo efibootmgr -v
<br>
/boot/efi/EFIパーティション (Linux EFIパーティション) を確認する。<br>
これは、<u>Type: EFI System</u>と表示されている場合が多い。<br>
<br>
例えば、NVMe SSDを使用している場合は、/dev/nvme0n1p1 (NVMe SSDの1番目のパーティション) 等と表示される。<br>
sudo fdisk -l
# 例:
デバイス          開始位置    終了位置    セクタ      サイズ  タイプ
/dev/nvme0n1p1  2048      1050623    1048576    512M    EFI システム
/dev/nvme0n1p2  1050624    934641663  933591040  445.2G  Linux ファイルシステム
/dev/nvme0n1p3  934641664  1000215182  65573519  31.3G  Linux スワップ
<br>
UEFIブートエントリを復元する。<br>
ストレージ (-dオプション) および パーティション (-pオプション) を付加する。<br>
<br>
<u>※注意</u><br>
<u>32bit OSの場合は、ブートローダファイルは<u>GRUB.EFI</u>という<u>X64</u>が除外されたファイル名となる。</u><br>
sudo efibootmgr -c -w                \
                -L <ブートディレクトリ名>  \
                -d <パーティション名>    \
                -l <ブートローダファイル>
# 例 1: SUSE Linux Enterpriseにおいて、セキュアブートが有効の場合
sudo efibootmgr -c -w                \
                -L sles-secureboot    \
                -d /dev/nvme0n1 -p 1  \
                -l /EFI/SLES/SHIM.EFI
# 例 2: SUSE Linux Enterpriseにおいて、セキュアブートが無効の場合
sudo efibootmgr -c -w        \
                -L sles      \
                -d /dev/sda1 \
                -l "<例: 64bitの場合 : /EFI/SLES/GRUBX64.EFI, 32bitの場合 : /EFI/SLES/GRUB.EFI>"
<br>
システムの再起動後に、現在のブートエントリを確認する。<br>
sudo efibootmgr -v
<br>
これにより、UEFIファームウェアはLinuxシステムを見つけることができる。<br>
<br>
==== Winodwsのブートエントリ ====
デュアルブートをしている場合、Linuxのインストール・アップデートにより、Winodwsのブートメニューが表示されない場合がある。<br>
この時、以下に示す手順を行うことにより、GRUB2のブートメニューのエントリを復旧することができる。<br>
<br>
まず、WinodwsのEFIシステムパーティションを確認する。<br>
sudo fdisk -l
<br>
<u>※注意</u><br>
<u>os-proberパッケージを使用してWindowsを自動的に検出できる場合もある。</u><br>
<u>その場合は、/etc/default/grubファイル内の<code>GRUB_DISABLE_OS_PROBER</code>オプションの値を<code>false</code>を設定して、grub2-mkconfigコマンドを実行する。</u><br>
<u>これにより、Windowsのブートエントリが自動的に追加される可能性がある。</u><br>
<br>
# RHEL
sudo dnf install os-prober
# SUSE
sudo zypper install os-prober
<br>
次に、Windowsのブートエントリを追加するため、GRUB2の設定ファイルを編集する。<br>
  sudo vi /etc/grub.d/40_custom
<br>
# /etc/grub.d/40_customファイル
menuentry "Windows User Add" {
    insmod part_gpt
    insmod ntfs
    # (hd0,gpt1) は、WindowsのEFIシステムパーティションの位置を示している
    # gpt1 : /dev/sdX1パーティションにWindowsのブートパーティションが存在する場合
    # gpt2 : /dev/sdX2パーティションにWindowsのブートパーティションが存在する場合
    set root='(hd0,gpt1)'
    chainloader +1
}
<br>
GRUB2を更新する。<br>
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
<br><br>
== エラー関連 ==
==== Fix Minimal BASH like line editing is supported GRUB Error ====
LinuxとWindowsとデュアルブートでインストールする場合、再起動時に以下に示すようなGRUBエラーが出力される場合がある。
Minimal BASH like line editing is supported. For the first word, TAB lists possible command completions.
anywhere else TAB lists possible device or file completions.
<br>
これは、RHEL、SUSE、Debian GNU/Linux等の全てのLinuxディストリビューションで発生する可能性のある一般的なGRUBエラーである。
また、頻繁に発生する同様の問題である<u>"error: no such partition grub rescue"</u>エラーを修正する場合も、以下に示す手順で解決することができる。<br>
<br>
この問題を解決するには、以下に示すものが必要である。<br>
* 同じLinuxディストリビューションのライブUSB
* ライブセッションでのインターネット接続
<br>
まず、ライブLinux USBを起動する。<br>
<br>
次に、LinuxがUEFIあるいはBIOSを使用しているかどうかを確認する。<br>
[Type:]に[EFI System]との記述がある場合は、LinuxがUEFIを使用していることを意味する。<br>
sudo fdisk -l
<br>
<br>
==== GRUB2の復旧 ====
GRUBを再インストールする。<br>
例えば、WindowsのアップデートによりLinuxのGRUB2ブートローダが表示されない場合がある。<br>
* UEFIを使用している場合
この時、以下に示す手順を行うことにより、GRUB2を復旧することができる。<br>
*# まず、ルートパーティション (/) をマウントする。
*#: <pre>sudo mount /dev/sdXY /mnt</pre>
*# 次に、ブートパーティション (UEFI) をマウントする。
*#: <pre>sudo mount /dev/sdXZ /mnt/boot/efi</pre>
*# 最後に、GRUB (UEFI) をインストールする。
*#: <code>bootloader-id</code>オプションにおいて、/boot/efi/EFIディレクトリにあるディレクトリ名を確認することにより、現在使用しているbootloader-idを知ることができる。
*#: <code>--bootloader-id</code>オプションは任意の値を設定できるため、システム管理者が別の値を選択している可能性もある。
*#: <br>
*#: --bootloader-idオプションのデフォルト値
*#:* RHELの場合: redhat
*#:* SLEの場合: sles / sled
*#:* Ubuntuの場合: ubuntu
*#: <pre>sudo grub-install --boot-directory=/mnt/boot --bootloader-id=<ID名> --target=x86_64-efi --efi-directory=/mnt/boot/efi</pre>
*# PCを再起動する。
<br>
<br>
# 各LinuxディストリビューションのライブUSBを準備する。
* BIOSを使用している場合
# ライブUSBからLinuxを起動する。<br>
*# まず、ルートパーティション (/) をマウントする。<br>BIOSでは、ブートパーティション (BIOS) も同時にマウントされる。
# ターミナルを開いて、既存のLinuxのインストール先パーティションをマウントする。
*#: <pre>sudo mount /dev/sdXY /mnt</pre>
#: <code>sudo mount /dev/sdXY /mnt</code>
*# 最後に、GRUB (BIOS) をインストールする。
#: Xは、既存のLinuxがインストールされているストレージ番号を指定する。
*#: <pre>sudo grub-install /dev/sdX</pre>
#: Yは、既存のLinuxがインストールされているGRUB2ブートローダのパーティション番号を指定する。
*# PCを再起動する。
# 必要なディレクトリをバインドマウントする。
#: <code>for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done</code>
# chroot環境に入る。
#: <code>sudo chroot /mnt</code>
# GRUB2を再インストールする。
#: <code>grub-install /dev/sdX</code>
#: Xは、既存のLinuxがインストールされているストレージ番号を指定する。
# GRUB2の設定ファイルを更新する。
#: <code>update-grub</code>
# chroot環境を終了して、マウントを解除する。
#: <code>exit</code>
#: <code>sudo umount /mnt/sys /mnt/proc /mnt/run /mnt/dev /mnt</code>
# PCを再起動して、GRUB2のブートメニューが表示されるかどうかを確認する。
<br><br>
<br><br>



2024年11月1日 (金) 14:51時点における最新版

概要

ブートローダとは、コンピュータの起動時にオペレーティングシステム(OS)を読み込み、実行するためのプログラムである。

Linuxには、いくつかのブートローダが存在しており、それぞれ固有の機能と利点を持っている。
Linuxにおいて、一般的に使用されるブートローダを以下に示す。

これらのブートローダは、それぞれの長所と短所を持っており、システムの要件、ファイルシステム、ファームウェアのタイプ(BIOS/UEFI)等、ユーザの好みに応じて選択される。
現在、最も広く使用されているLinuxブートローダはGRUB2であるが、他のブートローダも特定の用途に適している。

  • GRUB (GRand Unified Bootloader)
    GRUB2の前身であり、レガシーバージョンと呼ばれることもある。
    設定ファイルは、/boot/grub/grub.cfgまたは/boot/grub/menu.lstに存在する。
    GRUB2ほど高機能ではないが、より単純な設定で動作する。

  • Tow-Boot
    Chromebookや他のARMベースのデバイス用のオープンソースブートローダである。
    U-Bootをベースとしており、ChromeOSデバイス上でLinuxや他のオペレーティングシステムを起動するために使用される。
    ファームウェアの更新や検証、ブートモードの選択等、幅広い機能を提供する。
    Chromebookユーザの間で人気が高まっており、ChromeOSの代替OSを試す際に重要な役割を果たしている。

  • U-Boot
    組み込みシステムやシングルボードコンピュータ用の強力なブートローダである。
    ARMベースのデバイスで広く使用されており、ブートプロセスの制御と設定に使用される。
    ネットワークブート、RAMディスクのロード、ファームウェアの更新等、多様な機能を提供する。
    高度にカスタマイズ可能で、組み込み環境での柔軟性を提供する。

  • RedBoot
    主にARMベースの組み込みシステム用のブートローダである。
    eCosオペレーティングシステムと緊密に統合されており、eCosの開発とデバッグに使用される。
    フラッシュメモリの管理、ネットワークブート、デバッグ機能等、幅広い機能を提供する。
    組み込みシステムの開発者にとって重要なツールの1つである。

  • Barebox
    U-Bootから派生した組み込みシステム用のブートローダである。
    ARMやPowerPC、MIPSなど、さまざまなアーキテクチャをサポートしている。
    デバイスツリーのサポート、ネットワークブート、ファームウェアの更新など、多くの機能を提供する。
    設定や拡張が容易で、組み込みLinuxの開発に適している。

  • AT91Bootstrap (※)
    Microchip (旧Atmel) のAT91シリーズARM SoCを対象とした小型のブートローダである。
    メモリの初期化、クロックの設定、U-Boot等の他のブートローダの起動を行う。
    シンプルで軽量であり、AT91シリーズのSoCを使用する組み込みシステムに適している。

  • Coreboot (※)
    オープンソースのファームウェアプロジェクトであり、主にx86ベースのシステムをサポートしている。
    BIOS/UEFIの代替として使用され、高速起動とセキュリティ機能を提供する。
    ペイロードと呼ばれるブートローダ (U-Boot等) を起動することができる。
    Chromebook等の一部の組み込みデバイスでも使用されている。

  • Kexecboot
    Linuxカーネルのkexec機能を利用したブートローダである。
    稼働中のカーネルから直接新しいカーネルを起動することができ、高速な再起動が可能である。
    設定が簡単であり、組み込みシステムでの迅速なカーネル切り替えに適している。

  • LILO (LInux LOader)
    Linuxの初期のブートローダの1つで、古いシステムではまだ使用されている。
    設定ファイルは、/etc/liloに存在する。
    カーネルイメージやinitrdを直接読み込むことができる。
    ブートセクタに直接書き込むため、設定変更後は常にブートセクタを更新する必要がある。

  • Syslinux
    FAT、ext2、ext3、ext4等のファイルシステムをサポートしている。
    ISOLINUXを使用して、ブート可能なCDやDVDを作成するために広く使用されている。
    PXELINUXを使用して、ネットワーク経由でブートすることもできる。

  • systemd-boot (旧名: gummiboot)
    UEFIシステム用の単純なブートマネージャーである。
    設定ファイルは、/boot/loader/entries/ディレクトリ内の.confファイルである。
    シンプルでミニマルな設計が特徴で、高速な起動が可能である。

  • rEFInd
    UEFIシステム用のブートマネージャーであり、グラフィカルなユーザーインターフェースを提供する。
    Linux、MacOS、Windows等の複数のOSを検出して、ブートメニューに自動的に追加する。
    テーマやアイコンのカスタマイズが可能であり、視覚的に魅力的なブート環境を提供する。


※注意
AT91BootstrapやCorebootは、ブートプロセスの初期段階を担当するブートローダ (ファームウェア) である。
これらは、ハードウェアの初期化、メモリの設定、クロックの設定等の低レベルのタスクを処理する。

一方、U-Boot等のブートローダは、より高レベルの機能を提供する。
これには、カーネルのロード、ブートパラメータの渡し、ファイルシステムの読み込み等が含まれている。

したがって、AT91BootstrapやCorebootを使用する場合、一般的には以下に示すようなブートプロセスを行う。

  1. まず、AT91Bootstrap / Corebootが、ハードウェアの初期化と低レベルの設定を行う。
  2. 次に、AT91Bootstrap / Corebootが、U-Boot等の高レベルのブートローダをロードして実行する。
  3. AT91Bootstrap / Corebootにより実行されたU-Bootが、カーネルのロード、ブートパラメータの渡し、ルートファイルシステムのマウント等を行う。
  4. U-Bootがカーネルを起動して、システムが立ち上がる。


このように、AT91BootstrapやCorebootは、U-Boot等のブートローダと組み合わせて使用されることが一般的である。
これにより、ブートプロセスを段階的に行うことができ、それぞれのブートローダがその得意とする部分を担当することができる。


GRUB2

GRUB2 (GRand Unified Bootloader version 2) は、Linuxシステムで広く使用されているブートローダである。
GRUB2は、Linuxシステムにおいて重要な役割を果たしており、ブートプロセスをカスタマイズや複数のOSを管理するための強力で柔軟なツールである。

GRUB2の主な役割と概念は以下の通りである。

  • ブートプロセスの制御
    GRUB2は、BIOS/UEFIにより最初に読み込まれて、OSを起動するためのブートプロセスを制御する。
  • ブートメニューの提供
    GRUB2は、インストールされている複数のOSをリストアップしたブートメニューを表示する。
    ユーザは、このメニューからブートするOSを選択できる。
  • 設定ファイル
    GRUB2の設定は、主に/etc/default/grubファイル/etc/grub.d/ディレクトリ内のファイルで定義される。
    これらのファイルは、ブートメニューのエントリ、デフォルトのOS、タイムアウト等を制御する。
  • モジュラー設計
    GRUB2は、モジュール式の設計を採用している。
    これにより、必要な機能を動的に読み込むことができ、柔軟性と拡張性が向上する。
  • 複数のファイルシステムとOSのサポート
    GRUB2は、ext4、btrfs、NTFS、FAT等、様々なファイルシステムをサポートしている。
    また、Linux、Windows、MacOS等、複数のOSをブートすることができる。
  • コマンドラインインターフェース
    GRUB2は、ブートメニューで[C]キーを押下することにより、アクセスできるコマンドラインインターフェースを提供する。
    このインターフェースを使用して、ブートパラメータの編集やカスタムブートエントリの追加等を行うことができる。
  • 復旧機能
    GRUB2は、システムが起動しない場合に備えて、復旧モードを提供する。
    これにより、ユーザはシステムを修復するためのオプションにアクセスできる。



GRUB2のブートエントリ

Linuxのブートエントリ

デュアルブートをしている場合、WindowsのアップデートによりLinuxのGRUB2ブートローダが表示されない場合がある。
この時、以下に示す手順を行うことにより、GRUB2のブートメニューのエントリを復旧することができる。

方法 1 : chrootの使用

各LinuxディストリビューションのライブUSBを準備する。
ライブUSBからLinuxを起動する。

ターミナルを開いて、既存のLinuxのインストール先パーティションをマウントする。

※Xは、既存のLinuxがインストールされているストレージ番号を指定する。
※Yは、既存のLinuxがインストールされているGRUB2ブートローダのパーティション番号を指定する。
sudo mount /dev/sdXY /mnt


必要なディレクトリをバインドマウントする。

 for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done


chroot環境に入る。

sudo chroot /mnt


GRUB2を再インストールする。

※Xは、既存のLinuxがインストールされているストレージ番号を指定する。
grub-install /dev/sdX
# または
grub2-install /dev/sdX


GRUB2を更新する。

update-grub


chroot環境を終了する。

exit


マウントを解除する。

sudo umount /mnt/sys /mnt/proc /mnt/run /mnt/dev /mnt


PCを再起動して、GRUB2のブートメニューが表示されるかどうかを確認する。

方法 2 : efibootmgrの使用

各LinuxディストリビューションのライブUSBを準備する。
ライブUSBからLinuxを起動する。

現在のブートエントリを確認して、現在の/boot/EFIディレクトリに何が登録されているかを確認する。
例えば、"sles"は存在しているが、"sles-secureboot"は他のOSにより削除されている等。

sudo efibootmgr -v


/boot/efi/EFIパーティション (Linux EFIパーティション) を確認する。
これは、Type: EFI Systemと表示されている場合が多い。

例えば、NVMe SSDを使用している場合は、/dev/nvme0n1p1 (NVMe SSDの1番目のパーティション) 等と表示される。

sudo fdisk -l

# 例:
デバイス          開始位置     終了位置     セクタ      サイズ   タイプ
/dev/nvme0n1p1   2048       1050623     1048576    512M    EFI システム
/dev/nvme0n1p2   1050624    934641663   933591040  445.2G  Linux ファイルシステム
/dev/nvme0n1p3   934641664  1000215182  65573519   31.3G   Linux スワップ


UEFIブートエントリを復元する。
ストレージ (-dオプション) および パーティション (-pオプション) を付加する。

※注意
32bit OSの場合は、ブートローダファイルはGRUB.EFIというX64が除外されたファイル名となる。

sudo efibootmgr -c -w                \
                -L <ブートディレクトリ名>  \
                -d <パーティション名>    \
                -l <ブートローダファイル>

# 例 1: SUSE Linux Enterpriseにおいて、セキュアブートが有効の場合
sudo efibootmgr -c -w                 \
                -L sles-secureboot    \
                -d /dev/nvme0n1 -p 1  \
                -l /EFI/SLES/SHIM.EFI

# 例 2: SUSE Linux Enterpriseにおいて、セキュアブートが無効の場合
sudo efibootmgr -c -w        \
                -L sles      \
                -d /dev/sda1 \
                -l "<例: 64bitの場合 : /EFI/SLES/GRUBX64.EFI, 32bitの場合 : /EFI/SLES/GRUB.EFI>"


システムの再起動後に、現在のブートエントリを確認する。

sudo efibootmgr -v


これにより、UEFIファームウェアはLinuxシステムを見つけることができる。

Winodwsのブートエントリ

デュアルブートをしている場合、Linuxのインストール・アップデートにより、Winodwsのブートメニューが表示されない場合がある。
この時、以下に示す手順を行うことにより、GRUB2のブートメニューのエントリを復旧することができる。

まず、WinodwsのEFIシステムパーティションを確認する。

sudo fdisk -l


※注意
os-proberパッケージを使用してWindowsを自動的に検出できる場合もある。
その場合は、/etc/default/grubファイル内のGRUB_DISABLE_OS_PROBERオプションの値をfalseを設定して、grub2-mkconfigコマンドを実行する。
これにより、Windowsのブートエントリが自動的に追加される可能性がある。

# RHEL
sudo dnf install os-prober

# SUSE
sudo zypper install os-prober


次に、Windowsのブートエントリを追加するため、GRUB2の設定ファイルを編集する。

 sudo vi /etc/grub.d/40_custom


# /etc/grub.d/40_customファイル

menuentry "Windows User Add" {
   insmod part_gpt
   insmod ntfs

   # (hd0,gpt1) は、WindowsのEFIシステムパーティションの位置を示している
   # gpt1 : /dev/sdX1パーティションにWindowsのブートパーティションが存在する場合
   # gpt2 : /dev/sdX2パーティションにWindowsのブートパーティションが存在する場合
   set root='(hd0,gpt1)'
   chainloader +1
}


GRUB2を更新する。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg



エラー関連

Fix Minimal BASH like line editing is supported GRUB Error

LinuxとWindowsとデュアルブートでインストールする場合、再起動時に以下に示すようなGRUBエラーが出力される場合がある。

Minimal BASH like line editing is supported. For the first word, TAB lists possible command completions.
anywhere else TAB lists possible device or file completions.


これは、RHEL、SUSE、Debian GNU/Linux等の全てのLinuxディストリビューションで発生する可能性のある一般的なGRUBエラーである。 また、頻繁に発生する同様の問題である"error: no such partition grub rescue"エラーを修正する場合も、以下に示す手順で解決することができる。

この問題を解決するには、以下に示すものが必要である。

  • 同じLinuxディストリビューションのライブUSB
  • ライブセッションでのインターネット接続


まず、ライブLinux USBを起動する。

次に、LinuxがUEFIあるいはBIOSを使用しているかどうかを確認する。
[Type:]に[EFI System]との記述がある場合は、LinuxがUEFIを使用していることを意味する。

sudo fdisk -l


GRUBを再インストールする。

  • UEFIを使用している場合
    1. まず、ルートパーティション (/) をマウントする。
      sudo mount /dev/sdXY /mnt
    2. 次に、ブートパーティション (UEFI) をマウントする。
      sudo mount /dev/sdXZ /mnt/boot/efi
    3. 最後に、GRUB (UEFI) をインストールする。
      bootloader-idオプションにおいて、/boot/efi/EFIディレクトリにあるディレクトリ名を確認することにより、現在使用しているbootloader-idを知ることができる。
      --bootloader-idオプションは任意の値を設定できるため、システム管理者が別の値を選択している可能性もある。

      --bootloader-idオプションのデフォルト値
      • RHELの場合: redhat
      • SLEの場合: sles / sled
      • Ubuntuの場合: ubuntu
      sudo grub-install --boot-directory=/mnt/boot --bootloader-id=<ID名> --target=x86_64-efi --efi-directory=/mnt/boot/efi
    4. PCを再起動する。


  • BIOSを使用している場合
    1. まず、ルートパーティション (/) をマウントする。
      BIOSでは、ブートパーティション (BIOS) も同時にマウントされる。
      sudo mount /dev/sdXY /mnt
    2. 最後に、GRUB (BIOS) をインストールする。
      sudo grub-install /dev/sdX
    3. PCを再起動する。