「GRUB」の版間の差分
同期 |
Kusanaginoturugi (トーク | 投稿記録) →UEFI システム: 英語版より記事を追加 |
||
| 29行目: | 29行目: | ||
* 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。 |
* 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。 |
||
* UEFI を使うようにインストールする場合、インストールメディアを UEFI モードで起動することが重要です。さもないと、''efibootmgr'' が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。 |
* UEFI を使うようにインストールする場合、インストールメディアを UEFI モードで起動することが重要です。さもないと、''efibootmgr'' が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。 |
||
* UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。 |
* UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。 |
||
* This whole article assumes that inserting additional GRUB2 modules via {{ic|insmod}} is possible. '''This is not the case''' however with newer GRUB2 versions '''on UEFI systems where Secure Boot is enabled''' - Secure Boot should block sideloading any arbitrary code, which also means GRUB2 modules. If Secure Boot is enabled, {{ic|insmod ...}} will most likely fail and throw out a security violation. If you want to use any additional GRUB module that is not included in the standard GRUB EFI file {{ic|grubx64.efi}} on systems where Secure Boot is enabled, you have to re-generate the GRUB EFI {{ic|grubx64.efi}} with {{ic|grub-mkstandalone}} with the additional GRUB modules included. |
|||
}} |
|||
=== インストール === |
=== インストール === |
||
2022年10月5日 (水) 17:13時点における版
関連記事
GRUB (GRand Unified Bootloader) はブートローダーです。現在の GRUB は GRUB 2 とも呼ばれています。もとの GRUB (GRUB Legacy) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。
esp は EFI システムパーティション(別名 ESP) のマウントポイントを示します。UEFI システム
- 次のページを読んで理解しておくことをおすすめします: Unified Extensible Firmware Interface、パーティショニング#GUID Partition Table、Arch ブートプロセス#UEFI_2。
- UEFI を使うようにインストールする場合、インストールメディアを UEFI モードで起動することが重要です。さもないと、efibootmgr が GRUB の UEFI ブートエントリを追加できません。フォールバックブートパスへのインストールは NVRAM を使用しないため、BIOS モードでも可能です。
- UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。EFI システムパーティション#既存のパーティションの確認 に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。
- This whole article assumes that inserting additional GRUB2 modules via
insmodis possible. This is not the case however with newer GRUB2 versions on UEFI systems where Secure Boot is enabled - Secure Boot should block sideloading any arbitrary code, which also means GRUB2 modules. If Secure Boot is enabled,insmod ...will most likely fail and throw out a security violation. If you want to use any additional GRUB module that is not included in the standard GRUB EFI filegrubx64.efion systems where Secure Boot is enabled, you have to re-generate the GRUB EFIgrubx64.efiwithgrub-mkstandalonewith the additional GRUB modules included.
インストール
- それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。GRUB や EFI が正しく動作しないという問題が起きたユーザーは下で説明されていること以外のハードウェア特有のケースについて詳しい手順を共有することが奨励されています。この記事では総合的なことしか書かれていないので、特別な場合については GRUB/EFI サンプルのページを見て下さい。
- このセクションでは、あなたが GRUB を x86_64 システムにインストールすると仮定しています。IA32(32ビット) UEFI システムの場合(32ビット CPU と混同しないでください)、適切な場所の
x86_64-efiをi386-efiに置き換えてください。 - セキュアブートでの使用については、セキュアブート を見てください。
まず、grub と efibootmgr をインストールしてください。GRUB はブートローダである一方、efibootmgr はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。
そして、以下の手順に従って GRUB をディスクにインストールしてください:
- EFI システムパーティションをマウントしてください。そして、このセクションの後の部分で出てくる
espという記述をそのマウントポイントに置き換えてください。 - ブートローダの識別子を選んでください、ここでは
GRUBとします。esp/EFI/にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。 - 以下のコマンドを実行して、GRUB EFI アプリケーション
grubx64.efiをesp/EFI/GRUB/に、モジュールを/boot/grub/x86_64-efi/にインストールしてください。# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB
ノート GRUB をブートローダとしてインストールするシステム内でパッケージをインストールし、grub-installを実行してください。つまり、ライブインストール環境から起動している場合、grub-installは chroot 環境の中で実行する必要があるということです。何らかの理由で、インストールされたシステムの外でgrub-installを実行する必要がある場合、マウントされた/bootディレクトリへのパスを--boot-directory=オプションに渡してください。例:--boot-directory=/mnt/boot.
上記のインストール作業が完了した後、メインの GRUB ディレクトリが /boot/grub/ に作成されています。別の場所を指定する方法については GRUB/ヒントとテクニック#代替インストール方法 を見てください。grub-install はファームウェアのブートマネージャにもエントリを作成しようとすることに注意してください。その名前は上記の例では GRUB となります。しかし、ブートエントリが埋まっていると、これは失敗します。この場合は efibootmgr を使って必要ないエントリを削除してください。
設定を確定したあとにメインの設定ファイルを生成することを忘れないでください。
--removable オプションを使うと、GRUB は esp/EFI/BOOT/BOOTX64.EFI にインストールされます(i386-efi の場合は esp/EFI/BOOT/BOOTIA32.EFI)。これにより、EFI 変数がリセットされた場合やドライブを他のコンピュータに移した場合でもドライブから起動することができるようになります。通常は BIOS を使用する方法と同じようにドライブを選択することで使うことができます。Windows とデュアルブートする場合、Windows は EFI パーティションの EFI フォルダの中に boot という名前のフォルダを作成するので注意してください。このフォルダによって Windows の EFI ブートオプションが再作成されます。Mac 上に GRUB をインストールする場合、このオプションを使用する必要があります。- オプション
--efi-directoryと--bootloader-idは GRUB UEFI 専用です。--efi-directoryは ESP のマウントポイントを指定します。このオプションと同じものとして以前は--root-directoryが使われていました。 - GRUB を BIOS システムで設定するときと異なり
grub-installコマンドの最後に <device_path> オプション (例:/dev/sda) を使わないことに注意してください。UEFI のブートローダーは MBR やパーティションのブートセクタを全く使わないので <device_path> が指定されてもインストールスクリプトはそれを無視します。
問題が発生した場合は #UEFI を見て下さい。加えて GRUB/ヒントとテクニック#UEFI の詳細情報 も参照してください。
BIOS システム
GUID Partition Table (GPT) 特有の手順
BIOS/GPT の構成では、BIOS ブートパーティションが必要です。GRUB は core.img をこのパーティションに埋め込みます。
- この方法を試す前に、すべてのシステムでこのパーティショニング方式がサポートされているわけではないということを心に留めておいてください。詳細は パーティショニング#GUID Partition Table を見てください。
- BIOS ブートパーティションは BIOS/GPT のセットアップでのみ GRUB が必要とします。BIOS/MBR セットアップでは、GRUB は MBR の後にある隙間を
core.imgのために使用します。しかし、GPT では 1 番目のパーティションの前にそのような未使用のスペースが存在することが保証されていません。 - UEFI システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは EFI システムパーティションが必要です。
ディスク上にパーティションタイプ GUID 21686148-6449-6E6F-744E-656564454649 の、ファイルシステムの無い 1 メビバイトのパーティションを作成してください(fdisk か gdisk で +1M)。
- fdisk では、パーティションタイプ
BIOS bootを選択してください。 - gdisk では、パーティションタイプコード
ef02を選択してください。 - parted では、そのパーティションで
bios_grubフラグをセット/アクティブ化してください。
このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。
GPT のアライメント仕様から外れますが、1番目のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。fdisk や gdisk では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。
Master Boot Record (MBR) 特有の手順
通常 MBR でパーティションされた環境において MBR の後の隙間 (512バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダー・アライメントは問題になりません。しかしながら GRUB の core.img 用に十分な領域を確保するため 1 から 2 MiB ほど MBR の後の領域をとることを推奨します (FS#24103)。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために (core.img の埋め込みとは関係ありません) 1 MiB パーティション・アライメントをサポートしているパーティションツールを使うのが得策です。
インストール
grub パッケージから GRUB をインストールできます。grub-legacyAUR がインストールされている場合は置き換えられます。次に以下の手順を実行します。
# grub-install --target=i386-pc /dev/sdX
i386-pc は実際のアーキテクチャに関わらず使用されます。/dev/sdX は GRUB がインストールされる ディスク (パーティションではありません) です。例えば、/dev/sda、/dev/nvme0n1 または /dev/mmcblk0 です。ブロックデバイスの命名方法については、デバイスファイル#ブロックデバイスの名前を参照してください。
次に、メイン設定ファイルを生成する必要があります。
LVM を /boot に使用している場合、GRUB を複数の物理ディスクにインストールすることができます。
grub-install コマンドの詳細については、grub-install(8) および GRUB Manual を参照してください。
設定
インストールされたシステムでは、GRUB は起動の度に設定ファイル /boot/grub/grub.cfg をロードします。ツールを使う場合は、#grub.cfg の生成 を、手動で作成する場合は #grub.cfg のカスタマイズ を参照してください。
grub.cfg の生成
このセクションでは /etc/default/grub 設定ファイルの編集についてだけ扱っています。他のオプションは GRUB/ヒントとテクニック を見て下さい。
メイン設定ファイルの生成
インストールした後は、メインの設定ファイル /boot/grub/grub.cfg を生成する必要があります。生成されるファイルは /etc/default/grub の様々なオプションや /etc/grub.d/ のスクリプトによって設定されます。
追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムの root ファイルシステムを見つけて、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに chroot していることが重要です。
- 設定ファイルのパスは
/boot/grub/grub.cfgです、/boot/grub/i386-pc/grub.cfgではありません。 - chroot や systemd-nspawn コンテナで grub-mkconfig を実行しようとした場合、次のようなエラーによりうまく行かないことがあります:
grub-probe: error: failed to get canonical path of /dev/sdaX。この場合、このフォーラムの投稿で記述されているように arch-chroot を使ってみて下さい。 - LVM を使って GRUB を chroot 環境内でインストールしているときに
grub-mkconfigが不定期に固まる場合、#Device /dev/xxx not initialized in udev database even after waiting 10000000 microseconds を見てください。
grub-mkconfig ツールを使って /boot/grub/grub.cfg を生成してください:
# grub-mkconfig -o /boot/grub/grub.cfg
デフォルトで、生成スクリプトは生成する設定に Arch Linux のカーネルをメニューエントリに自動で追加します。
- カーネルをインストール/アンインストールした後に上記のgrub-mkconfig コマンドを再度実行する必要があります。
- 複数の GRUB エントリを管理するためのヒントとして、例えば linux と linux-lts の両方を使用している場合、GRUB/ヒントとテクニック#複数のエントリを見てください。
他のオペレーティングシステムのエントリを自動的に追加する方法は #他の OS の検出 を見てください。
/etc/grub.d/40_custom を編集して /boot/grub/grub.cfg を再生成することで、追加のカスタムメニューエントリを追加することができます。または、/boot/grub/custom.cfg を作成して、そこにカスタムのメニューエントリを追加することもできます。/boot/grub/custom.cfg を編集した後に grub-mkconfig を再度実行する必要はありません。/etc/grub.d/41_custom には生成された設定ファイルを読み込むために必要な source 文があるからです。
/etc/grub.d/40_custom は /etc/grub.d/nn_custom を作成する際のテンプレートとして使うことができます。nn の部分は優先順位で、スクリプトを実行する順番を決定します。スクリプトを実行する順番は GRUB ブートメニューエントリの配置を決定します。実行しなければならないスクリプトを確実に実行させるために、nn は 06 よりも大きくする必要があります。カスタムのメニューエントリの例は #ブートメニューエントリの例 を見てください。
他の OS の検出
grub-mkconfig がインストールされている他のシステムを検索して自動的にメニューに追加するには、 os-prober パッケージを インストール して、他のシステムが起動するパーティションを マウント してください。その後、grub-mkconfig を再実行します。もし、以下のような出力が出たら Warning: os-prober will not be executed to detect other bootable partitions /etc/default/grub を編集してコメントを追加、もしくはコメントアウトを外してください。
GRUB_DISABLE_OS_PROBER=false を追加、もしくはコメントアウトを外します。
その後、もう一度試してください。
Windows
UEFI モードでインストールされた Windows の場合、Windows Boot Manager (bootmgfw.efi) を含んでいる EFI システムパーティションがマウントされていることを確認してください。root として os-prober を実行すると、Windows のエントリを検出・生成します。
BIOS モードでインストールされた Windows の場合、Windows システムパーティション をマウントしてください(そのパーティションのファイルシステムラベルは System Reserved か SYSTEM であるはずです)。root として os-prober を実行すると、Windows のエントリを検出・生成します。
- NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、NTFS-3G をインストールして再マウントしてみてください。
- 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、cryptsetup や dislockerAUR で実行できます。これで os-prober が正しいエントリを追加できるはずです。
追加引数
カスタムの追加引数を Linux イメージに渡すために、/etc/default/grub で GRUB_CMDLINE_LINUX と GRUB_CMDLINE_LINUX_DEFAULT 変数を設定することができます。この2つは grub.cfg を生成するときに互いに標準のブートエントリに追加されます。recovery ブートエントリについては、GRUB_CMDLINE_LINUX だけが生成時に使われます。
両方を使う必要はありませんが、上手く使えば便利です。例えば、GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sdaX quiet" (sdaX はスワップパーティション) を使ってハイバネーションの後の復帰を有効にすることができます。生成された recovery ブートエントリでは resume やメニューエントリからの起動中のカーネルメッセージを表示しない quiet は使われません。そして、他の (標準の) メニューエントリではオプションとして使われます。
GRUB のリカバリエントリを生成するには /etc/default/grub で #GRUB_DISABLE_RECOVERY=true をコメントアウトする必要があります。
また、GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}" を使うこともできます (${swap_uuid} は swap パーティションの UUID に置き換えて下さい)。
複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります:
GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/usr/lib/systemd/systemd"
詳しくはカーネルパラメータを見て下さい。
LVM
LVM を /boot で使っている場合、メニューエントリの行の前に次を追加してください:
insmod lvm
そしてメニューエントリで root を次のように指定してください:
set root=lvm/lvm_group_name-lvm_logical_boot_partition_name
サンプル:
# (0) Arch Linux
menuentry "Arch Linux" {
insmod lvm
set root=lvm/VolumeGroup-lv_boot
# you can only set following two lines
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro
initrd /initramfs-linux.img
}
RAID
GRUB には RAID ボリュームの便利な制御機能があります。ボリュームをネイティブに指定できる insmod mdraid09 または mdraid1x を追加する必要があります。例えば、/dev/md0 は次のようになります:
set root=(md/0)
一方パーティション済みの RAID ボリューム (例: /dev/md0p1) は次のとおりです:
set root=(md/0,1)
RAID1 を GPT ef02/'BIOS boot partition' のドライブ上の、/boot パーティション (もしくは RAID1 root パーティション上の /boot) で使っている場合に grub をインストールするには、ドライブの両方で grub-install を実行するだけです。例:
# grub-install --target=i386-pc --debug /dev/sda # grub-install --target=i386-pc --debug /dev/sdb
ここで /boot がある RAID1 アレイは /dev/sda と /dev/sdb に収容されます。
暗号化された /boot
GRUB には暗号化された /boot を起動するための特別なサポートがあります。これは、LUKS ブロックデバイスをアンロックして、GRUB の設定を読み込み、initramfs と カーネル をそのブロックデバイスからロードすることにより行われます。このオプションは暗号化されていないブートパーティションの問題を解決することを試みます。
/boot を別のパーティションに保存する必要はありません。システムのルート / ディレクトリツリー下に保存することもできます。この機能を有効化するには、/boot が存在するパーティションを通常通り LUKS を使って暗号化してください。そして、以下のオプションを /etc/default/grub に追加してください。
/etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
このオプションは grub-install により使用され、grub の core.img を生成します。
このオプションを追加した後やパーティションを暗号化した後に GRUB を(再)インストールすることを忘れないでください。
これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が /boot マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。キーファイルを使えば、これを防げます。
- メインの設定ファイルを生成したいときは、
/bootがマウントされていることを確認してください。 /bootマウントポイントが関与するシステムアップデートを行うために、アップデートする前に、暗号化された/bootがアンロックされていて、かつ、マウントされていることを確認してください。/bootパーティションが別にある場合、crypttab をキーファイルと一緒に使うことでこれを自動化できます。
- 特殊なキーマップを使用している場合、デフォルトの GRUB はそれが何なのかわかりません。このことは、LUKS ブロックデバイスをアンロックするためにどのようにしてパスフレーズを入力するかに関連しています。GRUB/ヒントとテクニック#初期ブートにおけるコアイメージの手動設定 を参照してください。
- パスワードの入力画面が表示されない問題が発生した場合(cryptouuid や cryptodisk、"device not found" に関係するエラー)、
--modules="part_gpt part_msdos"をgrub-installコマンドの最後に付け加えて GRUB を再インストールしてみてください。
LUKS2
GRUB 2.06 の LUKS2 に対するサポートは限られています。GRUB bug #55093 を参照してください。
- Argon2id (cryptsetup デフォルト) と Argon2i PBKDF はサポートされていません (GRUB bug #59409)。PBKDF2 のみのサポートです。
grub-installは LUKS2 のアンロックに使用できるコアイメージの作成をサポートしていません。回避策については、下記のコメントや grub-gitAUR のコメントを参照してください。
#インストール セクションで説明されているように grub-install を使用してください。しかし、生成される EFI バイナリは LUKS2 をサポートしておらず、置き換える必要があります。
grub-pre.cfg を作成してください。下記の /dev/nvme0n1p2 は適宜置き換えてください。コメントにあるコマンドの出力は暗号化されたパーティションの UUID からハイフンを除いたものになります。
# ... の部分は次のコマンドの出力に置き換えてください: lsblk -no TYPE,UUID /dev/nvme0n1p2 | awk '$1=="part"{print $2}' | tr -d -
set crypto_uuid=...
cryptomount -u $crypto_uuid
# LVM を使用する場合、crypto0 の部分を lvm/NameOfVolume のように置き換えてください。
set root=crypto0
set prefix=($root)/boot/grub
insmod normal
normal
以下のコマンドを実行してください。LVM を使用する場合、lvm を追加してください。必要であれば ext2 を btrfs に置き換えてください:
$ grub-mkimage -p /boot/grub -O x86_64-efi -c grub-pre.cfg -o /tmp/grubx64.efi luks2 part_gpt cryptodisk gcry_rijndael pbkdf2 gcry_sha256 ext2
ESP にコピーしてください:
# install -v /tmp/grubx64.efi esp/EFI/GRUB/grubx64.efi
起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、cryptomount -a を実行してすべての(できれば1つだけ)暗号化されたパーティションをマウントしてみてください。または、cryptomount -u $crypto_uuid を使用して特定のパーティションをマウントしてください。その後、通常通り insmod normal と normal で進めてください。
正しいパスフレーズを入力したが Invalid passphrase というエラーにより即座に戻される場合、正しい暗号化モジュールを指定していることを確認してください。cryptsetup luksDump /dev/nvme0n1p2 を使って、ハッシュ関数(SHA-256, SHA-512)とインストールされているモジュール(gcry_sha256, gcry_sha512)が一致するか、PBKDF アルゴリズムが pbkdf2 であるかを確認してください。cryptsetup luksConvertKey --hash sha256 --pbkdf pbkdf2 /dev/nvme0n1p2 を使えば、ハッシュと PBDKDF アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。
grub.cfg のカスタマイズ
このセクションでは grub-mkconfig に頼らずに /boot/grub/grub.cfg 内にある GRUB のブートエントリーを手動で作成する方法について言及します。
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。
(hdX,Y)はディスク X 上に存在するパーティション Y を表します。パーティション番号は1から始まり、ディスク番号は0から始まります。set default=Nはデフォルトのブートエントリを表し、ユーザーが操作せずにタイムアウトした後に選択されます。set timeout=Mは、ユーザーの選択が無かった場合に M 秒の間待ってデフォルトのブートエントリが起動されることを表します。menuentry "title" {entry options}はtitleというタイトルのブートエントリを表します。set root=(hdX,Y)はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に "root" パーティション(/)下にあるディレクトリを指定しても構いません)
ブートメニューエントリの例
/boot/grub/grub.cfg でも使用可能です。以下を /etc/grub.d/40_custom に追加してメインの設定ファイルを再生成するか、あるいは以下を直接 /boot/grub/custom.cfg に追加してください。複数の GRUB エントリーを管理するヒントとして、例えば linux と linux-lts カーネルを同時使用している場合は GRUB/ヒントとテクニック#複数のエントリ を見てください。
Archiso と Archboot のブートメニューエントリについては マルチブート USB ドライブ#ブートエントリ を見てください。
GRUB コマンド
"Shutdown" メニューエントリ
menuentry "System shutdown" {
echo "System shutting down..."
halt
}
"Restart" メニューエントリ
menuentry "System restart" {
echo "System rebooting..."
reboot
}
"UEFI Firmware Settings" メニューエントリ
if [ ${grub_platform} == "efi" ]; then
menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
fwsetup
}
fi
EFI バイナリ
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。
if 文で囲ってください。
if [ ${grub_platform} == "efi" ]; then
UEFI のときだけ表示するメニューエントリをここへ
fiUEFI シェル
EFI システムパーティション直下に UEFI シェル を置いてメニューエントリに追加すれば、UEFI シェルを起動できます:
menuentry "UEFI Shell" {
insmod fat
insmod chain
search --no-floppy --set=root --file /shellx64.efi
chainloader /shellx64.efi
}
gdisk
gdisk EFI アプリケーションをダウンロードして gdisk_x64.efi を esp/EFI/tools/ にコピーしてください。
menuentry "gdisk" {
insmod fat
insmod chain
search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi
chainloader /EFI/tools/gdisk_x64.efi
}
Unified カーネルイメージをチェインロード
セキュアブートに従って生成したか他の方法によって生成した Unified カーネルイメージを持っているならば、それをブートメニューに追加できます。例えば:
menuentry "Arch Linux" {
insmod fat
insmod chain
search --no-floppy --set=root --fs-uuid FILESYSTEM_UUID
chainloader /EFI/Linux/Arch-linux.efi
}
デュアルブート
GNU/Linux
もう一つのディストリビューションが sda2 パーティションにあると仮定します:
menuentry "Other Linux" {
set root=(hd0,2)
linux /boot/vmlinuz (必要であれば追加のオプションをここへ)
initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)
}
代わりに UUID やファイルシステムのラベルで GRUB に正しいパーティションを探させるには:
menuentry "Other Linux" {
# UUID が 763A-9CB6 だとすると
search --no-floppy --set=root --fs-uuid 763A-9CB6
# OTHER_LINUX というラベルで探す (パーティションラベルが曖昧でないことを確認してください)
#search --no-floppy --set=root --label OTHER_LINUX
linux /boot/vmlinuz (必要であれば追加のオプションをここへ。例えば、root=UUID=763A-9CB6)
initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)
}
もう一つのディストリビューションが、インストール済みの GRUB と grub.cfg、カーネル、initramfs のある有効な /boot フォルダーをすでに持っているならば、GRUB にその grub.cfg ファイルを起動中にその場で読み込ませることができます。例えば、hd0 と4番目の GPT パーティションの場合:
menuentry "configfile hd0,gpt4" {
insmod part_gpt
insmod btrfs
insmod ext2
set root='hd0,gpt4'
configfile /boot/grub/grub.cfg
}
このエントリを選ぶと GRUB は他のボリュームからその grub.cfg を読み込み、メニューを表示させます。configfile ファイル内のコマンドによって環境変数が変更されても、configfile から返ると環境変数の変更はすべて破棄されます。始めの GRUB メニューに戻る場合は Esc を押してください。
UEFI/GPT モードでインストールされた Windows
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の EFI システムパーティションを見つけて、そのパーティションから Windows のブートローダーを実行することです。
if [ "${grub_platform}" == "efi" ]; then
menuentry "Microsoft Windows Vista/7/8/8.1 UEFI/GPT" {
insmod part_gpt
insmod fat
insmod chain
search --no-floppy --fs-uuid --set=root $hints_string $fs_uuid
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
fi
$hints_string と $fs_uuid は以下の2つのコマンドで得られます。
$fs_uuid コマンドは EFI システムパーティションの UUID を割り出します。
# grub-probe --target=fs_uuid esp/EFI/Microsoft/Boot/bootmgfw.efi
1ce5-7f28
代わりに、lsblk --fs を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。
$hints_string コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります:
# grub-probe --target=hints_string esp/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
以上の2つのコマンドでは Windows が使用する ESP が esp にマウントされていると仮定しています。Windows である以上、Windows の EFI ファイルへのパスが異なる場合があるかもしれません。
BIOS/MBR モードでインストールされた Windows
bootmgr ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを チェインロードする必要はもはやありません。/bootmgr が存在する場所はシステムパーティションであり、"本当"の Windows パーティション(通常、C:)ではありません。システムパーティションのファイルシステムラベルは System Reserved か SYSTEM であり、サイズは約100~549 MiB 程度です。さらなる情報については Wikipedia:System partition and boot partition をご覧ください。このセクションを通して Windows のパーティションは /dev/sda1 にあると仮定します。パーティションが異なる場合は hd0,msdos1 という記述をすべて変更してください。
両方の例で XXXXXXXXXXXXXXXX はファイルシステムの UUID を表しています。UUID は lsblk --fs コマンドを使って得られます。実際の UUID に置き換えてください。
Windows Vista/7/8/8.1/10 では:
if [ "${grub_platform}" == "pc" ]; then
menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
insmod part_msdos
insmod ntfs
insmod ntldr
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXXXXXXXXXXXXXX
ntldr /bootmgr
}
fi
Windows XP では:
if [ "${grub_platform}" == "pc" ]; then
menuentry "Microsoft Windows XP" {
insmod part_msdos
insmod ntfs
insmod ntldr
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXXXXXXXXXXXXXX
ntldr /ntldr
}
fi
\boot\bcd (エラーコード 0xc000000f)のエラーにより Windows が起動できなくなります。これを直すには Windows 回復コンソール(インストールディスク上にある cmd.exe)を開いて、以下を実行してください:
X:\> bootrec.exe /fixboot X:\> bootrec.exe /RebuildBcd
bootrec.exe /Fixmbr を実行しないでください。GRUB が吹き飛びます。あるいはトラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。
ラベルを使う
search コマンドに対して --label オプションを使えば、ファイルシステムに付けられた人間が読みやすい文字列であるラベルを使うことができます。まずはじめに、ファイルシステムにラベルがあることを確認してください。
そして、ラベルを使ってエントリを追加してください。例えば:
menuentry "Arch Linux, session texte" {
search --label --set=root archroot
linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro
initrd /boot/initramfs-linux.img
}
コマンドシェルを使う
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは /boot/grub 内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合) GRUB は起動に失敗します。このとき、コマンドシェルが表示されます。
GRUB は複数のシェル・プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、"normal" シェルが出ます:
sh:grub>
深刻な問題があるときは (例: GRUB が必要なファイルを見つけられない)、代わりに "rescue" シェルが出ます:
grub rescue>
rescue シェルは通常のシェルの制限されたサブセットで、使える機能が少なくなっています。rescue シェルが出てきた時は、まず "normal" モジュールの挿入を試して、"normal" シェルを起動してみて下さい:
grub rescue> set prefix=(hdX,Y)/boot/grub grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod rescue:grub> normal
ページャのサポート
GRUB はページャをサポートしており長い出力をするコマンド (help コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい:
sh:grub> set pager=1
コマンドシェル環境を使ってオペレーティングシステムを起動する
grub>
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。 通常はチェインロードを使ってドライブやパーティションから Windows / Linux を起動するということが考えられます。
チェインロードは現在のブートローダから別のブートローダをロードすることを意味します。
他のブートローダはディスクの最初 (MBR) やパーティションの最初に埋め込むことができます。
パーティションのチェインロード
set root=(hdX,Y) chainloader +1 boot
X=0,1,2... Y=1,2,3...
例えば最初のハードディスクの最初のパーティションに保存された Windows をチェインロードするには:
set root=(hd0,1) chainloader +1 boot
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。
ディスクやドライブのチェインロード
set root=hdX chainloader +1 boot
UEFI モードでインストールされた Windows/Linux のチェインロード
insmod ntfs
set root=(hd0,gpt4)
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
boot
insmod ntfs を使うことで ntfs ファイルシステムモジュールをロードして Windows をロードすることができます。上記の例では (hd0,gpt4) または /dev/sda4 が EFI System Partition (ESP) です。chainloader 行のエントリはチェインロードする .efi ファイルのパスを指定しています。
通常のロード
#rescue コンソールを使う の例を見て下さい。
rescue コンソールを使う
まず #コマンドシェルを使う を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。
GRUB rescue で利用できるコマンドには insmod, ls, set, unset があります。この例では set と insmod を使います。set は変数を修正し insmod は新しいモジュールを挿入して機能を追加します。
始める前に、ユーザーは自分の /boot パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):
grub rescue> set prefix=(hdX,Y)/boot/grub
X は物理ドライブ番号、Y はパーティション番号に置き換えてください。
/boot を省いて下さい (つまり、set prefix=(hdX,Y)/grub と入力する)。コンソールの機能を拡張するために、linux モジュールを挿入します:
grub rescue> insmod i386-pc/linux.mod
もしくは:
grub rescue> insmod linux
これで linux と initrd コマンドが使えます、これらのコマンドは慣れているはずです。
例えば、Arch Linux を起動:
set root=(hd0,5) linux /boot/vmlinuz-linux root=/dev/sda5 initrd /boot/initramfs-linux.img boot
boot パーティションを分割しているなら、行を変更する必要があります:
set root=(hd0,5) linux (hdX,Y)/vmlinuz-linux root=/dev/sda6 initrd (hdX,Y)/initramfs-linux.img boot
linux コマンドの実行中に error: premature end of file /YOUR_KERNEL_NAME と表示される場合は、代わりに linux16 を使ってみて下さい。Arch Linux 環境のブートに成功したら、必要に応じて grub.cfg を修正し GRUB を再インストールすることができます。
GRUB を再インストールして問題を完全に修正するには、必要応じて /dev/sda を変更します。詳しくは #インストール を見て下さい。
GRUB を消去
一般に、grub を消去するにはインストール手順を逆の順番で行う必要があります。おそらく最後には残ったものをすべて綺麗にします。しかし、作業を始める前に、grub を削除した後に PC が起動するかどうかや、どう起動させるかを考えておかなければなりません。grub を削除したい理由はおそらく他のブートローダーを使いたくなったからでしょう。安全ですが少し難しい方法は grub を削除する前に他のブートローダーが動作することを確認することです。
他のブートローダーをインストールする前に grub を削除するときでも、他の如何なる場合でも、UEFI の場合は以下を実行してください:
$ efibootmgr
そして、他のブートローダーが BootOrder の行にあることを確認してください。もし grub が削除されていない場合、他のブートローダーが grub の前にあるはずです。もし grub がすでに削除されている場合、grub はその行に存在しないはずです。しかし、これは PC が他のブートローダーを起動するための必要条件であり、十分条件ではないことに注意してください。また、grub を完全に削除するための十分条件でもありません。
UEFI マシンと非 UEFI マシンの両方において、grub-install は grub のインストール作業の一部として手動で実行されます。UEFI の場合、grub-install は仕事の1つとして efibootmgr --create の実行と等価なことを行います。grub を削除するには grub-install の成果物を削除する必要があります。efibootmgr --create と反対のことをするコマンドは efibootmgr --delete-bootnum やこれと等価なプログラムです。efibootmgr --delete-bootnum コマンドを実行すべきブートエントリの番号を得る一つの方法は(引数なしの) efibootmgr の出力です。
grub-install は /boot/grub ディレクトリを作成し、これは手動で削除する必要があります。しかし、grub を再びインストールするためにこのディレクトリを残しておきたいユーザーもいるでしょう。
GPT/UEFI に移行した後に MBR boot code を削除したい場合は dd を使ってください:
# dd if=/dev/zero of=/dev/sdX bs=440 count=1
トラブルシューティング
サポートのないファイルシステム
GRUB が root のファイルシステムをサポートしていない場合、代替の /boot パーティションをサポートのあるファイルシステムで作成する必要があります。開発バージョンの GRUB である grub-gitAUR が該当するファイルシステムをネイティブサポートしている場合があります。
GRUB をサポートされないファイルシステムで使用した場合、ドライブの UUID を抽出できないため、GRUB は古典的で非永続的な /dev/sdXx 名を使います。この場合、/boot/grub/grub.cfg を手動で編集し、root=/dev/sdXx を root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX のように置き換える必要があるかもしれません。blkid コマンドを使えばデバイスの UUID を得られます。永続的なブロックデバイスの命名 を見てください。
GRUB はバージョン 2.0.4 より F2FS をサポートしていますが、extra_attr フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。
デバッグメッセージを有効にする
以下を grub.cfg に追加してください:
set pager=1 set debug=all
msdos-style エラーメッセージ
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは ここ を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。#Master Boot Record (MBR) 特有の手順 を読んで下さい。
UEFI
よくあるインストール時のエラー
- grub-install の実行時に sysfs や procfs に関する問題が表示される場合、
modprobe efivarsを実行してください。Unified Extensible Firmware Interface#UEFI 変数 を参照。 --targetと--directoryオプションのどちらかがないと、grub-installはどこにファームウェアをインストールすればいいのか決められません。そのような場合grub-installはsource_dir does not exist. Please specify --target or --directoryというメッセージを表示します。- grub-install を実行した後、パーティションが EFI パーティションではないというような表示がされる場合、おそらくパーティションが
Fat32ではありません。
ファームウェアブートマネージャーに GRUB エントリを作成する
grub-install は自動的にブートマネージャーにメニューエントリを追加しようと試みます。もし GRUB がそれを行わない場合、UEFI#efibootmgr を見て、efibootmgr を使ってメニューエントリを作成する指示を読んでください。しかし、UEFI#ISO から UEFI ブータブル USB を作成する にあるように、よくある原因は CD/USB を UEFI モードで起動していないというものです。
GRUB エントリをファームウェアブートマネージャに作成する例として、efibootmgr -c を考えてみましょう。これは、/dev/sda1 が EFI システムパーティションであり、/boot/efi にマウントされていると仮定します。これは efibootmgr のデフォルトの挙動です。このツールは、("Linux" という名前の) 新しいブートオプションを作成し、それをブート順序リストの1番目に配置します。オプションを渡すことでデフォルトの挙動を変更できます。デフォルトの OS ローダーは \EFI\arch\grub.efi です。
レスキューシェルが起動する
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく grub.cfg が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を --boot-directory でインストールして grub.cfg がなかったり、ブートパーティションのパーティション番号 (grubx64.efi ファイルにハードコードされています) が変更されているときにこの問題が発生します。
GRUB UEFI がロードされない
EFI の動作の例:
# efibootmgr -v
BootCurrent: 0000 Timeout: 3 seconds BootOrder: 0000,0001,0002 Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi) Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi) Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
画面が数秒間真っ暗になってその後次のブートオプションが試行される場合、この投稿によると、GRUB を root パーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)
デフォルト/フォールバックのブートパス
一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、grub-install が、GRUB を起動するエントリが efibootmgr によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです(--removable を追加してください):
# grub-install --target=x86_64-efi --efi-directory=esp --removable
あるいは、すでにインストールされた GRUB の EFI 実行ファイルをデフォルト/フォールバックのパスに移動することができます:
# mv esp/EFI/grub esp/EFI/BOOT # mv esp/EFI/BOOT/grubx64.efi esp/EFI/BOOT/BOOTX64.EFI
Invalid signature
(パーティションを再設定したりハードドライブを追加した後) Windows を起動しようとしたときに "invalid signature" エラーが起こる場合、GRUB のデバイス設定を移動(削除)して再設定してください:
# mv /boot/grub/device.map /boot/grub/device.map-old # grub-mkconfig -o /boot/grub/grub.cfg
これで grub-mkconfig は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、/boot/grub/device.map-old は削除してください。
起動中にフリーズする
GRUB がカーネルと initial ramdisk をロードした後、エラーを出さずにブートが固まる場合、add_efi_memmap カーネルパラメータを取り除いてみてください。
他の OS から Arch が見つからない
他のディストリビューションで os-prober を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、/etc/lsb-release をおくことで検知が改善されると報告されています。このファイルと更新ツールは公式リポジトリにある lsb-release パッケージから利用可能です。
chroot でインストールした時に警告が表示される
chroot 環境で (例えばシステムのインストール中に) LVM システムに GRUB をインストールする場合、/run/lvm/lvmetad.socket: connect failed: No such file or directory または WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning などの警告が表示されることがあります。これは /run が chroot 中は利用できないのが原因です。これらの警告によってシステムが起動できなくなるということはないので、安心してインストールを続行してください。
GRUB のロードが遅い
ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 /boot や / に十分な空き容量があるか確認してください。
error: unknown filesystem
GRUB が error: unknown filesystem と出力して起動しない理由はいくつか考えられます。UUID が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、BIOS Boot Partition がドライブの最初の 2TB の中にない可能性があります [1]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。
また、このエラーは ext4 ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません:
large_dir- サポートされません。metadata_csum_seed- GRUB 2.11 でサポートされます(commit).
/boot ファイルシステム上でファイルシステムの新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。grub-reboot で再設定されない
GRUB は Btrfs のルートパーティションに書き込むを行うことができません [2]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。grub-editenv create を実行して /etc/default/grub に GRUB_DEFAULT=0 を設定することでエントリをリセットできます (設定後は grub-mkconfig -o /boot/grub/grub.cfg を行ってください)。
Btrfs のせいでインストールができない
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: /dev/sdx)、後からパーティションテーブルを書き込むと、Btrfs のフォーマットが一部残留します。ほとんどのユーティリティや OS は残留した Btrfs を認識できないため、GRUB は (たとえ --force が付けられていても) インストールを拒否します:
# grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet.. # grub-install: error: filesystem `btrfs' doesn't support blocklists.
ドライブを完全に消去してもいいですが、wipefs -o 0x10040 /dev/sdx を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。
Windows 8/10 が認識されない
Windows 8/10 の "高速スタートアップ", "ハイブリッドブート", "Hiberboot" と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができません。そのため grub-mkconfig が Windows を認識することができなくなります。Windows で設定を無効化することで GRUB のメニューに追加することができるようになるはずです。
もし高速スタートアップを無効に変更したくない場合には、WindowsをシャットダウンするときにShiftキーを押しながらシャットダウンをクリックするとその時だけ高速スタートアップの準備をしない完全なシャットダウンが実行されます。
VirtualBox EFI モード
バージョン6.1以前の VirtualBox では デフォルト/フォールバックのブートパス に GRUB をインストールしてください。
Device /dev/xxx not initialized in udev database even after waiting 10000000 microseconds
grub-mkconfig が止まって以下のようなエラーを吐く場合:
WARNING: Device /dev/xxx not initialized in udev database even after waiting 10000000 microseconds
chroot 環境が /run/lvm/ にアクセスできるようにする必要があります:
# mkdir /mnt/hostlvm # mount --bind /run/lvm /mnt/hostlvm # arch-chroot /mnt # ln -s /hostlvm /run/lvm
grub-rescue プロンプトと暗号化済み /boot
暗号化済みの /boot を使用している場合に間違ったパスワードを入力してしまうと grub-rescue プロンプトに入ります。
この grub-rescue プロンプトでは出来ることが限られています。以下のコマンドを使ってブートを完了させます:
grub rescue> cryptomount <partition> grub rescue> insmod normal grub rescue> normal
より良い説明は このブログ投稿をご覧ください。
GRUB をインストールしたが起動時にメニューが表示されない
/etc/default/grub を見て GRUB_TIMEOUT が 0 に設定されていないかチェックしてください。0 に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。GRUB_TIMEOUT_STYLE が hidden に設定されていないかもチェックしてください。hidden に設定されていた場合、menu に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、メインの設定ファイルを再生成して、再起動してメニューが表示されるか確かめてください。