「GRUB」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(同期)
 
(8人の利用者による、間の115版が非表示)
1行目: 1行目:
 
[[Category:ブートローダー]]
 
[[Category:ブートローダー]]
[[ar:GRUB]]
+
[[Category:GNU]]
[[cs:GRUB2]]
 
 
[[de:GRUB]]
 
[[de:GRUB]]
[[el:GRUB]]
 
 
[[en:GRUB]]
 
[[en:GRUB]]
 
[[es:GRUB]]
 
[[es:GRUB]]
[[fr:GRUB2]]
+
[[pl:GRUB]]
[[id:GRUB2]]
+
[[pt:GRUB]]
[[it:GRUB2]]
+
[[ru:GRUB]]
[[ru:GRUB2]]
+
[[zh-hans:GRUB]]
  +
{{Related articles start}}
[[tr:GRUB2]]
 
[[zh-CN:GRUB2]]
 
[[zh-TW:GRUB2]]
 
{{Related articles start (日本語)}}
 
{{Related|GRUB Legacy}}
 
 
{{Related|Arch ブートプロセス}}
 
{{Related|Arch ブートプロセス}}
{{Related|ブートローダー}}
 
 
{{Related|Master Boot Record}}
 
{{Related|Master Boot Record}}
 
{{Related|GUID Partition Table}}
 
{{Related|GUID Partition Table}}
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related|Unified Extensible Firmware Interface}}
  +
{{Related|GRUB Legacy}}
{{Related3|GRUB EFI Examples|GRUB EFI サンプル}}
 
  +
{{Related|GRUB/EFI サンプル}}
  +
{{Related|GRUB/ヒントとテクニック}}
  +
{{Related|マルチブート USB ドライブ}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[https://www.gnu.org/software/grub/ GRUB] (GRand Unified Bootloader) は[[ブートローダー]]です。現在の GRUB は '''GRUB 2''' とも呼ばれています。元の GRUB ([[GRUB Legacy]]) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。
   
  +
{{Note|この記事全体で、{{ic|''esp''}} は [[EFI システムパーティション]] (別名 ESP) のマウントポイントを表します。}}
[https://www.gnu.org/software/grub/ GRUB] は次世代の GRand Unified Bootloader です。GRUB Legacy の後継の研究開発プロジェクト [http://www.nongnu.org/pupa/ PUPA] から GRUB は作られています。全てを整理するため GRUB はスクラッチから書きなおされモジュール性とポータビリティを獲得しました [https://www.gnu.org/software/grub/grub-faq.html#q1]。
 
   
  +
== サポートされているファイルシステム ==
手短に言えば、''ブートローダー''はコンピューターが起動した時に最初に走るソフトウェアプログラムです。Linux カーネルのロードとコントロールの移譲を担当しています。そして、カーネルはオペレーションシステムの他全てを初期化します。
 
   
  +
GRUB には[https://www.gnu.org/software/grub/manual/grub/html_node/Features.html#Features 複数のファイルシステム] (特に重要なものとしては [[FAT32]]、[[ext4]]、[[Btrfs]]、[[XFS]]) に対する独自のサポートがあります。注意事項に関しては [[#サポートのないファイルシステム]] 章を見てください。
== 前置き ==
 
   
  +
{{Warning|ファイルシステムには、GRUB がまだ対応していない新しい機能が導入されることがあります。その場合、GRUB と互換性の無い機能を無効化しない限り、そのファイルシステムを {{ic|/boot}} に対して使用するべきではありません。この問題は、[[パーティショニング#/boot|/boot パーティション]]を別に分けて、[[FAT32]] などの広くサポートされているファイルシステムを使用することで、回避することができます。}}
* ''GRUB'' という名前は公式でソフトウェアのバージョン''2''を示しています、[https://www.gnu.org/software/grub/] を見て下さい。古いバージョンについての記事は [[GRUB Legacy]] を見て下さい。
 
* GRUB は root で ({{ic|/boot}} ファイルシステムを分割しないで) [[Btrfs (日本語)|Btrfs]] を使った zlib や LZO による圧縮をサポートしています。
 
* GRUB は root で [[F2fs (日本語)|F2fs]] を使うことをサポートしていないため、サポートされているファイルシステムで {{ic|/boot}} を分割する必要があります。
 
   
  +
== UEFI システム ==
=== GRUB Legacy ユーザーへのメモ ===
 
   
  +
{{Note|
* [[GRUB Legacy]] から GRUB へのアップグレードは[[#インストール|下]]で書かれている GRUB のフレッシュインストールとほとんど同じです。
 
  +
* 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。
* GRUB Legacy と GRUB ではコマンドが異なります。先に進む前に [https://www.gnu.org/software/grub/manual/grub.html#Commands GRUB commands] を確認してください (例: "find" は "search" に置き換わっています)。
 
  +
* UEFI を使うようにインストールする場合、Arch のインストールメディアを UEFI モードで起動することが重要です。さもないと、''efibootmgr'' が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。
* 今の GRUB は''モジュール式''であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや [[LVM (日本語)|LVM]])。
 
  +
* UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。
* デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、{{ic|/dev/sda1}} は {{ic|(hd0,msdos1)}} (MBR) や {{ic|(hd0,gpt1)}} (GPT) と表記されます。
 
  +
* この記事全体で、{{ic|insmod}} を使って追加の GRUB2 モジュールを挿入可能であると仮定しています。[[#Shim-lock]] で議論されているように、これはセキュアブートが有効化されている UEFI システムには当てはまりません。セキュアブートシステム上で標準の GRUB EFI ファイル {{ic|grubx64.efi}} に含まれていない追加の GRUB モジュールを使用したい場合は、{{ic|grub-mkstandalone}} を使って追加の GRUB モジュールを含めた GRUB EFI {{ic|grubx64.efi}} を再生成しなければなりません。
* GRUB は GRUB legacy よりもかなり大きくなっています ({{ic|/boot}} に ~13 MB は占領します)。分割された {{ic|/boot}} パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。
 
  +
}}
   
==== 重要なデタのバックアップ ====
+
=== インスト ===
 
GRUB のインストールはスムーズに行われるべきですが、GRUB v2 にアップグレードする前に GRUB Legacy のファイルを保持しておくことを強く推奨します。
 
 
# mv /boot/grub /boot/grub-legacy
 
 
ブートコードやパーティションテーブルを含んでいる MBR をバックアップするには ({{ic|/dev/sd''X''}} は実際のディスクパスに置き換えてください):
 
 
# dd if=/dev/sd''X'' of=/path/to/backup/mbr_backup bs=512 count=1
 
 
MBR の446バイトにはブートコードが含まれていて、次の64バイトにはパーティションテーブルが含まれています。リストアする際にパーティションテーブルを上書きしたくない場合は、MBR ブートコードだけをバックアップすることを推奨します:
 
 
# dd if=/dev/sd''X'' of=/path/to/backup/bootcode_backup bs=446 count=1
 
 
GRUB2 を正しくインストールできないときは、[[#GRUB Legacy のリストア]] を見て下さい。
 
 
=== 事前の注意事項 ===
 
 
==== BIOS システム ====
 
 
===== GUID Partition Table (GPT) 特有の手順 =====
 
 
GPT でパーティションされたシステムには {{ic|core.img}} を埋め込むための MBR の隙間の領域がないので (GPT のプライマリヘッダーやプライマリパーティションテーブルに使われます)、[[GUID Partition Table (日本語)|BIOS-GPT]] の GRUB 設定では [http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html BIOS boot partition] が必要になります。このパーティションは BIOS-GPT 環境の GRUB でだけ使われます。MBR パーティションではそのようなパーティションのタイプは存在しません (少なくとも GRUB にはありません)。システムが UEFI を使っている時も (ブートセクタの埋め込みがないので)、このパーティションは必要ありません。
 
 
BIOS-GPT 設定では gdisk, cgdisk, GNU Parted などを使って、ディスクの最初にファイルシステムのない 1007 KiB のパーティションを作成してください。1007 KiB という容量 (と先の GPT の 17 KiB) によって次に続くパーティションを 1024 KiB に正しくアライメントすることができます。必要であれば、ディスクの他の場所にこのパーティションを配置することもできますが、先頭の 2TiB の領域内である必要があります。パーティションタイプは (c)gdisk では {{ic|ef02}} に GNU Parted では {{ic|set ''BOOT_PART_NUM'' bios_grub on}} に設定してください。
 
 
GPT パーティションはサポートしてないツールによって変更されるのを止めるための保護 MBR パーティションを作成します。この保護 MBR に cfdisk を使ってブータブルフラグを設定しないと、BIOS/EFI によっては起動しなくなる可能性があります。
 
   
 
{{Note|
 
{{Note|
  +
* UEFI の実装はマザーボード製造者ごとに異なっています。以下で説明されている手順は広い範囲の UEFI システムで動作するように意図されています。しかし、この方法を適用しているにも関わらず問題が発生する場合は、あなたのハードウェア固有のケースにおける詳細な情報を (可能であれば解決策も) 共有することが推奨されます。そのようなケースのために [[GRUB/EFI サンプル]] の記事が提供されています。
* {{ic|<nowiki>--target=i386-pc</nowiki>}} を使って {{ic|grub-install}} の対象を {{ic|i386-pc}} に明示的に指定する必要があります。そうしないとあなたの設定が EFI-GPT ではないかと {{ic|grub-install}} が勘違いする可能性があるからです。
 
  +
* このセクションでは、あなたが x64 (64 ビット) UEFI のシステムに対して GRUB をインストールしようとしていると仮定します。IA32 (32 ビット) UEFI の場合は (32 ビット CPU と混同しないでください)、適切な場所で {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えてください。[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数を調べる]] の手順を見て、UEFI のビット数を調べてください。
* このパーティションは {{ic|grub-install}} や {{ic|grub-setup}} を実行する前に作成しておく必要があります
 
* 他の全てのパーティションの後にこのパーティションを作成する場合、gdisk では容量の消費が一番少ない場所 (セクター 34-2047) にしか作成できません。なぜなら gdisk はパーティションを出来る限り 2048 セクター境界に自動アライメントするからです
 
 
}}
 
}}
   
  +
まず、{{Pkg|grub}} と {{Pkg|efibootmgr}} を[[インストール]]してください。''GRUB'' はブートローダである一方、''efibootmgr'' はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。
===== Master Boot Record (MBR) 特有の手順 =====
 
   
  +
そして、以下の手順に従って GRUB をディスクにインストールしてください:
通常 MBR でパーティションされた環境において [[Master Boot Record (日本語)|MBR]] の後の隙間 (512バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダー・アライメントは問題になりません。しかしながら GRUB の {{ic|core.img}} 用に十分な領域を確保するため 1 から 2 MiB ほど MBR の後の領域をとることを推奨します ({{bug|24103}})。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために ({{ic|core.img}} の埋め込みとは関係ありません) 1 MiB パーティション・アライメントをサポートしているパーティションツールを使うのが得策です。
 
   
  +
# [[EFI システムパーティション#パーティションのマウント|EFI システムパーティションをマウント]]してください。そして、このセクションの後の部分で出てくる {{ic|''esp''}} という記述をそのマウントポイントに置き換えてください。
==== UEFI システム ====
 
  +
# ブートローダの識別子を選んでください、ここでは仮に {{ic|GRUB}} としましょう。{{ic|''esp''/EFI/}} にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。
  +
# 以下のコマンドを実行して、GRUB EFI アプリケーション {{ic|grubx64.efi}} を {{ic|''esp''/EFI/GRUB/}} に、モジュールを {{ic|/boot/grub/x86_64-efi/}} にインストールしてください。
  +
::{{Note|
  +
::* GRUB をブートローダとしてインストールするシステム内でパッケージをインストールし、{{ic|grub-install}} を実行してください。つまり、ライブインストール環境から起動している場合、{{ic|grub-install}} は (インストール先の) chroot 環境の中で実行する必要があるということです。何らかの理由で、インストールされたシステムの外で {{ic|grub-install}} を実行する必要がある場合、マウントした {{ic|/boot}} ディレクトリへのパスを {{ic|1=--boot-directory=}} オプションに渡してください。例: {{ic|1=--boot-directory=/mnt/boot}}
  +
::* 一部のマザーボードは、空白を含む {{ic|bootloader-id}} を扱うことができません。}}
  +
::{{bc|1=# grub-install --target=x86_64-efi --efi-directory=''esp'' --bootloader-id=GRUB}}
   
  +
上記のインストール作業が完了した後、メインの GRUB ディレクトリが {{ic|/boot/grub/}} に作成されています。別の場所を指定する方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を見てください。{{ic|grub-install}} は[[#ファームウェアブートマネージャーに GRUB エントリを作成する|ファームウェアのブートマネージャにもエントリを作成]]しようとすることに注意してください。その名前は上記の例では {{ic|GRUB}} となります。しかし、ブートエントリが埋まっていると、これは失敗します。この場合は [[efibootmgr]] を使って必要ないエントリを削除してください。
{{Note|[[Unified Extensible Firmware Interface (日本語)|UEFI]], [[GUID Partition Table (日本語)|GPT]], [[UEFI Bootloaders (日本語)|UEFI Bootloaders]] のページをよく読んでおいてください。}}
 
   
  +
設定を確定したあとに[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]することを忘れないでください。
===== GPT と ESP があるかどうか確認する =====
 
   
  +
{{Tip|{{ic|--removable}} オプションを使うと、GRUB は {{ic|''esp''/EFI/BOOT/BOOTX64.EFI}} にインストールされます ({{ic|i386-efi}} ターゲットの場合は {{ic|''esp''/EFI/BOOT/BOOTIA32.EFI}})。その結果、EFI 変数がリセットされた場合やドライブを他のコンピュータに移した場合でもそのドライブから起動することができるようになります。通常は BIOS を使用する方法と同じようにドライブを選択することで使うことができます。Windows とデュアルブートする場合、Windows は通常そこに EFI 実行ファイルを配置するので注意してください。とはいえ、そのファイルは Windows の UEFI ブートエントリを再生成するためだけに使用されます。[[Mac]] 上に GRUB をインストールする場合、このオプションを使用する必要があります。一部のデスクトップマザーボード (特に MSI のマザーボード) はここに保存されている EFI 実行ファイルしか見ないので、このオプションが必須になります。
EFI を使って起動するにはディスク上に EFI System Partition (ESP) が必要になります。GPT は必ずしも必要ではありませんが、強く推奨されており、この記事では GPT を使う方法しか記述していません。Windows 8 など、既にオペレーティングシステムが動作している EFI が使えるコンピュータに Archlinux をインストールする場合、既に ESP は存在するはずです。GPT と ESP を確認するには、root で {{ic|parted}} を使って起動に使いたいディスクのパーティションテーブル (例: {{ic|/dev/sda}}) を表示して下さい。
 
  +
UEFI アップデートを実行すると、既存の UEFI ブートエントリが削除されるかもしれません。なので、"removable" なブートエントリを有効化しておくと、それをフォールバックとして利用できます。}}
 
# parted /dev/sda print
 
 
GPT なら、"Partition Table: GPT" と表示されます。EFI なら、vfat ファイルシステムで 'boot' フラグが有効になっている小さな (512 MiB 以下) パーティションがあります。そのパーティション上には、"EFI" という名前のフォルダがあるはずです。これらの存在が確認できたのなら、それは ESP になります。そのパーティション番号を覚えておいて下さい。後で GRUB を ESP にインストールするときに使います。
 
 
===== ESP を作成する =====
 
 
ESP が存在しない場合、作成する必要があります。[[Unified Extensible Firmware Interface (日本語)#EFI System Partition|Unified Extensible Firmware Interface#EFI System Partition]] の指示に従って ESP を作成してください。
 
 
== インストール ==
 
 
=== BIOS システム ===
 
 
{{Note|Arch ライブ CD から[[Installation Guide (日本語)|初期設定]]を行っているときは、grub をインストールする前にインストールしたシステムに chroot してください。CD 自体の grub のインストールスクリプトを使うと {{ic|grub.cfg}} がおかしくなったりして、システムが起動しなくなる問題が発生する可能性があります。}}
 
 
[[Official Repositories (日本語)|公式リポジトリ]] にある {{Pkg|grub}} パッケージから GRUB を[[pacman (日本語)|インストール]]できます。{{AUR|grub-legacy}} がインストールされている場合は置き換えられます。
 
 
{{Note|パッケージをインストールするだけでは {{ic|/boot/grub/i386-pc/core.img}} ファイルや {{ic|/boot/grub/i386-pc}} 内の GRUB モジュールは更新されません。下で説明されているように {{ic|grub-install}} を使って手動でアップデートする必要があります。}}
 
 
==== ブートファイルをインストール ====
 
 
BIOS ブートで GRUB ブートファイルをインストールする方法は3つあります:
 
* [[#ディスクにインストールする]] (推奨)
 
* [[#パーティションやパーティションレスディスクにインストールする]] (非推奨)
 
* [[#core.img だけを生成する]] (一番安全な方法ですが、{{ic|/boot/grub/i386-pc/core.img}} を chainload するために [[GRUB Legacy]] や [[Syslinux (日本語)|Syslinux]] など他の BIOS ブートローダーが必要になります)
 
 
{{Note|https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html に詳しいドキュメントがあります。}}
 
 
===== ディスクにインストールする =====
 
 
{{Note|この方法は GRUB を (MBR か GPT で) パーティション済みのディスクにインストールして、GRUB ファイルを {{ic|/boot/grub}} に第1ステージコードを440バイトの MBR ブートコード領域にインストールする方法です (MBR パーティションテーブルとは違います)。パーティションレスディスク (super-floppy) については [[#パーティションやパーティションレスディスクにインストールする]] を参照してください。}}
 
 
440バイトの Master Boot Record ブートコード領域に GRUB をセットアップするには、{{ic|/boot/grub}} ディレクトリを作り、{{ic|/boot/grub/i386-pc/core.img}} ファイルを生成して、それを 31 KiB の (最低限の容量 - パーティションのアライメントによって変化します) MBR の後の領域 (もしくは GPT でパーティションされたディスクの場合 BIOS Boot Partition、parted では {{ic|bios_grub}} フラグ、gdisk では EF02 タイプコードで示される) に埋め込み、設定ファイルを生成します。次を実行してください:
 
 
# grub-install --target=i386-pc --recheck --debug /dev/sd''x''
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
   
 
{{Note|
 
{{Note|
  +
* {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は、非推奨となった {{ic|--root-directory}} を置き換えます。
* {{ic|/dev/sdx}} はインストール先に置き換えて下さい。
 
  +
* {{ic|grub-install}} コマンドに ''device_path'' オプション (例えば {{ic|/dev/sda}}) が無いことに気付いたかもしれません。実際、''device_path'' は GRUB EFI インストールスクリプトによって無視されます。UEFI ブートローダーは MBR ブートコードもパーティションブートセクタも全く使用しないのです。
* {{ic|1=--target=i386-pc}} は {{ic|grub-install}} に BIOS システムだけにインストールすることを示します。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。
 
 
}}
 
}}
   
  +
問題が発生した場合は [[#UEFI|UEFI のトラブルシューティング]] を見て下さい。加えて [[GRUB/ヒントとテクニック#UEFI の詳細情報]] も参照してください。
{{ic|/boot}} に [[LVM (日本語)|LVM]] を使っている場合は、複数の物理ディスクに GRUB をインストールすることができます。
 
   
  +
=== セキュアブートサポート ===
===== パーティションやパーティションレスディスクにインストールする =====
 
   
  +
GRUB は、CA 鍵か shim のいずれかを使用するセキュアブートを完全にサポートしています。しかし、インストールのコマンドは、どちらを使用するかによって異なります。
{{Note|GRUB は GRUB Legacy や Syslinux と同じようにパーティションのブートセクタやパーティションレスディスクへのインストールを推奨していません。この種のセットアップは破損しやすく (特にアップデート中)、Arch の開発陣によるサポートはされていません。}}
 
   
  +
{{Warning|
パーティションブートセクタや、パーティションレスディスク (別名 superfloppy) やフロッピーディスクに grub をセットアップするには、以下を実行してください ({{ic|/boot}} パーティションを {{ic|/dev/sdaX}} として例にしています):
 
  +
* [[セキュアブート]]を不適切に設定すると、システムが起動不能になる可能性があります。セキュアブートを有効化した後に何らかの理由により起動できなくなった場合、ファームウェアでセキュアブートを無効化し、システムを再起動する必要があります。
 
  +
* ブートローダで不必要なモジュールをロードすると、セキュリティリスクを発生させる可能性があります。これらのコマンドは、必要なときにだけ使用してください。
# chattr -i /boot/grub/i386-pc/core.img
 
# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX
 
# chattr +i /boot/grub/i386-pc/core.img
 
 
{{Note|
 
* {{ic|/dev/sda}} はインストール先に置き換えて下さい。
 
* {{ic|1=--target=i386-pc}} は {{ic|grub-install}} に BIOS システムだけにインストールすることを示します。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。
 
 
}}
 
}}
   
  +
==== CA 鍵 ====
{{ic|--force}} オプションを使ってブロックリストを利用する必要があります {{ic|1=--grub-setup=/bin/true}} は使えません ({{ic|core.img}} を生成するだけと同じです)。
 
   
  +
CA 鍵を使うには、インストールのコマンドは次のようになります:
{{ic|grub-install}} は以下のような警告を表示し、この方法で失敗するようなことについてヒントを与えます:
 
   
  +
# grub-install --target=x86_64-efi --efi-directory=''esp'' --bootloader-id=GRUB --modules="tpm" --disable-shim-lock
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.
 
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
 
However, blocklists are UNRELIABLE and their use is discouraged.
 
   
  +
==== Shim-lock ====
{{ic|--force}} がないと下のエラーが表示され {{ic|grub-setup}} はパーティションブートセクタにブートコードを設定しません:
 
 
/sbin/grub-setup: error: will not proceed with blocklists
 
   
  +
{{Note|このセクションに進む前に、[[セキュアブート#shim]] に書かれてある指示の通りにし、{{pkg|sbsigntools}} をセットアップして鍵を受け取る準備を整えておく必要があります。}}
{{ic|--force}} をつければ次のように表示されるはずです:
 
   
  +
Shim-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、[[vmlinuz]] と [[initramfs]] のイメージが含まれているファイルシステムを読むために必要なモジュール全てが GRUB のバイナリに含まれていなければなりません。
Installation finished. No error reported.
 
   
  +
GRUB バージョン {{ic|2.06.r261.g2f4430cc0}} から、セキュアブートモードで {{ic|insmod}} を使ってモジュールをロードすることは許可されなくなりました (任意のコードをサイドロードできてしまう可能性があるからです)。GRUB モジュールが EFI バイナリ内に組み込まれていない場合、GRUB はそれらのモジュールをサイドロード/{{ic|insmod}} しようと試み、その結果、以下のようなメッセージにより GRUB の起動が失敗します:
デフォルトで {{ic|grub-setup}} がパーティションやパーティションレスディスクへのインストールをしないようになっている理由は、この場合に限って GRUB がパーティションのブートセクタにある埋め込みブロックリストを使って {{ic|/boot/grub/i386-pc/core.img}} ファイルと prefix ディレクトリ {{ic|/boot/grub}} を見つける必要があるからです。{{ic|core.img}} のセクタ位置はパーティション上の (ファイルのコピーや削除など) ファイルシステムに変更が加えられた時に変化してしまうことがあります。詳細は https://bugzilla.redhat.com/show_bug.cgi?id=728742 や https://bugzilla.redhat.com/show_bug.cgi?id=730915 を見て下さい。
 
   
  +
error: prohibited by secure boot policy
これを回避する方法は {{ic|/boot/grub/i386-pc/core.img}} に (上で説明しているように {{ic|chattr}} コマンドを使って) immutable フラグを設定することで、これによってディスク上の {{ic|core.img}} ファイルのセクタ位置が変化しなくなります。{{ic|/boot/grub/i386-pc/core.img}} に immutable フラグを設定するのは、GRUB をパーティションブートセクタやパーティションレスディスクにインストールするときだけ必要になることで、ブートセクタに埋め込まず MBR にインストールしたり {{ic|core.img}} だけを生成する時は必要ありません (上述)。
 
   
  +
[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12 Ubuntu の公式ビルドスクリプト]によると、Ubuntu では以下の GRUB モジュールが署名済み GRUB EFI バイナリ {{ic|grubx64.efi}} に組み込まれています:
残念ながら、エラーが表示されなかったとしても、作成される {{ic|grub.cfg}} ファイルには起動するための正しい UUID が含まれません。https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604 を参照してください。この問題を修正するには以下のコマンドを実行してください:
 
   
  +
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n87 "基本" モジュール]。CD や簡単にパーティショニングされたディスクからブートするために必要: {{ic|all_video}}、{{ic|boot}}、{{ic|btrfs}}、{{ic|cat}}、{{ic|chain}}、{{ic|configfile}}、{{ic|echo}}、{{ic|efifwsetup}}、{{ic|efinet}}、{{ic|ext2}}、{{ic|fat}}、{{ic|font}}、{{ic|gettext}}、{{ic|gfxmenu}}、{{ic|gfxterm}}、{{ic|gfxterm_background}}、{{ic|gzio}}、{{ic|halt}}、{{ic|help}}、{{ic|hfsplus}}、{{ic|iso9660}}、{{ic|jpeg}}、{{ic|keystatus}}、{{ic|loadenv}}、{{ic|loopback}}、{{ic|linux}}、{{ic|ls}}、{{ic|lsefi}}、{{ic|lsefimmap}}、{{ic|lsefisystab}}、{{ic|lssal}}、{{ic|memdisk}}、{{ic|minicmd}}、{{ic|normal}}、{{ic|ntfs}}、{{ic|part_apple}}、{{ic|part_msdos}}、{{ic|part_gpt}}、{{ic|password_pbkdf2}}、{{ic|png}}、{{ic|probe}}、{{ic|reboot}}、{{ic|regexp}}、{{ic|search}}、{{ic|search_fs_uuid}}、{{ic|search_fs_file}}、{{ic|search_label}}、{{ic|sleep}}、{{ic|smbios}}、{{ic|squash4}}、{{ic|test}}、{{ic|true}}、{{ic|video}}、{{ic|xfs}}、{{ic|zfs}}、{{ic|zfscrypt}}、{{ic|zfsinfo}}
# mount /dev/sdxY /mnt #Your root partition.
 
  +
* x84_64-efi アーキテクチャ用の [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n147 "プラットフォーム固有" のモジュール]。例えば:
# mount /dev/sdxZ /mnt/boot #Your boot partiton (if you have one).
 
  +
** {{ic|play}}: ブート中に音を鳴らす
# arch-chroot /mnt
 
  +
** {{ic|cpuid}}: ブート時に CPU の機能を確認する
# pacman -S linux
 
  +
** {{ic|tpm}}: Measured Boot / [[TPM|Trusted Platform Modules]] をサポートする
# grub-mkconfig -o /boot/grub/grub.cfg
 
  +
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n159 "高度な" モジュール]。以下が含まれます:
  +
** {{ic|cryptodisk}}: [[dm-crypt|plain モードで暗号化された]]ディスクからブートする
  +
** {{ic|gcry_''アルゴリズム''}}: 特定のハッシュアルゴリズムと暗号化アルゴリズムをサポートする
  +
** {{ic|luks}}: [[LUKS]] で暗号化されたディスクからブートする
  +
** {{ic|lvm}}: [[LVM]] 論理ボリュームディスクからブートする
  +
** {{ic|mdraid09}}、{{ic|mdraid1x}}、{{ic|raid5rec}}、{{ic|raid6rec}}: [[RAID]] 仮想ディスクからブートする
   
  +
GRUB モジュールのリストはシェル変数の形にしなければなりません (ここでは {{ic|GRUB_MODULES}} と表記しています)。[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images 最新の Ubuntu スクリプト]をベースとして使い、あなたのシステムでは不要なモジュールを取り除くという方法を取ることもできます。モジュールを減らすと、ブートプロセスが比較的速くなり、ESP のスペースをいくらか節約できます。
===== core.img だけを生成する =====
 
   
  +
また、セキュリティを高めるために、EFI バイナリに[https://github.com/rhboot/shim/blob/main/SBAT.md Secure Boot Advanced Targeting (SBAT)] ファイル/セクションを含める必要があります (GRUB が UEFI shim ローダから起動される場合)。SBAT ファイル/セクションには、GRUB バイナリに関するメタデータ (バージョン、メンテナ、開発者、上流の URL) が含まれており、特定の GRUB バージョンに脆弱性がある場合、shim がそのバージョンの GRUB のロードをブロックすることが容易になります [https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/#additional][https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/GRUB2SecureBootBypass2021] (shim の [https://github.com/rhboot/shim/blob/main/SBAT.md UEFI shim bootloader secure boot life-cycle improvements] というドキュメントで説明されています)。
GRUB のブートセクタコードを MBR, MBR の後の隙間またはパーティションのブートセクタに'''埋め込まずに''' {{ic|/boot/grub}} ディレクトリを作成して {{ic|/boot/grub/i386-pc/core.img}} ファイルを生成するには、{{ic|grub-install}} に {{ic|1=--grub-setup=/bin/true}} を加えて下さい:
 
   
  +
SBAT セクションが {{ic|grubx64.efi}} に無いと、shim は {{ic|grubx64.efi}} の起動に失敗します。
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda
 
   
  +
GRUB がインストールされている場合、シンプルな SBAT ''.csv'' ファイルが {{ic|/usr/share/grub/sbat.csv}} で提供されています。
{{Note|
 
* {{ic|/dev/sda}} はインストール先に置き換えて下さい。
 
* {{ic|1=--target=i386-pc}} は {{ic|grub-install}} に BIOS システムだけにインストールすることを示します。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。
 
}}
 
   
  +
その {{ic|/usr/share/grub/sbat.csv}} ファイルと必要な {{ic|GRUB_MODULES}} を使って GRUB を再インストールし、GRUB バイナリを署名してください:
これで Linux カーネルやマルチブートカーネルとして GRUB Legacy や syslinux から GRUB の {{ic|core.img}} をチェインロードできます。
 
   
  +
# grub-install --target=x86_64-efi --efi-directory=''esp'' --modules=${GRUB_MODULES} --sbat /usr/share/grub/sbat.csv
=== UEFI システム ===
 
  +
# sbsign --key MOK.key --cert MOK.crt --output ''esp''/EFI/GRUB/grubx64.efi ''esp''/EFI/GRUB/grubx64.efi
  +
# cp ''esp''/EFI/GRUB/grubx64.efi ''esp''/EFI/BOOT/grubx64.efi
   
  +
再起動し、''MokManager'' で鍵を選択すれば、セキュアブートが機能するはずです。
{{Note|それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。GRUB や EFI が正しく動作しないという問題が起きたユーザーは下で説明されていること以外のハードウェア特有のケースについて詳しい手順を共有することが奨励されています。[[GRUB (日本語)|GRUB]] の記事は総合的なことしか書かれていないので、これらの特別な場合については [[GRUB EFI Examples]] のページを見て下さい。}}
 
   
  +
==== セキュアブートを使用する ====
最初に {{Pkg|grub}}, {{Pkg|dosfstools}}, {{Pkg|efibootmgr}} パッケージをインストールして、それから下の手順に従って下さい (後ろの2つのパッケージは grub が EFI をサポートするのに必要になります)。
 
   
  +
インストール後は、[[セキュアブート#セキュアブートを実現する]] を見て、セキュアブートを有効化する手順を確認してください。
{{Note|パッケージをインストールするだけでは {{ic|core.efi}} ファイルや EFI System Partition 内の GRUB モジュールは更新されません。下で説明されているように {{ic|grub-install}} を使って手動でアップデートする必要があります。}}
 
   
  +
CA 鍵の方法を取っている場合、鍵の管理や登録、ファイルの署名は {{pkg|sbctl}} で自動化できます。詳細は [[セキュアブート#sbctl でより簡単に行う]] を見てください。
==== ブートファイルのインストール ====
 
   
===== 推奨方法 =====
+
== BIOS システム ==
   
  +
=== GUID Partition Table (GPT) 特有の手順 ===
{{Note|
 
* 下のコマンドでは GRUB を {{ic|x86_64-efi}} でインストールすると仮定しています ({{ic|IA32-efi}} を使うのなら下のコマンドの {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えて下さい)。
 
* インストールを行うために、BIOS ではなく UEFI を使って起動する必要があります。そうしないと {{ic|grub-install}} はエラーを出します。
 
}}
 
   
  +
BIOS/[[GPT]] の構成では、[https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation BIOS ブートパーティション]が必要です。GRUB は {{ic|core.img}} をこのパーティションに埋め込みます。
まず、ESP をお好きなマウントポイントにマウントしてください (通常は {{ic|/boot/efi}} を使います、以下 $esp として示します)。最初のインストールでは、{{ic|mkdir /boot/efi}} を実行する必要があります。
 
 
GRUB UEFI アプリケーションを {{ic|$esp/EFI/grub}} に、GRUB のモジュールを {{ic|/boot/grub/x86_64-efi}} にインストールしてください:
 
 
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=arch_grub --recheck --debug
 
   
 
{{Note|
 
{{Note|
  +
* この方法を試す前に、すべてのシステムでこのパーティショニング方式がサポートされているわけではないということを心に留めておいてください。詳細は [[パーティショニング#GUID Partition Table]] を見てください。
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。
 
  +
* BIOS ブートパーティションは BIOS/GPT のセットアップでのみ GRUB が必要とします。BIOS/MBR セットアップでは、GRUB は MBR の後にある隙間を {{ic|core.img}} のために使用します。しかし、GPT では最初のパーティションの前に未使用の領域があることは保証されていません。
* chroot 環境で (例えばシステムのインストール中に) LVM システムに GRUB をインストールする場合、{{ic|/run/lvm/lvmetad.socket: connect failed: No such file or directory}} または {{ic|WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning}} などの警告が表示されることがあります。これは {{ic|/run}} が chroot 中は利用できないのが原因です。これらの警告によってシステムが起動できなくなるということはないので、安心してインストールを続行してください。
 
  +
* [[UEFI]] システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは依然として [[EFI システムパーティション]]が必要です。
* オプション {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は ESP のマウントポイントを指定します。このオプションと同じものとして以前は {{ic|--root-directory}} が使われていました。{{ic|--bootloader-id}} は {{ic|grubx64.efi}} ファイルを保存するのに使うディレクトリの名前を指定します。
 
* GRUB を BIOS システムで設定するときと異なり {{ic|grub-install}} コマンドの最後に <device_path> オプション (例: {{ic|/dev/sda}}) を使わないことに注意してください。UEFI のブートローダーは MBR やパーティションのブートセクタを全く使わないので <device_path> が指定されてもインストールスクリプトはそれを無視します。
 
 
}}
 
}}
 
これで GRUB はインストールされました。後は忘れずに[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]してください。
 
   
  +
ディスク上にパーティションタイプ GUID {{ic|21686148-6449-6E6F-744E-656564454649}} の、ファイルシステムの無い 1 メビバイト (''fdisk'' や ''gdisk'' で {{ic|1=+1M}}) のパーティションを作成してください。
====== UEFI ファームウェアの応急処置 ======
 
UEFI ファームウェアによっては {{ic|.efi}} ブータブルスタブが特定の名前で特定の場所に配置されていることが必要とされます: {{ic|$esp/EFI/boot/bootx64.efi}} ({{ic|$esp}} は UEFI パーティションのマウントポイントに置き換えて下さい)。そうしておかないと場合によって起動できなくなってしまうことがあります。幸いに、これを必要としない他のファームウェアでは問題は起きません。
 
   
応急処置を行うには、必要なデレクトリを作成して、それから grub の {{ic|.efi}} スタブコピーしてください:
+
* [[fdisk]] では、パーテションタイプ {{ic|BIOS boot}} を選択してください
  +
* [[gdisk]] では、パーティションタイプコード {{ic|ef02}} を選択してください。
  +
* [[parted]] では、そのパーティションで {{ic|bios_grub}} フラグをセット/アクティブ化してください。
   
  +
このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。
# mkdir $esp/EFI/boot
 
# cp $esp/EFI/arch_grub/grubx64.efi $esp/EFI/boot/bootx64.efi
 
   
  +
GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。''fdisk'' や ''gdisk'' では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。
===== 他の方法 =====
 
   
  +
=== Master Boot Record (MBR) 特有の手順 ===
GRUB のブートファイルを全て EFI System Partition の中に収めたい時は、{{ic|grub-install}} コマンドに {{ic|--boot-directory&#61;$esp/EFI}} を追加してください:
 
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --boot-directory=$esp --recheck --debug
 
   
  +
通常、MBR でパーティションされた環境において [[MBR]] の後の隙間 (512 バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダーアライメントは問題になりません。しかしながら GRUB の {{ic|core.img}} 用に十分な領域を確保するために 1 から 2 MiB ほど MBR の後の領域をとることを推奨します ({{bug|24103}})。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために ({{ic|core.img}} の埋め込みとは関係ありません) 1 MiB [[パーティショニング#パーティションアライメント|パーティションアライメント]]をサポートしているパーティションツールを使うのが得策です。
このコマンドによって GRUB モジュールは {{ic|$esp/grub}} に置かれます (このパスの最後の '/grub' はハードコードされています)。この方法を使うと、{{ic|grub.cfg}} も EFI System Partition 上に作る必要があり、設定するときに正しい位置を {{ic|grub-mkconfig}} に示す必要があります:
 
   
  +
=== インストール ===
# grub-mkconfig -o $esp/grub/grub.cfg
 
   
  +
{{Pkg|grub}} パッケージを[[インストール]]してください ({{AUR|grub-legacy}} がインストールされている場合は置き換えられます。) 次に以下を実行してください:
設定の他のところは同じです。
 
   
  +
# grub-install --target=i386-pc ''/dev/sdX''
==== ファームウェアのブートマネージャに GRUB エントリを作成する ====
 
   
  +
{{ic|i386-pc}} は実際のアーキテクチャに関わらず使用されます。{{ic|''/dev/sdX''}} は GRUB がインストールされる '''ディスク''' ('''パーティションではありません''') です。例えば、{{ic|/dev/sda}}、{{ic|/dev/nvme0n1}}、{{ic|/dev/mmcblk0}} です。ブロックデバイスの命名方法については [[デバイスファイル#ブロックデバイスの名前]] を参照してください。
{{ic|grub-install}} は自動でブートマネージャにメニューエントリを作成しようとします。作成されないときは、[[Beginners' Guide (日本語)#GRUB|Beginners' Guide#GRUB]] を参照して {{ic|efibootmgr}} を使ってメニューエントリを作成してください。また、UEFI モードで CD/USB を起動できないような問題については [[Unified Extensible Firmware Interface (日本語)#ISO から UEFI ブータブル USB を作成する|Unified Extensible Firmware Interface#ISO から UEFI ブータブル USB を作成する]] を参照してください。
 
   
  +
次に、[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]する必要があります。
==== GRUB Standalone ====
 
   
  +
{{ic|/boot}} に [[LVM]] を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。
{{Note|{{Pkg|grub}} パッケージには様々な grub-mkstandalone のフィックス (特に必須の {{ic|${cmdpath} }} サポート) が含まれていないのでスタンドアロンの GRUB EFI イメージでは {{AUR|grub-git}} パッケージを使って下さい。}}
 
   
  +
{{Tip|USB メモリなどに GRUB をインストールする他の方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を参照してください。}}
全てのモジュールを UEFI アプリケーション内の memdisk に埋め込んだ {{ic|grubx64_standalone.efi}} アプリケーションを作成することができ、これによって GRUB UEFI モジュールやその他関連ファイルが利用するディレクトリを別に持つ必要がなくなります。これを行うには {{Pkg|grub}} に含まれている {{ic|grub-mkstandalone}} コマンドを使います。
 
   
  +
{{ic|grub-install}} コマンドの詳細については、{{man|8|grub-install}} および [https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation GRUB Manual] を参照してください。
# echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg ## use single quotes, ${cmdpath}/grub.cfg should be present as it is
 
# grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --fonts="unicode" --locales="en@quot" --themes="" -o "$esp/EFI/grub/grubx64_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v
 
   
  +
== 設定 ==
{{Note|オプション {{ic|1=--modules="part_gpt part_msdos"}} (クォート付き) は {{ic|${cmdpath} }} 機能を正しく動作させるために必要です。}}
 
   
から GRUB の設定ファイル {{ic|$esp/EFI/grub/grub.cfg}} にコピーし[[Unified Extensible Firmware Interface (日本語)#efibootmgr|efibootmgr]] を使って {{ic|$esp/EFI/grub/grubx64_standalone.efi}}UEFI Boot Manager エントリ作成してください。
+
インストールさたシステムでは、GRUB は起動度に設定ファイル {{ic|/boot/grub/grub.cfg}} をロます。ツールを使う場合は、[[#grub.cfg の生成]] を、手動で作成する場合は [[#grub.cfgカスタマイズ]]参照してください。
   
  +
=== grub.cfg の生成 ===
===== GRUB Standalone - 技術的な情報 =====
 
   
  +
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/ヒントとテクニック]] を見て下さい。
GRUB EFI のファイルはいつでも設定ファイルが {{ic|${prefix}/grub.cfg}} にあることを期待しています。しかしながらスタンドアロンの GRUB EFI ファイルでは、{{ic|${prefix} }} は tar アーカイブの中に置かれスタンドアロンの GRUB EFI ファイルそれ自体に埋め込まれます (GRUB ではクォートのない {{ic|"(memdisk)"}} で示される)。この tar アーカイブには通常の GRUB EFI インストールで {{ic|/boot/grub}} に保存される全てのファイルが含まれています。
 
   
  +
{{Note|{{ic|/etc/grub.d/}} 下のファイルや {{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}}
{{ic|/boot/grub}} の中身がスタンドアロンのイメージに埋め込まれることによって、全てにおいて実際の (外部的な) {{ic|/boot/grub}} を使うことはできなくなります。そのためスタンドアロンの GRUB EFI ファイルでは {{ic|1=${prefix}==(memdisk)/boot/grub}} とスタンドアロンの GRUB EFI ファイルは設定ファイルが {{ic|1=${prefix}/grub.cfg==(memdisk)/boot/grub/grub.cfg}} にあるとして読み込みます。
 
   
  +
{{Warning|GRUB の新しいバージョンで設定ファイルの構文が変更された場合、ブートローダーをアップデート/再インストールしてください ([[#UEFI システム]] や [[#BIOS システム]] を見てください)。設定が一致しないと、システムが起動できなくなる可能性があります。例えば、新しい設定では既存の GRUB バイナリが認識しない関数が使用されているかもしれず、想定外の動作を引き起こす可能性があります。}}
このためスタンドアロンの GRUB EFI ファイルに同じディレクトリにある外部的 {{ic|grub.cfg}} を EFI ファイルとして読み込ませるには (GRUB では {{ic|${cmdpath} }} で示される)、GRUB に設定として {{ic|${cmdpath}/grub.cfg}} を使うように記述した {{ic|/tmp/grub.cfg}} を作る必要があります ({{ic|(memdisk)/boot/grub/grub.cfg}} の {{ic|configfile ${cmdpath}/grub.cfg}} コマンド)。それから grub-mkstandalone にこの {{ic|/tmp/grub.cfg}} ファイルを {{ic|${prefix}/grub.cfg}} (実際には {{ic|(memdisk)/boot/grub/grub.cfg}}) にコピーさせるためにオプション {{ic|1="/boot/grub/grub.cfg=/tmp/grub.cfg"}} を使います。
 
   
  +
==== メイン設定ファイルの生成 ====
これでスタンドアロンの GRUB EFI ファイルと実際の {{ic|grub.cfg}} は EFI System Partition の中のディレクトリに (同じディレクトリである限り) 保存することが出来るようになり、持ち運びが容易になります。
 
   
  +
インストールした後は、メインの設定ファイル {{ic|/boot/grub/grub.cfg}} を生成する必要があります。生成プロセスは、{{ic|/etc/default/grub}} 内の様々なオプションや {{ic|/etc/grub.d/}} 下のスクリプトによって制御されます。{{ic|/etc/default/grub}} におけるオプションのリストと、それぞれのオプションの簡潔な説明は、GNU の[https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html ドキュメント]を参照してください。
== メイン設定ファイルの生成 ==
 
   
  +
追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムのルートファイルシステムを判定し、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに chroot していることが重要です。
インストールした後は、メインの設定ファイル {{ic|grub.cfg}} を生成する必要があります。生成されるファイルは {{ic|/etc/default/grub}} の様々なオプションや {{ic|/etc/grub.d/}} のスクリプトによって設定されます。これについては [[#基本的な設定]] と [[#高度な設定]] のセクションで説明しています。
 
   
  +
{{Note|1=<nowiki></nowiki>
{{Note|{{ic|/etc/default/grub}} や {{ic|/etc/grub.d/*}} に変更を加えた後は {{ic|grub.cfg}} を再生成する必要があることを覚えておいて下さい。}}
 
  +
* デフォルトのファイルパスは {{ic|/boot/grub/grub.cfg}} です、{{ic|/boot/grub/i386-pc/grub.cfg}} ではありません。
{{Warning|パッケージバージョン 1:2.02.beta2-1 (2014-01-10) から grub-mkconfig は''異常な''設定ファイルを作成するようになっています。生成される {{ic|grub.cfg}} にはブートエントリが重複して含まれ、initramfs が見つからなかったりセルフコンパイルしたカーネルがメニューに表示されなかったりします ({{bug|38455}})。}}
 
  +
* [[chroot]] や [[systemd-nspawn]] コンテナで ''grub-mkconfig'' を実行しようとした場合、次のようなエラーによりうまく行かないことがあります: {{ic|grub-probe: error: failed to get canonical path of ''/dev/sdaX''}}。この場合、[https://bbs.archlinux.org/viewtopic.php?pid=1225067#p1225067 このフォーラムの投稿]で記述されているように [[arch-chroot]] を使ってみて下さい。
  +
}}
   
''grub-mkconfig'' ツールを使って {{ic|grub.cfg}} を生成してください:
+
''grub-mkconfig'' ツールを使って {{ic|/boot/grub/grub.cfg}} を生成してください:
   
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
   
  +
デフォルトで、生成スクリプトは Arch Linux の[[カーネル]]のメニューエントリを自動的に設定に追加します。
{{Note|
 
  +
* このファイルのパスは {{ic|/boot/grub/grub.cfg}} です、{{ic|/boot/grub/i386-pc/grub.cfg}} ではありません。
 
  +
{{Tip|
* EFI システムでは、{{ic|1=--boot-directory=$esp/EFI}} オプションを使って GRUB がインストールされた場合、{{ic|grub.cfg}} ファイルは {{ic|grubx64.efi}} と同じディレクトリにあるはずです。そうでないのなら、GRUB BIOS と同じように {{ic|grub.cfg}} ファイルは {{ic|/boot/grub/}} にあります。
 
  +
* [[カーネル]]をインストール/アンインストールした後は、上記の ''grub-mkconfig'' コマンドを再度実行する必要があります。
* chroot や ''systemd-nspawn'' コンテナで ''grub-mkconfig'' を実行しようとした場合、''grub-probe'' が "/dev/sdaX の正規パス" を取得できないといて動かないことがあります。この場合、[https://bbs.archlinux.org/viewtopic.php?pid&#61;1225067#p1225067 ここ]に記述されているように ''arch-chroot'' を使ってみて下さい。
 
  +
* 複数の GRUB エントリを管理するためのヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} の両方を使用している場合、[[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。
 
}}
 
}}
   
  +
他のオペレーティングシステムのエントリを自動的に追加する方法は [[#他の OS の検出]] を見てください。
生成スクリプトはデフォルトで生成する設定に Arch Linux のメニューエントリを自動で追加します。しかしながら、他のオペレーティングシステムのエントリは設定しないといけません。BIOS システムでは {{Pkg|os-prober}} をインストールすれば、マシンにインストールされている他のオペレーティングシステムを検知して、それぞれのエントリを {{ic|grub.cfg}} に追加することができます。インストールされていれば、''grub-mkconfig'' の実行時に os-prober が起動します。高度な設定は [[#デュアルブート]] を見て下さい。
 
   
  +
{{ic|/etc/grub.d/40_custom}} を編集して {{ic|/boot/grub/grub.cfg}} を再生成することで、追加のカスタムメニューエントリを追加することができます。または、{{ic|/boot/grub/custom.cfg}} を作成して、そこにカスタムのメニューエントリを追加することもできます。{{ic|/boot/grub/custom.cfg}} を編集した後に ''grub-mkconfig'' を再度実行する必要はありません。{{ic|/etc/grub.d/41_custom}} は必要な {{ic|source}} 文を設定ファイルに追加するからです。
=== GRUB Legacy の設定ファイルを新しいフォーマットに変換する ===
 
   
  +
{{Tip|{{ic|/etc/grub.d/40_custom}} は {{ic|/etc/grub.d/''nn''_custom}} を作成する際のテンプレートとして使うことができます。{{ic|''nn''}} の部分は優先順位で、スクリプトを実行する順番を決定します。スクリプトを実行する順番は GRUB ブートメニューエントリの配置を決定します。必要なスクリプトを確実に実行させるために、{{ic|''nn''}} は {{ic|06}} よりも大きくする必要があります。}}
{{ic|grub-mkconfig}} が失敗する場合、次のコマンドで {{ic|/boot/grub/menu.lst}} ファイルを {{ic|/boot/grub/grub.cfg}} に変換してください:
 
   
  +
カスタムのメニューエントリの例は [[#ブートメニューエントリの例]] を見てください。
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg
 
   
  +
==== 他の OS の検出 ====
{{Note|このオプションは BIOS システムでだけ機能します、UEFI システム上では使えません。}}
 
   
  +
''grub-mkconfig'' で、インストールされている他のシステムを検索して自動的にメニューに追加するには、 {{Pkg|os-prober}} パッケージを [[インストール]] して、他のシステムが起動するパーティションを[[マウント]]してください。その後、''grub-mkconfig'' を再実行します。もし、{{ic|Warning: os-prober will not be executed to detect other bootable partitions}} と出力されたら、{{ic|/etc/default/grub}} を編集して次の行を追加/アンコメントしてください:
例えば:
 
   
  +
GRUB_DISABLE_OS_PROBER=false
{{hc|/boot/grub/menu.lst|<nowiki>
 
default=0
 
timeout=5
 
   
  +
その後、もう一度試してください。
title Arch Linux Stock Kernel
 
root (hd0,0)
 
kernel /vmlinuz-linux root=/dev/sda2 ro
 
initrd /initramfs-linux.img
 
 
title Arch Linux Stock Kernel Fallback
 
root (hd0,0)
 
kernel /vmlinuz-linux root=/dev/sda2 ro
 
initrd /initramfs-linux-fallback.img
 
</nowiki>}}
 
 
{{hc|/boot/grub/grub.cfg|<nowiki>
 
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi
 
set timeout=5
 
 
menuentry 'Arch Linux Stock Kernel' {
 
set root='(hd0,1)'; set legacy_hdbias='0'
 
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
 
legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img'
 
 
}
 
 
menuentry 'Arch Linux Stock Kernel Fallback' {
 
set root='(hd0,1)'; set legacy_hdbias='0'
 
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
 
legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img'
 
}
 
</nowiki>}}
 
 
GRUB の {{ic|/boot/grub/grub.cfg}} 設定ファイルを作るのを忘れて、再起動したら GRUB のコマンドシェルが表示された場合、以下を入力してください:
 
 
sh:grub> insmod legacycfg
 
sh:grub> legacy_configfile ${prefix}/menu.lst
 
 
Arch で起動して正しい GRUB {{ic|/boot/grub/grub.cfg}} 設定ファイルを再生成してください。
 
 
== 基本的な設定 ==
 
 
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[#高度な設定]] を見て下さい。
 
 
{{Note|{{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}}
 
 
=== 追加引数 ===
 
 
カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。この2つは {{ic|grub.cfg}} を生成するときに互いに標準のブートエントリに追加されます。''recovery'' ブートエントリについては、{{ic|GRUB_CMDLINE_LINUX}} だけが生成時に使われます。
 
 
両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic|<nowiki>GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sdaX</nowiki> quiet"}} ({{ic|sda'''X'''}} はスワップパーティション) を使ってハイバネーションの後の復帰を有効にすることができます。生成された recovery ブートエントリでは resume やメニューエントリからの起動中のカーネルメッセージを表示しない ''quiet'' は使われません。そして、他の (標準の) メニューエントリではオプションとして使われます。
 
 
GRUB のリカバリエントリを生成するには {{ic|/etc/default/grub}} で {{ic|<nowiki>#GRUB_DISABLE_RECOVERY=true</nowiki>}} をコメントアウトする必要があります。
 
 
また、{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}} を使うこともできます ({{ic|${swap_uuid} }} は swap パーティションの [[Persistent_block_device_naming|UUID]] に置き換えて下さい)。
 
 
複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります:
 
{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/usr/lib/systemd/systemd"</nowiki>}}
 
 
詳しくは[[カーネルパラメータ]]を見て下さい。
 
 
=== 外観の設定 ===
 
 
GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては [[#"No suitable mode found" エラー]] のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。
 
 
==== フレームバッファの解像度を設定する ====
 
 
GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い {{ic|1=vga=}} は deprecated になりました。以下のように {{ic|/etc/default/grub}} を編集する方法が推奨されています:
 
 
GRUB_GFXMODE=1024x768x32
 
GRUB_GFXPAYLOAD_LINUX=keep
 
 
変更を適用するには、次を実行してください:
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
 
{{ic|gfxpayload}} プロパティによってカーネルに解像度を維持させます。
 
   
 
{{Note|
 
{{Note|
  +
* 正確なマウントポイントは重要ではありません。''os-prober'' は {{ic|mtab}} を読み込んで、起動可能なエントリを検索すべき場所を特定します。
* 上記のサンプルで上手く行かないときは {{ic|1=gfxmode="1024x768x32"}} を {{ic|1=vbemode="0x105"}} に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい
 
  +
* 他のオペレーティングシステムをエントリに含めるために、''grub-mkconfig'' を実行するたびに対象のパーティションをマウントすることを忘れないでください。
* {{ic|1=# hwinfo --framebuffer}} を使って利用できる全てのモードを表示することができます (hwinfo は [community] から利用可能です)、GRUB のプロンプトでは {{ic|1=vbeinfo}} コマンドが使用できます
 
  +
* ''os-prober'' は、chroot 内で実行すると正しく動作しないかもしれません。そのような場合は、再起動してシステムに入り、再び試してください。
 
}}
 
}}
   
  +
{{Tip|最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、[[GRUB/ヒントとテクニック#以前のエントリを思い出させる]] を参照してください。}}
この方法が使えない時は、昔の {{ic|1=vga=}} を使って下さい。{{ic|/etc/default/grub}} の {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} という行に追加するだけです、例えば: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} は解像度が {{ic|1024x768}} になります。
 
   
  +
===== Windows =====
以下の解像度のどれかを選ぶことができます: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}}
 
   
  +
UEFI モードでインストールされた Windows の場合、Windows Boot Manager ({{ic|bootmgfw.efi}}) を含んでいる [[EFI システムパーティション]]がマウントされていることを確認してください。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。
==== 915resolution hack ====
 
   
  +
BIOS モードでインストールされた Windows の場合、Windows ''システムパーティション'' をマウントしてください (そのパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であるはずです)。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。
たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} と {{ic|1=vbeinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。
 
   
  +
{{Note|BIOS モードでインストールされた Windows の場合:
まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です:
 
  +
* NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、[[NTFS-3G]] をインストールして再マウントしてみてください。
{{hc|sh:grub> 915resolution -l|
 
  +
{{Out of date| Windows 7 以降、{{ic|bootmgr}} は[[Wikipedia:System partition and boot partition#Microsoft definition|システムパーティション]]内にあり、このパーティションは暗号化されていません。}}
Intel 800/900 Series VBIOS Hack : version 0.5.3
 
  +
* 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、[[cryptsetup]] や {{AUR|dislocker}} で実行できます。これで {{Pkg|os-prober}} が正しいエントリを追加できるはずです。
[...]
 
'''Mode 30''' : 640x480, 8 bits/pixel
 
[...]
 
 
}}
 
}}
次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします:
 
{{hc|/etc/grub.d/00_header|
 
[...]
 
'''915resolution 30 1440 900 # Inserted line'''
 
set gfxmode&#61;${GRUB_GFXMODE}
 
[...]
 
}}
 
最後に、先に説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。
 
   
  +
==== 追加引数 ====
==== 背景画像とビットマップフォント ====
 
   
  +
カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。これら2つは互いに追加され、標準のブートエントリを作成する際にカーネルに渡されます。''recovery'' ブートエントリについては、{{ic|GRUB_CMDLINE_LINUX}} だけが生成時に使われます。
GRUB は背景画像と {{ic|pf2}} フォーマットのビットマップフォントをサポートしています。{{Pkg|grub}} パッケージに含まれている unifont フォントは {{ic|unicode.pf2}} というファイル名で置いてあり、同じく ASCII 文字は {{ic|ascii.pf2}} という名前です。
 
   
  +
両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic|1=GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=''uuid-of-swap-partition'' quiet"}} ({{ic|''uuid-of-swap-partition''}} は [[ハイバネート]]後に復帰できるようにするためのスワップパーティションの [[UUID]])。この例の設定では、(ハイバネートからの) 復帰をせず、メニューエントリからの起動中にカーネルメッセージを非表示にする {{ic|quiet}} も無いリカバリブートエントリを生成します。しかし、他の (標準の) メニューエントリはこれらのオプションを持ちます。
サポートされている画像フォーマットは tga, png, jpeg で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。
 
   
  +
デフォルトでは、''grub-mkconfig'' はルートファイルシステムの [[UUID]] を検出して、設定にそれを反映します。これを無効化するには、{{ic|1=GRUB_DISABLE_LINUX_UUID=true}} をアンコメントしてください。
正しい[[#フレームバッファの解像度を設定する|フレームバッファの解像度]]を設定するようにしてください。
 
   
  +
GRUB リカバリエントリを生成するには、{{ic|/etc/default/grub}} 内の {{ic|GRUB_DISABLE_RECOVERY}} が {{ic|true}} に設定されていない必要があります。
{{ic|/etc/default/grub}} を以下のように編集してください:
 
GRUB_BACKGROUND="/boot/grub/myimage"
 
#GRUB_THEME="/path/to/gfxtheme"
 
GRUB_FONT="/path/to/font.pf2"
 
   
  +
詳細は [[カーネルパラメータ]] を参照してください。
{{Note|GRUB を分割して別のパーティションにインストールしている場合、{{ic|/boot/grub/myimage}} は {{ic|/grub/myimage}} になります。}}
 
   
  +
==== トップレベルのメニューエントリを設定する ====
変更を適用するには {{ic|grub.cfg}} を[[#メイン設定ファイルの生成|再生成]]してください。スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに {{ic|"Found background image..."}} と表示されるはずです。
 
この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。
 
 
画像が表示されないときは、以下をチェックしてください:
 
* {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか
 
* 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg)
 
* 画像が RGB モードで保存されていて、インデックスは付いていないか
 
* コンソールモードが {{ic|/etc/default/grub}} で無効になっているか
 
* 背景画像を {{ic|/boot/grub/grub.cfg}} ファイルに入れるために {{ic|grub-mkconfig}} コマンドをちゃんと実行したか
 
   
  +
デフォルトでは、''grub-mkconfig'' は、含まれているカーネルを {{ic|sort -V}} を使ってソートし、それらの中の最初のカーネルをトップレベルのエントリとして使用します。すなわち、例えば {{ic|/boot/vmlinuz-linux-lts}} は {{ic|/boot/vmlinuz-linux}} より前に来るので、{{Pkg|linux-lts}} と {{Pkg|linux}} の両方がインストールされている場合、LTS カーネルがトップレベルのメニューエントリとなります。これは、望ましくない場合があるでしょう。この挙動は、{{ic|/etc/default/grub}} 内の {{ic|1=GRUB_TOP_LEVEL=''path_to_kernel''"}} を指定することでオーバーライドすることができます。例えば、標準のカーネルをトップレベルのメニューエントリにするには、{{ic|1=GRUB_TOP_LEVEL="/boot/vmlinuz-linux"}} を使用します。
==== テーマ ====
 
   
  +
==== LVM ====
以下は GRUB パッケージに含まれている Starfield テーマを設定する例です。
 
   
  +
{{Warning|GRUB はシンプロビジョニングされた論理ボリュームをサポートしていません。}}
{{ic|/etc/default/grub}} を編集してください:
 
GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"
 
   
  +
{{ic|/boot}} や {{ic|/}} に [[LVM]] を使用している場合、{{ic|lvm}} モジュールをプリロードするようにしてください:
変更を適用するには {{ic|grub.cfg}} を[[#メイン設定ファイルの生成|再生成]]してください。テーマの設定が成功すると、ターミナルに {{ic|Found theme: /usr/share/grub/themes/starfield/theme.txt}} と表示されます。
 
テーマを使っている時は基本的にスプラッシュイメージは表示されません。
 
   
  +
{{hc|/etc/default/grub|2=
==== メニューの色 ====
 
  +
GRUB_PRELOAD_MODULES="... lvm"
  +
}}
   
  +
==== RAID ====
GRUB のメニューの色を設定することができます。GRUB で利用できる色は [https://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html GRUB のマニュアル]に書かれています。
 
以下サンプルです:
 
   
  +
GRUB は [[RAID]] ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール {{ic|mdraid09}} か {{ic|mdraid1x}} をロードする必要があります:
{{ic|/etc/default/grub}} を編集してください:
 
GRUB_COLOR_NORMAL="light-blue/black"
 
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
 
   
  +
{{hc|/etc/default/grub|2=
==== メニューを隠す ====
 
  +
GRUB_PRELOAD_MODULES="... mdraid09 mdraid1x"
  +
}}
   
  +
例えば、{{ic|/dev/md0}} は以下のようになります:
GRUB のユニークな機能のひとつとして、メニューを隠して必要な時に {{ic|Esc}} を押して表示することができます。また、タイムアウトカウンターを表示するかどうか設定することもできます。
 
   
  +
set root=(md/0)
{{ic|/etc/default/grub}} を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています:
 
GRUB_TIMEOUT=0
 
GRUB_HIDDEN_TIMEOUT=5
 
GRUB_HIDDEN_TIMEOUT_QUIET=false
 
GRUB_HIDDEN_TIMEOUT がメニューの表示まで待機する秒数です。メニューを隠すには GRUB_TIMEOUT=0 も設定する必要があります。
 
   
  +
パーティショニングされた RAID ボリューム (例: {{ic|/dev/md0p1}}) は以下のようになります:
==== フレームバッファの無効化 ====
 
   
  +
set root=(md/0,1)
バイナリドライバーに問題が発生するので NVIDIA のプロプライエタリドライバーを使っているユーザーは GRUB のフレームバッファを無効化するべきです。
 
   
  +
{{ic|/boot}} パーティションに RAID1 を使用している場合 (あるいは、{{ic|/boot}} が RAID1 ルートパーティション上に存在する場合) に GRUB をインストールするには、BIOS システム上では、両方のドライブ上で ''grub-install'' を実行してください。例:
フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください:
 
GRUB_TERMINAL_OUTPUT=console
 
   
  +
# grub-install --target=i386-pc --debug /dev/sda
他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、{{ic|/etc/default/grub}} 内の次の変数を変更してください:
 
  +
# grub-install --target=i386-pc --debug /dev/sdb
GRUB_GFXPAYLOAD_LINUX=text
 
   
  +
ここでは、{{ic|/boot}} が存在する RAID1 アレイが、{{ic|/dev/sda}} と {{ic|/dev/sdb}} に存在するとしています。
=== 永続的なブロックデバイスの命名 ===
 
   
  +
{{Note|GRUB は [[Btrfs]] RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 はサポートしていません。RAID 5/6 に対しては [[mdadm]] を使用することができます (mdadm は GRUB によってサポートされています)。
[[Persistent block device naming]] を行う方法のひとつとして"古い" {{ic|/dev/sd*}} の代わりに世界でただひとつの UUID を使ってパーティションを識別する方法があります。利点については上のリンクされている記事で説明しています。
 
   
  +
==== 暗号化された /boot ====
ファイルシステムの UUID の永続的命名はデフォルトで GRUB で使われています。
 
   
  +
GRUB には暗号化された {{ic|/boot}} を起動するための特別なサポートがあります。これは、[[LUKS]] ブロックデバイスをアンロックして、GRUB の設定を読み込み、[[initramfs]] と [[カーネル]] をそのブロックデバイスからロードすることにより行われます。このオプションは[[dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|暗号化されていないブートパーティション]]の問題を解決することを試みます。
{{Note|関連するファイルシステムのサイズを変えたり再作成したときはいつでも {{ic|/etc/default/grub}} の新しい UUID を使って {{ic|/boot/grub.cfg}} ファイルを再生成する必要があります。ライブ CD でパーティションやファイルシステムを修正するときは、このことを覚えておいて下さい。}}
 
   
  +
{{Tip|{{ic|/boot}} を別のパーティションに保存する必要は'''ありません'''。システムのルート {{ic|/}} ディレクトリツリー下に保存することもできます。}}
UUID を使うかどうかは {{ic|/etc/default/grub}} 内のオプションによって決めます:
 
   
  +
{{Warning|GRUB 2.12rc1 の LUKS2 に対するサポートは限られています。詳細は [[#LUKS2]] セクションを見てください。}}
# GRUB_DISABLE_LINUX_UUID=true
 
   
  +
この機能を有効化するには、{{ic|/boot}} が存在するパーティションを通常通り [[LUKS]] を使って暗号化してください。そして、以下のオプションを {{ic|/etc/default/grub}} に追加してください。
どちらにしても、変更を生成することを忘れないで下さい:
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
   
  +
{{hc|/etc/default/grub|output=
=== 以前のエントリを思い出させる ===
 
  +
GRUB_ENABLE_CRYPTODISK=y
  +
}}
   
  +
このオプションは grub-install により使用され、grub の {{ic|core.img}} を生成します。
GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと fallback としての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
 
   
  +
このオプションを追加した後やパーティションを暗号化した後に [[#インストール|GRUB を(再)インストール]]することを忘れないでください。
GRUB_DEFAULT=saved
 
   
  +
これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が {{ic|/boot}} マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]を使えば、これを防げます。
これで GRUB は保存されたエントリをデフォルトにします。選択したエントリの保存を有効にするには、次の行を {{ic|/etc/default/grub}} に追加してください:
 
   
  +
{{Warning|
GRUB_SAVEDEFAULT=true
 
  +
* [[#メイン設定ファイルの生成|メインの設定ファイルを生成]]したいときは、{{ic|/boot}} がマウントされていることを確認してください。
  +
* {{ic|/boot}} マウントポイントが関与するシステムアップデートを行うために、アップデートする前に、暗号化された {{ic|/boot}} がアンロックされていて、かつ、マウントされていることを確認してください。{{ic|/boot}} パーティションが別にある場合、[[crypttab]] を[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]と一緒に使うことでこれを自動化できます。
  +
}}
   
  +
{{Note|
{{Note|手動で追加したメニューアイテム (例: {{ic|/etc/grub.d/40_custom}} や {{ic|/boot/grub/custom.cfg}} の Windows) には {{ic|savedefault}} の追加が必要です。設定ファイルを[[#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}}
 
  +
* 特殊なキーマップを使用している場合、デフォルトの GRUB 環境にはそのようなキーマップが存在しません。このことは、[[LUKS]] ブロックデバイスをアンロックするためにどのようにしてパスフレーズを入力するかに関連しています。[[GRUB/ヒントとテクニック#初期ブートにおけるコアイメージの手動設定]] を参照してください。
  +
* パスワードの入力画面が表示されない問題が発生した場合 (cryptouuid や cryptodisk、"device not found" に関係するエラー)、{{ic|1=--modules="part_gpt part_msdos"}} を {{ic|grub-install}} コマンドの最後に付け加えて GRUB を再インストールしてみてください。
  +
}}
   
  +
{{Tip|1=[https://bbs.archlinux.org/viewtopic.php?id=234607 pacman フック] を使用すれば、{{ic|/boot}} 内のファイルにアクセスする必要のあるアップグレード時に {{ic|/boot}} を自動マウントできます。}}
=== デフォルトのメニューエントリを変更する ===
 
   
  +
===== LUKS2 =====
デフォルトで選択されるエントリを変更するには、{{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
 
   
  +
[[#インストール]] 章で説明されているように、{{ic|grub-install}} を使用して LUKS サポートありでブータブルな GRUB イメージを作成してください。ただし、いくつかの注意点があります:
数字を使う:
 
GRUB_DEFAULT=0
 
Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。
 
   
  +
* LUKS2 の初期サポートが GRUB 2.06 で追加されましたが、いくつかの制限があります。これらの制限は、GRUB 2.12rc1 で部分的にのみ対処されています。[https://savannah.gnu.org/bugs/?55093 GRUB bug #55093] を参照してください。
メニューのタイトルを使う:
 
  +
* GRUB 2.12rc1 から、{{ic|grub-install}} で LUKS2 のロックを解除するためのコアイメージを作成できるようになりました。しかし、PBKDF2 のみがサポートされており、Argon2 はサポートされていません。
GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
 
  +
* Argon2id (''cryptsetup'' デフォルト) と Argon2i PBKDF はサポートされていません ([https://savannah.gnu.org/bugs/?59409 GRUB bug #59409])。PBKDF2 のみのサポートです。
   
  +
:{{Tip|LUKS2 と Argon のサポートパッチが施された {{AUR|grub-improved-luks2-git}} を使用できます。このパッケージの Argon サポートには UEFI システムが必要であることに注意してください。[https://aur.archlinux.org/packages/grub-improved-luks2-git#comment-911119]}}
{{Note|設定ファイルを[[#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}}
 
   
  +
{{Note|GRUB 2.12rc1 より前では、カスタムの GRUB 設定ファイルを使って {{ic|grub-mkimage}} コマンドで EFI バイナリを手動で作成する必要がありました。(例えば、{{ic|/boot/grub/grub-pre.cfg}} に {{ic|cryptomount}}、{{ic|insmod normal}}、そして {{ic|normal}} への呼び出しを追加する必要がありました。) しかし、これはもはや必要なくなり、{{ic|grub-install}} だけで十分です。ただし、2.06 からアップグレードした後に少なくとも一回は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を実行する必要があります。}}
=== Root 暗号化 ===
 
   
  +
起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、{{ic|cryptomount -a}} を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、{{ic|cryptomount -u $crypto_uuid}} を使用して特定のパーティションをマウントしてください。その後、通常通り {{ic|insmod normal}} と {{ic|normal}} で進めてください。
GRUB が自動で root 暗号化のためのカーネルパラメータを追加するようにするには、{{ic|/etc/default/grub}} の {{ic|GRUB_CMDLINE_LINUX}} に {{ic|1=cryptdevice=/dev/yourdevice:label}} を加えて下さい。
 
   
  +
正しいパスフレーズを入力したが {{ic|Invalid passphrase}} というエラーにより即座に戻される場合、正しい暗号化モジュールを指定していることを確認してください。{{ic|cryptsetup luksDump ''/dev/nvme0n1p2''}} を使って、ハッシュ関数 (SHA-256, SHA-512) とインストールされているモジュール ({{ic|gcry_sha256}}, {{ic|gcry_sha512}}) が一致するか、PBKDF アルゴリズムが pbkdf2 であるかを確認してください。{{ic|cryptsetup luksConvertKey --hash ''sha256'' --pbkdf pbkdf2 ''/dev/nvme0n1p2''}} を使えば、ハッシュと PBDKDF アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。
{{Tip|GRUB Legacy の設定から更新する場合は、{{ic|/boot/grub/menu.lst.pacsave}} を確認して適切なデバイス・ラベルを加えて下さい。{{ic|kernel /vmlinuz-linux}} という文の後ろにあるはずです。}}
 
   
  +
=== grub.cfg のカスタマイズ ===
{{ic|/dev/mapper/root}} にマップされた root の例:
 
   
  +
このセクションでは ''grub-mkconfig'' に頼らずに {{ic|/boot/grub/grub.cfg}} 内にある GRUB のブートエントリーを手動で作成する方法について言及します。
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"
 
   
  +
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。
また、rootfs で UUID の使用を無効化して下さい:
 
   
  +
* {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上に存在するパーティション ''Y'' を表します。パーティション番号は 1 から始まり、ディスク番号は 0 から始まります。
GRUB_DISABLE_LINUX_UUID=true
 
  +
* {{ic|1=set default=''N''}} は、ユーザーが操作せずにタイムアウトした後に選択されるデフォルトのブートエントリを表します。
  +
* {{ic|1=set timeout=''M''}} は、ユーザーの選択が無かった場合に ''M'' 秒の間待ってデフォルトのブートエントリが起動されることを表します。
  +
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} というタイトルのブートエントリを表します。
  +
* {{ic|1=set root=(hd''X'',''Y'')}} はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に "root" パーティション ({{ic|/}}) 下にあるディレクトリを指定しても構いません)
   
  +
==== LoaderDevicePartUUID ====
設定を再生成してください。
 
   
  +
{{man|8|systemd-gpt-auto-generator}} が [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]をするために必要な {{ic|LoaderDevicePartUUID}} UEFI 変数を GRUB で設定するには、{{ic|grub.cfg}} で {{ic|bli}} モジュールをロードしてください:
=== デフォルトでないエントリを一度だけ起動する ===
 
   
  +
{{bc|1=
デフォルトエントリ以外のエントリを一度だけ起動するのに {{ic|grub-reboot}} はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。
 
  +
if [ "$grub_platform" = "efi" ]; then
{{Note|これをするには {{ic|/etc/default/grub}} に {{ic|1=GRUB_DEFAULT=saved}} を設定 (して {{ic|grub.cfg}} を再生成) する必要があります、{{ic|grub.cfg}} を手動で編集する場合は {{ic|1=set default="${saved_entry}"}} という行を設定します。}}
 
  +
insmod bli
  +
fi
  +
}}
   
  +
==== ブートメニューエントリの例 ====
== 高度な設定 ==
 
   
  +
{{Tip|以下のブートエントリは ''grub-mkconfig'' によって生成された {{ic|/boot/grub/grub.cfg}} でも使用可能です。以下を {{ic|/etc/grub.d/40_custom}} に追加して[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]するか、あるいは以下を直接 {{ic|/boot/grub/custom.cfg}} に追加してください。}}
このセクションでは {{ic|grub.cfg}} の手動編集や、{{ic|/etc/grub.d/}} に記述するカスタムスクリプト、その他高度な設定を扱っています。
 
   
  +
複数の GRUB エントリーを管理するヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} カーネルを同時使用している場合は [[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。
=== grub.cfg を手動で編集する ===
 
   
  +
[[Archiso]] と [https://archboot.com Archboot] のブートメニューエントリについては [[マルチブート USB ドライブ#ブートエントリ]] を見てください。
{{Warning|{{ic|grub.cfg}} ファイルの編集は''非推奨''です。このファイルは {{ic|grub-mkconfig}} コマンドで生成して、{{ic|/etc/default/grub}} や、{{ic|/etc/grub.d}} フォルダ内のスクリプトを編集するのに越したことはありません。}}
 
   
  +
===== GRUB コマンド =====
基本的な GRUB 設定ファイルは以下のオプションを使っています:
 
* {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上のパーティション ''Y'' を示します、パーティション番号は1から始まり、ディスク番号は0から始まります
 
* {{ic|1=set default=''N''}} はユーザーアクションのタイムアウト後に選択されるデフォルトブートエントリを指定します
 
* {{ic|1=set timeout=''M''}} はデフォルトのエントリが起動されるまでユーザーが選択するのを待つ時間 ''M'' 秒を表します
 
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} という名前のブートエントリになります
 
* {{ic|1=set root=(hd''X'',''Y'')}} はカーネルや GRUB モジュールが保存されている boot パーティションを指定します (boot パーティションを分割する必要はなく、"root" パーティション ({{ic|/}}) 下のただのディレクトリでもかまいません
 
   
  +
====== "Shutdown" メニューエントリ ======
設定サンプル:
 
   
  +
{{bc|
{{hc|/boot/grub/grub.cfg|<nowiki>
 
  +
menuentry "System shutdown" {
# Config file for GRUB - The GNU GRand Unified Bootloader
 
  +
echo "System shutting down..."
# /boot/grub/grub.cfg
 
  +
halt
  +
}
  +
}}
   
  +
====== "Restart" メニューエントリ ======
# DEVICE NAME CONVERSIONS
 
#
 
# Linux Grub
 
# -------------------------
 
# /dev/fd0 (fd0)
 
# /dev/sda (hd0)
 
# /dev/sdb2 (hd1,2)
 
# /dev/sda3 (hd0,3)
 
#
 
   
  +
{{bc|
# Timeout for menu
 
  +
menuentry "System restart" {
set timeout=5
 
  +
echo "System rebooting..."
 
  +
reboot
# Set default boot entry as Entry 0
 
set default=0
 
 
# (0) Arch Linux
 
menuentry "Arch Linux" {
 
set root=(hd0,1)
 
linux /vmlinuz-linux root=/dev/sda3 ro
 
initrd /initramfs-linux.img
 
 
}
 
}
  +
}}
   
  +
====== "UEFI Firmware Settings" メニューエントリ ======
## (1) Windows
 
#menuentry "Windows" {
 
# set root=(hd0,3)
 
# chainloader +1
 
#}
 
</nowiki>}}
 
   
  +
{{bc|1=
=== デュアルブート ===
 
  +
if [ ${grub_platform} == "efi" ]; then
  +
menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
  +
fwsetup
  +
}
  +
fi
  +
}}
   
  +
===== EFI バイナリ =====
{{Note|GRUB に自動で他のシステムを検索してほしい場合は、{{Pkg|os-prober}} をインストールするとよいでしょう。}}
 
   
  +
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。
==== /etc/grub.d/40_custom と grub-mkconfig を使って自動生成する ====
 
   
  +
{{Tip|1=GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを {{ic|if}} 文で囲ってください:
他のエントリを追加する最適の方法は {{ic|/etc/grub.d/40_custom}} か {{ic|/boot/grub/custom.cfg}} を編集することです。{{ic|grub-mkconfig}} の実行時にこのファイルにエントリが自動で追加されます。
 
新しい行を追加した後、次を実行して {{ic|grub.cfg}} を生成・更新してください:
 
{{bc|<nowiki># grub-mkconfig -o /boot/grub/grub.cfg</nowiki>}}
 
UEFI-GPT モードでは:
 
{{bc|<nowiki># grub-mkconfig -o /boot/efi/EFI/GRUB/grub.cfg</nowiki>}}
 
   
  +
{{bc|1=
例として、典型的な {{ic|/etc/grub.d/40_custom}} ファイルは以下のようになります。これは Microsoft Windows 8 がプリインストールされている [http://h10025.www1.hp.com/ewfrf/wc/product?cc=us&destPage=product&lc=en&product=5402703&tmp_docname= HP Pavilion 15-e056sl Notebook PC] にあわせて作成されています。それぞれの {{ic|menuentry}} は以下のエントリと同じような構造である必要があります。GRUB 内の UEFI パーティション {{ic|/dev/sda2}} は {{ic|hd0,gpt2}} や {{ic|ahci0,gpt2}} と記述するので注意してください (詳しくは[[#UEFI-GPT モードでインストールされた Windows のメニューエントリ|ここ]]を見て下さい)。
 
  +
if [ ${grub_platform} == "efi" ]; then
  +
''UEFI のときだけ表示するメニューエントリをここへ''
  +
fi
  +
}}
   
  +
}}
'''/etc/grub.d/40_custom''':
 
   
  +
====== UEFI シェル ======
{{hc|/etc/grub.d/40_custom|<nowiki>#!/bin/sh
 
   
  +
[[EFI システムパーティション]]直下に [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]] を置いてメニューエントリに追加すれば、UEFI シェルを起動できます:
exec tail -n +3 $0
 
# This file provides an easy way to add custom menu entries.&nbsp; Simply type the
 
# menu entries you want to add after this comment.&nbsp; Be careful not to change
 
# the 'exec tail' line above.
 
   
  +
{{bc|1=
menuentry "HP / Microsoft Windows 8.1" {
 
  +
menuentry "UEFI Shell" {
echo "Loading HP / Microsoft Windows 8.1..."
 
insmod part_gpt
 
 
insmod fat
 
insmod fat
insmod search_fs_uuid
 
 
insmod chain
 
insmod chain
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6
+
search --no-floppy --set=root --file /shellx64.efi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
+
chainloader /shellx64.efi
 
}
 
}
  +
}}
   
  +
====== gdisk ======
menuentry "HP / Microsoft Control Center" {
 
  +
echo "Loading HP / Microsoft Control Center..."
 
  +
[[gdisk#gdisk EFI アプリケーション|gdisk EFI アプリケーション]]をダウンロードして {{ic|gdisk_x64.efi}} を {{ic|''esp''/EFI/tools/}} にコピーしてください。
insmod part_gpt
 
  +
  +
{{bc|1=
  +
menuentry "gdisk" {
 
insmod fat
 
insmod fat
insmod search_fs_uuid
 
 
insmod chain
 
insmod chain
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6
+
search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi
chainloader /EFI/HP/boot/bootmgfw.efi
+
chainloader /EFI/tools/gdisk_x64.efi
 
}
 
}
  +
}}
   
  +
====== ユニファイドカーネルイメージをチェインロード ======
menuentry "System shutdown" {
 
echo "System shutting down..."
 
halt
 
}
 
   
  +
[[セキュアブート]]に従って生成したか他の方法によって生成した [[Unified カーネルイメージ]]を持っているならば、それをブートメニューに追加できます。例えば:
menuentry "System restart" {
 
echo "System rebooting..."
 
reboot
 
}</nowiki>}}
 
   
  +
{{bc|1=
===== GNU/Linux のメニューエントリ =====
 
  +
menuentry "Arch Linux" {
  +
insmod fat
  +
insmod chain
  +
search --no-floppy --set=root --fs-uuid ''FILESYSTEM_UUID''
  +
chainloader /EFI/Linux/arch-linux.efi
  +
}
  +
}}
   
  +
===== デュアルブート =====
他のディストリが {{ic|sda2}} パーティションに存在する場合:
 
   
  +
====== GNU/Linux ======
menuentry "Other Linux" {
 
set root=(hd0,2)
 
linux /boot/vmlinuz (add other options here as required)
 
initrd /boot/initrd.img (if the other kernel uses/needs one)
 
}
 
   
  +
もう一つのディストリビューションが {{ic|sda2}} パーティションにあると仮定します:
===== FreeBSD のメニューエントリ =====
 
   
  +
{{bc|1=
FreeBSD は UFS でシングルパーティションにインストールする必要があります。{{ic|sda4}} にインストールされている場合:
 
  +
menuentry "Other Linux" {
  +
set root=(hd0,2)
  +
linux /boot/vmlinuz (必要であれば追加のオプションをここへ)
  +
initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)
  +
}
  +
}}
   
  +
代わりに UUID やファイルシステムのラベルで GRUB に正しいパーティションを探させるには:
menuentry "FreeBSD" {
 
set root=(hd0,4)
 
chainloader +1
 
}
 
   
  +
{{bc|1=
===== Windows XP のメニューエントリ =====
 
  +
menuentry "Other Linux" {
  +
# UUID が 763A-9CB6 だとすると
  +
search --no-floppy --set=root --fs-uuid 763A-9CB6
   
  +
# OTHER_LINUX というラベルで探す (パーティションラベルが曖昧でないことを確認してください)
ここでは Windows のパーティションが {{ic|sda3}} にあると仮定しています。実際に windows があるパーティションではなく、インストール時に windows が作成したシステムの予約済みパーティションに set root と chainloader を設定する必要があります。あなたのシステムの予約済みパーティションが {{ic|sda3}} の場合:
 
  +
#search --no-floppy --set=root --label OTHER_LINUX
   
  +
linux /boot/vmlinuz (必要であれば追加のオプションをここへ。例えば、root=UUID=763A-9CB6)
# (2) Windows XP
 
  +
initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)
menuentry "Windows XP" {
 
  +
}
set root="(hd0,3)"
 
  +
}}
chainloader +1
 
}
 
   
  +
もう一つのディストリビューションが、インストール済みの GRUB と {{ic|grub.cfg}}、カーネル、initramfs のある有効な {{ic|/boot}} フォルダーをすでに持っているならば、GRUB にその {{ic|grub.cfg}} ファイルを起動中にその場で読み込ませることができます。例えば、{{ic|hd0}} と4番目の GPT パーティションの場合:
Windows のブートローダーが GRUB とは完全に異なるハードドライブに存在する場合、Windows に GRUB が存在するのが最初のハードドライブだと信じこませる必要があるかもしれません。これは {{ic|drivemap}} を使ってできます。GRUB が {{ic|hd0}} に、Windows が {{ic|hd2}} にあるとするには、{{ic|set root}} の後に次を追加してください:
 
   
  +
{{bc|1=
drivemap -s hd0 hd2
 
  +
menuentry "configfile hd0,gpt4" {
  +
insmod part_gpt
  +
insmod btrfs
  +
insmod ext2
  +
set root='hd0,gpt4'
  +
configfile /boot/grub/grub.cfg
  +
}
  +
}}
   
  +
このエントリを選ぶと GRUB は他のボリュームからその {{ic|grub.cfg}} を読み込み、メニューを表示させます。{{ic|configfile}} ファイル内のコマンドによって環境変数が変更されても、{{ic|configfile}} から返ると環境変数の変更はすべて破棄されます。始めの GRUB メニューに戻る場合は {{ic|Esc}} を押してください。
===== UEFI-GPT モードでインストールされた Windows のメニューエントリ =====
 
   
  +
====== UEFI/GPT モードでインストールされた Windows ======
if [ "${grub_platform}" == "efi" ]; then
 
menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" {
 
insmod part_gpt
 
insmod fat
 
insmod search_fs_uuid
 
insmod chain
 
search --fs-uuid --set=root $hints_string $fs_uuid
 
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
 
}
 
fi
 
   
  +
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の [[EFI システムパーティション]]を見つけて、そのパーティションから Windows のブートローダーを実行することです。
{{ic|$hints_string}} と {{ic|$fs_uuid}} は以下の2つのコマンドで知ることができます。{{ic|$fs_uuid}} のコマンドは:
 
   
  +
{{Note|このメニューエントリは、UEFI ブートモードで実行中であり、かつ Windows のビット数が UEFI のビット数と一致する場合にのみ機能します。BIOS モードでインストールされた GRUB では機能しません。さらなる情報については [[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]]と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}
# grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi
 
1ce5-7f28
 
   
  +
{{bc|1=
{{ic|$hints_string}} のコマンドは:
 
  +
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
  +
}}
   
  +
{{ic|$hints_string}} と {{ic|$fs_uuid}} は以下の2つのコマンドで得られます。
# grub-probe --target=hints_string $esp/EFI/Microsoft/Boot/bootmgfw.efi
 
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
 
   
  +
{{ic|$fs_uuid}} コマンドは EFI システムパーティションの UUID を割り出します。
これらの2つのコマンドは Windows が使っている ESP が {{ic|$esp}} にマウントされているということを前提にしています。場合によっては Windows の EFI ファイルのパスが異なっている可能性があります。
 
   
  +
{{hc|1=# grub-probe --target=fs_uuid ''esp''/EFI/Microsoft/Boot/bootmgfw.efi|2=
===== "シャットダウン" メニューエントリ =====
 
  +
1ce5-7f28
  +
}}
   
  +
代わりに、{{ic|lsblk --fs}} を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。
{{bc|<nowiki>menuentry "System shutdown" {
 
echo "System shutting down..."
 
halt
 
}</nowiki>}}
 
   
  +
{{ic|$hints_string}} コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります:
===== "再起動" メニューエントリ =====
 
   
  +
{{hc|1=# grub-probe --target=hints_string ''esp''/EFI/Microsoft/Boot/bootmgfw.efi|2=
{{bc|<nowiki>menuentry "System restart" {
 
  +
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
echo "System rebooting..."
 
  +
}}
reboot
 
}</nowiki>}}
 
   
  +
以上の2つのコマンドでは Windows が使用する ESP が {{ic|''esp''}} にマウントされていると仮定しています。Windows である以上、Windows の EFI ファイルへのパスが異なる場合があるかもしれません。
===== BIOS-MBR モードでインストールされた Windows =====
 
   
  +
====== BIOS/MBR モードでインストールされた Windows ======
{{Note|GRUB は {{ic|bootmgr}} の直接起動をサポートしており、もはや BIOS-MBR 環境で Windows を起動するためにパーティションブートセクタのチェインロードをする必要はありません。}}
 
   
  +
{{Note|GRUB は {{ic|bootmgr}} ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを [https://www.gnu.org/software/grub/manual/grub.html#Chain_002dloading チェインロード]する必要はもはやありません。}}
{{Warning|{{ic|bootmgr}} が存在するのは'''システムパーティション'''であり、"実際に使っている" Windows のパーティション (一般的に C:) ではありません。{{ic|blkid}} で全ての UUID を表示した際、システムパーティションは {{ic|LABEL&#61;"SYSTEM RESERVED"}} もしくは {{ic|LABEL&#61;"SYSTEM"}} のパーティションであり容量は僅か 100 MB から 200 MB (Arch の boot パーティションとほぼ同じ大きさ) です。詳細は [[Wikipedia:System partition and boot partition]] を参照してください。}}
 
   
  +
{{Warning|{{ic|/bootmgr}} が存在する場所は '''システムパーティション''' であり、"本当"の Windows パーティション (通常、{{ic|C:}}) ではありません。システムパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であり、サイズは約100~549 MiB 程度です。さらなる情報については [[Wikipedia:System partition and boot partition]] をご覧ください。}}
このセクションでは、あなたの Windows パーティションは {{ic|/dev/sda1}} だと仮定しています。違うパーティションを使っている場合は全ての {{ic|hd0,msdos1}} を修正しなくてはなりません。最初に、{{ic|bootmgr}} と関連ファイルがある Windows のシステムパーティションの NTFS ファイルシステムの UUID を見つけて下さい。例えば、Windows の {{ic|bootmgr}} が {{ic|/media/SYSTEM_RESERVED/bootmgr}} に存在する場合:
 
   
  +
このセクションを通して Windows のパーティションは {{ic|/dev/sda1}} にあると仮定します。パーティションが異なる場合は {{ic|hd0,msdos1}} という記述をすべて変更してください。
Windows Vista/7/8 では:
 
   
  +
{{Note|以下のメニューエントリは BIOS ブートモードでのみ機能します。UEFI モードでインストールされた GRUB では機能しません。[[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]] と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}
# grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr
 
69B235F6749E84CE
 
   
  +
両方の例で {{ic|''XXXX-XXXX''}} はファイルシステムの UUID を表しています。UUID は {{ic|lsblk --fs}} コマンドを使って得られます。実際の UUID に置き換えてください。
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr
 
--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
 
   
  +
Windows Vista/7/8/8.1/10 では:
{{Note|Windows XP では、上記のコマンドにある {{ic|bootmgr}} を {{ic|NTLDR}} に置き換えて下さい。さらに、SYSTEM_RESERVED パーティションは存在しない可能性があることに注意してください; あなたの Windows パーティション上に NTLDR ファイルがないか調べて下さい。}}
 
   
  +
{{bc|1=
次に、BIOS-MBR モードでインストールされた Windows (XP, Vista, 7, 8) を起動するために下のコードを {{ic|/etc/grub.d/40_custom}} か {{ic|/boot/grub/custom.cfg}} に追加して、上で説明したように {{ic|grub-mkconfig}} を使って {{ic|grub.cfg}} を再生成してください:
 
  +
if [ "${grub_platform}" == "pc" ]; then
 
Windows Vista/7/8/8.1 では:
+
menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
  +
insmod part_msdos
 
  +
insmod ntfs
if [ "${grub_platform}" == "pc" ]; then
 
  +
insmod ntldr
menuentry "Microsoft Windows Vista/7/8/8.1 BIOS-MBR" {
 
  +
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 ''XXXX-XXXX''
insmod part_msdos
 
  +
ntldr /bootmgr
insmod ntfs
 
  +
}
insmod search_fs_uuid
 
  +
fi
insmod ntldr
 
  +
}}
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
 
ntldr /bootmgr
 
}
 
fi
 
   
 
Windows XP では:
 
Windows XP では:
   
  +
{{bc|1=
if [ "${grub_platform}" == "pc" ]; then
 
  +
if [ "${grub_platform}" == "pc" ]; then
menuentry "Microsoft Windows XP" {
 
  +
menuentry "Microsoft Windows XP" {
insmod part_msdos
 
insmod ntfs
+
insmod part_msdos
insmod search_fs_uuid
+
insmod ntfs
insmod ntldr
+
insmod ntldr
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
+
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 ''XXXX-XXXX''
ntldr /bootmgr
+
ntldr /ntldr
}
+
}
fi
+
fi
  +
}}
   
{{Note|たまに (Windows 8 で GRUB をインストールした場合など)、{{ic|\boot\bcd}} でエラーが起こって Windows を起動できなくなることがあります (エラーコード {{ic|0xc000000f}})。Windows 回復コンソール (インストールディスクから cmd) 使って以下を実行することで修復することが可能です:
+
{{Note|GRUB をインストールすると Windows 8 が汚染される場合があります。この場合、{{ic|\boot\bcd}} (エラーコード {{ic|0xc000000f}})のエラーにより Windows が起動できなくなりますこれを直すには Windows 回復コンソール(インストールディスク上にある {{ic|cmd.exe}})を開い以下を実行してください:
x:\> "bootrec.exe /fixboot"
 
x:\> "bootrec.exe /RebuildBcd".
 
{{ic|bootrec.exe /Fixmbr}} を使わないで下さい、GRUB が消去されてしまいます。}}
 
   
  +
X:\> bootrec.exe /fixboot
{{ic|/etc/grub.d/40_custom}} をテンプレートとして使って {{ic|/etc/grub.d/nn_custom}} を作成することができます。{{ic|nn}} は優先順位を定義し、スクリプトが実行される順番を示します。スクリプトが実行される順番で grub のブートメニューの場所が決まります。
 
  +
X:\> bootrec.exe /RebuildBcd
   
  +
{{ic|bootrec.exe /Fixmbr}} を'''実行しない'''でください。GRUB が吹き飛びます。
{{Note|最初に必要なスクリプトが実行されるように {{ic|nn}} は 06 よりも大きな値にするべきです。}}
 
  +
あるいは、トラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。
  +
また、対象のハードドライブとブート可能ドライブの両方'''だけ'''を接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。
  +
}}
   
==== EasyBCD と NeoGRUB を使って Windows とデュアルブート ====
+
===== ラベルを使 =====
   
  +
{{ic|search}} コマンドに対して {{ic|--label}} オプションを使えば、ファイルシステムに付けられた人間が読みやすい文字列であるラベルを使うことができます。まずはじめに、[[永続的なブロックデバイスの命名#by-label|ファイルシステムにラベルがあることを確認]]してください。
現在 EasyBCD の NeoGRUB は GRUB のメニューフォーマットを認識しないので、{{ic|C:\NST\menu.lst}} ファイルの中身を以下のように置き換えることでチェインロードしてください:
 
   
  +
そして、ラベルを使ってエントリを追加してください。例えば:
default 0
 
timeout 1
 
 
title Chainload into GRUB v2
 
root (hd0,7)
 
kernel /boot/grub/i386-pc/core.img
 
 
そして、{{ic|grub-mkconfig}} を使って {{ic|grub.cfg}} を再生成してください。
 
 
=== GRUB から ISO を直接起動する ===
 
 
{{ic|/etc/grub.d/40_custom}} か {{ic|/boot/grub/custom.cfg}} を編集して対象の ISO のエントリを追加してください。編集したら、通常通り {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を (root で) 実行して GRUB メニューを更新してください。
 
 
==== Arch ISO ====
 
 
{{Note|以下の例では ISO が {{ic|hd0,6}} 上の {{ic|/archives}} にあると仮定しています。}}
 
{{Tip|USB メモリーでは、{{ic|(hd1,$partition)}} のように指定してください。{{ic|img_dev}} パラメータには {{ic|/dev/sdb'''Y'''}} や[[Persistent_block_device_naming|永続的な名前]] (例: {{ic|img_dev&#61;/dev/disk/by-label/CORSAIR}}) を使って下さい。}}
 
 
===== x86_64 =====
 
 
menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
 
set isofile="/archives/archlinux-2013.05.01-dual.iso"
 
set partition="6"
 
loopback loop (hd0,$partition)/$isofile
 
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
 
initrd (loop)/arch/boot/x86_64/archiso.img
 
}
 
 
===== i686 =====
 
 
menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
 
set isofile="/archives/archlinux-2013.05.01-dual.iso"
 
set partition="6"
 
loopback loop (hd0,$partition)/$isofile
 
linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
 
initrd (loop)/arch/boot/i686/archiso.img
 
}
 
 
==== Ubuntu ISO ====
 
 
{{Note|この例では ISO が {{ic|hd0,6}} 上の {{ic|/archives}} にあると仮定しています。必要に応じて hdd やパーティションの位置を調整する必要があります。}}
 
 
menuentry "ubuntu-13.04-desktop-amd64.iso" {
 
set isofile="/archives/ubuntu-13.04-desktop-amd64.iso"
 
loopback loop (hd0,6)/$isofile
 
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --
 
initrd (loop)/casper/initrd.lz
 
}
 
 
menuentry "ubuntu-12.04-desktop-amd64.iso" {
 
set isofile="/archives/ubuntu-12.04-desktop-amd64.iso"
 
loopback loop (hd0,6)/$isofile
 
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --
 
initrd (loop)/casper/initrd.lz
 
}
 
 
==== 他の ISO ====
 
 
他の設定は http://askubuntu.com/questions/141940/how-to-boot-live-iso-images にあります。
 
 
=== LVM ===
 
 
[[LVM (日本語)|LVM]] を {{ic|/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 ボリュームの便利な制御機能があります。ボリュームをネイティブに指定できる {{ic|insmod mdraid}} を追加する必要があります。例えば、{{ic|/dev/md0}} は次のようになります:
 
set root=(md/0)
 
 
一方パーティション済みの RAID ボリューム (例: {{ic|/dev/md0p1}}) は次のとおりです:
 
set root=(md/0,1)
 
 
RAID1 を GPT ef02/'BIOS boot partition' のドライブ上の、{{ic|/boot}} パーティション (もしくは RAID1 root パーティション上の {{ic|/boot}}) で使っている場合に grub をインストールするには、ドライブの両方で ''ic|grub-install'' を実行するだけです。例:
 
# grub-install --target=i386-pc --recheck --debug /dev/sda
 
# grub-install --target=i386-pc --recheck --debug /dev/sdb
 
ここで {{ic|/boot}} がある RAID1 アレイは {{ic|/dev/sda}} と {{ic|/dev/sdb}} に収容されます。
 
 
=== ラベルを使う ===
 
 
{{ic|--label}} オプションを {{ic|search}} に使うことで、人間が読めるラベルをファイルシステムに付けることができます。まず最初に、既存のパーティションにラベリングしてください:
 
# tune2fs -L ''LABEL'' ''PARTITION''
 
 
次に、ラベルを使ってエントリを追加してください。例:
 
   
 
menuentry "Arch Linux, session texte" {
 
menuentry "Arch Linux, session texte" {
866行目: 596行目:
 
}
 
}
   
  +
== コマンドシェルを使う ==
=== GRUB メニューのパスワード保護 ===
 
   
  +
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは {{ic|/boot/grub}} 内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合)、GRUB が起動に失敗する場合があります。このとき、コマンドシェルが表示されます。
ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名・パスワードの組み合わせを追加することができます。これをするには、{{ic|grub-mkpasswd-pbkdf2}} コマンドを実行してください。パスワードを入力して確認してください:
 
   
  +
GRUB は複数のシェル/プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、おそらく "normal" シェルに落とされるでしょう:
{{hc|grub-mkpasswd-pbkdf2|
 
[...]
 
Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A
 
}}
 
次に、以下を {{ic|/etc/grub.d/40_custom}} に追加して下さい:
 
{{hc|/etc/grub.d/40_custom|2=
 
set superusers="'''username'''"
 
password_pbkdf2 '''username''' '''<password>'''
 
}}
 
{{ic|<password>}} は {{ic|grub-mkpasswd_pbkdf2}} によって生成された文字列に置き換えてください。
 
   
  +
grub>
設定ファイルを再生成すれば、GRUB コマンドライン、ブートパラメータ、そしてブートエントリには全てプロテクトがかけられます。
 
   
  +
さらに深刻な問題 (例: GRUB が必要なファイルを見つけられないなど) があるときは、代わりに "rescue" シェルに落とされるでしょう:
この制限は [https://www.gnu.org/software/grub/manual/grub.html#Security GRUB manual] の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。
 
   
  +
grub rescue>
=== Shift キーが押されていない時は GRUB を隠す ===
 
   
  +
rescue シェルは通常のシェルの制限されたサブセットで、使える機能が非常に少なくなっています。rescue シェルが出てきた時は、まず "normal" モジュールの挿入を試して、"normal" シェルを起動してみて下さい:
起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に {{ic|Shift}} キーが押されていない限り、GRUB にメニューを隠させるということが可能です。
 
   
これをするためには、次の行を {{ic|/etc/default/grub}} に追加する必要があります:
 
 
GRUB_FORCE_HIDDEN_MENU="true"
 
 
そして下のファイルを作成してください:
 
 
{{hc|/etc/grub.d/31_hold_shift|<nowiki>
 
 
#! /bin/sh
 
set -e
 
 
# grub-mkconfig helper script.
 
# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
 
#
 
# GRUB is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# GRUB is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
 
 
prefix="/usr"
 
exec_prefix="${prefix}"
 
datarootdir="${prefix}/share"
 
 
export TEXTDOMAIN=grub
 
export TEXTDOMAINDIR="${datarootdir}/locale"
 
source "${datarootdir}/grub/grub-mkconfig_lib"
 
 
found_other_os=
 
 
make_timeout () {
 
 
if [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then
 
if [ "x${1}" != "x" ] ; then
 
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
 
verbose=
 
else
 
verbose=" --verbose"
 
fi
 
 
if [ "x${1}" = "x0" ] ; then
 
cat <<EOF
 
if [ "x\${timeout}" != "x-1" ]; then
 
if keystatus; then
 
if keystatus --shift; then
 
set timeout=-1
 
else
 
set timeout=0
 
fi
 
else
 
if sleep$verbose --interruptible 3 ; then
 
set timeout=0
 
fi
 
fi
 
fi
 
EOF
 
else
 
cat << EOF
 
if [ "x\${timeout}" != "x-1" ]; then
 
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
 
set timeout=0
 
fi
 
fi
 
EOF
 
fi
 
fi
 
fi
 
}
 
 
adjust_timeout () {
 
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
 
cat <<EOF
 
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
 
EOF
 
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
 
echo else
 
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
 
echo fi
 
else
 
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
 
fi
 
}
 
 
adjust_timeout
 
 
cat <<EOF
 
if [ "x\${timeout}" != "x-1" ]; then
 
if keystatus; then
 
if keystatus --shift; then
 
set timeout=-1
 
else
 
set timeout=0
 
fi
 
else
 
if sleep$verbose --interruptible 3 ; then
 
set timeout=0
 
fi
 
fi
 
fi
 
EOF
 
</nowiki>}}
 
 
ファイルに実行可能属性を付与して grub の設定を再生成してください:
 
# chmod a+x /etc/grub.d/31_hold_shift
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
 
=== UUID の使用と基本的なスクリプトの混合 ===
 
 
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります:
 
 
menuentry "Arch Linux 64" {
 
# Set the UUIDs for your boot and root partition respectively
 
set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07
 
set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a
 
 
# (Note: This may be the same as your boot partition)
 
 
# Get the boot/root devices and set them in the root and grub_boot variables
 
search --fs-uuid $the_root_uuid --set=root
 
search --fs-uuid $the_boot_uuid --set=grub_boot
 
 
# Check to see if boot and root are equal.
 
# If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)
 
if [ $the_boot_uuid == $the_root_uuid ] ; then
 
set grub_boot=($grub_boot)/boot
 
else
 
set grub_boot=($grub_boot)
 
fi
 
 
# $grub_boot now points to the correct location, so the following will properly find the kernel and initrd
 
linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro
 
initrd $grub_boot/initramfs-linux.img
 
}
 
 
== コマンドシェルを使う ==
 
 
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは {{ic|/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> set prefix=(hdX,Y)/boot/grub
 
grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod
 
grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod
 
rescue:grub> normal
 
rescue:grub> normal
   
=== Pager サポート ===
+
=== ページャのサポート ===
  +
  +
GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい:
   
GRUB は pager をサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。pager を有効にするには、GRUB コマンドシェルで次を入力して下さい:
 
 
sh:grub> set pager=1
 
sh:grub> set pager=1
   
 
=== コマンドシェル環境を使ってオペレーティングシステムを起動する ===
 
=== コマンドシェル環境を使ってオペレーティングシステムを起動する ===
   
grub>
+
grub>
   
 
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。
 
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。
1,059行目: 629行目:
 
''チェインロード''は現在のブートローダから別のブートローダをロードすることを意味します。
 
''チェインロード''は現在のブートローダから別のブートローダをロードすることを意味します。
   
他のブートローダはディスクの最初 (MBR) やパーティションの最初埋め込むことができます。
+
他のブートローダ、パーティショニングされたディスク (MBR) の先頭パーティションレスディスク (VBR) パーティションの先頭組み込んだり、あるいは UEFI の場合は EFI バイナリとして組み込むことができます。
   
==== パーティションのチェインロード ====
+
==== パーティションの VBR をチェインロード ====
   
 
set root=(hdX,Y)
 
set root=(hdX,Y)
1,078行目: 648行目:
 
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。
 
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。
   
==== ディスクやドライブのチェインロード ====
+
==== ディスクの MBR パーティションレスディスク VBR をチェインロード ====
   
 
set root=hdX
 
set root=hdX
1,084行目: 654行目:
 
boot
 
boot
   
==== 通常のロード ====
+
==== UEFI モードでインストールされた Windows/Linux チェインロード ====
   
  +
insmod fat
[[#rescue コンソールを使う]] の例を見て下さい。
 
  +
set root=(hd0,gpt4)
  +
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
  +
boot
   
  +
{{ic|insmod fat}} は、EFI システムパーティション上の Windows ブートローダーにアクセするために、FAT ファイルシステムモジュールをロードするために使用されます。
== GUI 設定ツール ==
 
  +
{{ic|(hd0,gpt4)}} (すなわち {{ic|/dev/sda4}}) は、この例における EFI システムパーティションです。
  +
{{ic|chainloader}} 行のエントリは、チェインロードすべき ''.efi'' ファイルへのパスを指定しています。
   
  +
==== 通常のロード ====
以下のパッケージがインストール可能です:
 
* {{App|grub-customizer|ブートローダー (GRUB や BURG) のカスタマイズ|https://launchpad.net/grub-customizer|{{AUR|grub-customizer}}}}
 
* {{App|grub2-editor|GRUB ブートローダー設定の KDE4 コントロールモジュール|http://kde-apps.org/content/show.php?content&#61;139643|{{AUR|grub2-editor}}}}
 
* {{App|kcm-grub2|この Kcm モジュールは GRUB の基本的な設定を管理します|http://kde-apps.org/content/show.php?content&#61;137886|{{AUR|kcm-grub2}}}}
 
* {{App|startupmanager|GRUB Legacy, GRUB, Usplash, Splashy の設定を変更できる GUI アプリ ([https://launchpad.net/startup-manager/+announcement/8300 開発停止])|http://sourceforge.net/projects/startup-manager/|{{AUR|startupmanager}}}}
 
   
  +
[[#rescue コンソールを使う]] の例を見て下さい。
== parttool for hide/unhide ==
 
   
  +
=== rescue コンソールを使う ===
{{ic|C:\}} ディスクを隠している Windows 9x がある場合、GRUB は {{ic|parttool}} を使ってディスクを隠したり表示したりすることができます。例えば、3つの Windows 9x インストールがあり3番目の {{ic|C:\}} ディスクを起動するには CLI に入り以下を実行してください:
 
parttool hd0,1 hidden+ boot-
 
parttool hd0,2 hidden+ boot-
 
parttool hd0,3 hidden- boot+
 
set root=hd0,3
 
chainloader +1
 
boot
 
 
== rescue コンソールを使う ==
 
   
 
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。
 
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。
   
GRUB rescue で利用できるコマンドには {{ic|insmod}}, {{ic|ls}}, {{ic|set}}, {{ic|unset}} があります。この例では {{ic|set}} と {{ic|insmod}} を使います。{{ic|set}} は変数を修正し {{ic|insmod}} は新しいモジュールを挿入して機能を追加します。
+
GRUB rescue で利用できるコマンドには {{ic|insmod}}{{ic|ls}}{{ic|set}}{{ic|unset}} があります。この例では {{ic|set}} と {{ic|insmod}} を使います。{{ic|set}} は変数を変更し {{ic|insmod}} は新しいモジュールを挿入して機能を追加します。
   
 
始める前に、ユーザーは自分の {{ic|/boot}} パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):
 
始める前に、ユーザーは自分の {{ic|/boot}} パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):
grub rescue> set prefix=(hdX,Y)/boot/grub
 
   
  +
grub rescue> set prefix=(hd''X'',''Y'')/boot/grub
X は物理ドライブ番号、Y はパーティション番号に置き換えてください。
 
  +
  +
{{ic|''X''}} は物理ドライブ番号、{{ic|''Y''}} はパーティション番号に置き換えてください。
  +
  +
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hd''X'',''Y'')/grub}} と入力する)。}}
   
 
コンソールの機能を拡張するために、{{ic|linux}} モジュールを挿入します:
 
コンソールの機能を拡張するために、{{ic|linux}} モジュールを挿入します:
  +
 
grub rescue> insmod i386-pc/linux.mod
 
grub rescue> insmod i386-pc/linux.mod
   
  +
もしくは、単純に:
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hdX,Y)/grub}} と入力する)。}}
 
  +
  +
grub rescue> insmod linux
  +
  +
これで、より親しみのあるであろう {{ic|linux}} と {{ic|initrd}} のコマンドが使えます。
   
  +
例えば、Arch Linux を起動する場合:
これで {{ic|linux}} と {{ic|initrd}} コマンドが使えます、これらのコマンドは慣れているはずです ([[#高度な設定]] を見て下さい)。
 
   
例えば、Arch Linux を起動:
 
 
set root=(hd0,5)
 
set root=(hd0,5)
 
linux /boot/vmlinuz-linux root=/dev/sda5
 
linux /boot/vmlinuz-linux root=/dev/sda5
1,130行目: 700行目:
 
boot
 
boot
   
boot パーティションを分割しているなら、行を変更する必要があります:
+
boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります:
  +
  +
{{Note|boot は別のパーティションであり、ルートパーティションの一部ではないので、上の prefix 変数と同じような形式で boot パーティションを手動で指定する必要があります。}}
  +
 
set root=(hd0,5)
 
set root=(hd0,5)
linux /vmlinuz-linux root=/dev/sda6
+
linux (hd''X'',''Y'')/vmlinuz-linux root=/dev/sda6
initrd /initramfs-linux.img
+
initrd (hd''X'',''Y'')/initramfs-linux.img
 
boot
 
boot
   
1,140行目: 713行目:
 
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。
 
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。
   
GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更します。詳しくは [[#インストール]] を見て下さい。
+
GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更してください。詳しくは [[#インストール]] を見て下さい。
   
  +
== GRUB を消去 ==
== トラブルシューティング ==
 
   
  +
=== UEFI システム ===
=== Intel BIOS が GPT をブートしない ===
 
   
  +
''grub'' を削除する前に、他のブートローダがインストールされていて、GRUB の後を引き継ぐように設定されていることを確認してください。
==== MBR ====
 
   
  +
{{hc|$ efibootmgr|
Intel BIOS によっては起動時に最低でも1つ起動可能な MBR パーティションが必要なため、GPT でパーティションされたブートセットアップが起動できなくなることがあります。
 
  +
BootOrder: 0003,0001,0000,0002
  +
Boot0000* Windows Boot Manager HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)
  +
Boot0001* GRUB HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi)
  +
Boot0002* Linux-Firmware-Updater HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi)
  +
Boot0003* Linux Boot Manager HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)
  +
}}
   
  +
{{ic|BootOrder}} で ''grub'' が最初のエントリになっている場合、[[systemd-boot]] などの他のブートローダをインストールして最初のエントリにしてください。その後、''bootnum'' を使って ''grub'' を削除することができます。
この問題は fdisk を使って GPT パーティションのひとつ (GRUB のために作成した 1007 KiB のパーティションが好ましい) を MBR でブータブルだと印をつけることで回避できます。fdisk を使って次のコマンドを実行してください: fdisk をインストールするディスクで起動し (例: {{ic|fdisk /dev/sda}})、{{ic|a}} を押してから数字を入力してブータブルにしたいパーティション (おそらく #1) を選択してください。最後に {{ic|w}} を押して変更を MBR に書き込みます。
 
   
  +
# efibootmgr --delete-bootnum -b 1
{{Note|ブータブルの設定は GParted ではなく、{{ic|fdisk}} などで行う必要があります。GParted は MBR で bootable フラグを設定しないからです。}}
 
   
  +
また、{{ic|''esp''/EFI/grub}} と {{ic|/boot/grub}} ディレクトリも削除してください。
詳細は [http://www.rodsbooks.com/gdisk/bios.html ここ] から見ることができます。
 
   
==== EFI ====
+
=== BIOS テム ===
   
  +
''grub'' を他の BIOS ブートローダに置き換えるには、単に新しいブートローダをインストールしてください (そうすることで、[[パーティショニング#Master Boot Record (bootstrap code)|MBR ブートコード]]が上書きされます)。
UEFI ファームウェアによっては UEFI NVRAM ブートエントリを表示する前に特定の場所にブータブルファイルを必要とします。この場合、{{ic|grub-install}} は {{ic|efibootmgr}} に GRUB をブートするエントリを追加するように指示しますが、VisualBIOS のブートオーダーセレクタではエントリが表示されません。解決方法は特定の場所にファイルを配置することです。EFI パーティションが {{ic|/boot/efi/}} の場合、以下のコマンドで解決します:
 
   
  +
{{ic|grub-install}} は {{ic|/boot/grub}} ディレクトリを作成するので、これは手動で削除する必要があります。しかし、''grub'' をまたインストールするかもしれない場合は、このディレクトリを残しておいたほうが良いかもしれません。
mkdir /boot/efi/EFI/boot
 
cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
 
   
  +
UEFI/GPT に移行した後は、[[dd#ブートローダーの削除|dd を使って MBR ブートコードを削除する]]ことができます。
この解決方法は2014年1月、Intel DH87MC マザーボードのファームウェアで確認しました。
 
   
  +
== トラブルシューティング ==
=== デバッグメッセージを有効にする ===
 
   
  +
=== サポートのないファイルシステム ===
以下を {{ic|grub.cfg}} に追加してください:
 
 
set pager=1
 
set debug=all
 
   
  +
GRUB が root のファイルシステムをサポートしていない場合、代替の {{ic|/boot}} パーティションをサポートのあるファイルシステムで作成する必要があります。​開発バージョンの GRUB である {{aur|grub-git}} が該当するファイルシステムをネイティブサポートしている場合があります。
=== "No suitable mode found" エラー ===
 
   
  +
サポートされないファイルシステムで GRUB を使用した場合、ドライブの [[UUID]] を抽出できないため、GRUB は古典的で非永続的な {{ic|/dev/''sdXx''}} 名を使います。この場合、{{ic|/boot/grub/grub.cfg}} を手動で編集し、{{ic|1=root=/dev/''sdXx''}} を {{ic|1=root=UUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''}} のように置き換える必要があるかもしれません。{{ic|blkid}} コマンドを使えばデバイスの UUID を得られます。[[永続的なブロックデバイスの命名]] を見てください。
メニューエントリのどれかを起動したときに以下のエラーが表示される場合:
 
   
  +
GRUB はバージョン 2.0.4 より [[F2FS]] をサポートしていますが、{{ic|extra_attr}} フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。
error: no suitable mode found
 
Booting however
 
   
  +
=== デバッグメッセージを有効にする ===
GRUB の正しいビデオモード ({{ic|gfxmode}}) を使って GRUB グラフィカルターミナル ({{ic|gfxterm}}) を初期化する必要があります。このビデオモードは 'gfxpayload' を使って GRUB から linux カーネルに渡されます。UEFI 環境の場合、GRUB のビデオモードが初期化されないと、端末にカーネルのブートメッセージが (少なくとも KMS が有効になるまで) 全く表示されません。
 
   
  +
{{Note|この変更は[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]すると上書きされます。}}
{{ic|/usr/share/grub/unicode.pf2}} を ${GRUB_PREFIX_DIR} (BIOS と UEFI システムの場合 {{ic|/boot/grub/}}) にコピーしてください。GRUB UEFI をインストールしたときに {{ic|1=--boot-directory=$esp/EFI}} を設定したときは、ディレクトリは {{ic|$esp/EFI/grub/}} になります:
 
   
  +
以下を {{ic|grub.cfg}} に追加してください:
# cp /usr/share/grub/unicode.pf2 ${GRUB_PREFIX_DIR}
 
   
  +
set pager=1
{{ic|/usr/share/grub/unicode.pf2}} が存在しないときは、{{Pkg|bdf-unifont}} をインストールして、{{ic|unifont.pf2}} ファイルを作成し {{ic|${GRUB_PREFIX_DIR<nowiki>}</nowiki>}} にコピーしてください:
 
  +
set debug=all
   
  +
=== msdos-style エラーメッセージ ===
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf
 
   
  +
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!
次に、{{ic|grub.cfg}} ファイルの中に、以下の行を追加して GRUB がカーネルに正しくビデオモードを渡すようにしてください。どちらかがないと黒画面 (出力なし) になりますが起動は問題なく (フリーズせずに) 進みます。
 
  +
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 をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。
BIOS システム:
 
   
  +
=== UEFI ===
insmod vbe
 
   
  +
==== よくあるインストール時のエラー ====
UEFI システム:
 
   
  +
* 一部の UEFI デバイスで起こりうるエラーは、{{ic|Could not prepare Boot variable: Read-only file system}} です。{{ic|/sys/firmware/efi/efivars}} を読み書き可能な状態で再マウントする必要があります。{{bc|# mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars}} [[ブートローダー]]のインストールに関しては [[Gentoo:Handbook:AMD64/Installation/Bootloader#Install|Gentoo Wiki]] を見てください。
insmod efi_gop
 
  +
* ''sysfs'' か ''procfs'' がある状態で ''grub-install'' を実行すると問題が発生し、{{ic|modprobe efivarfs}} を実行しなければならないと言われる場合、[[Unified Extensible Firmware Interface#efivarfs のマウント|efivarfs をマウント]]して上記のコマンドを実行してみてください。
insmod efi_uga
 
  +
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。
  +
* grub-install の実行後に {{ic|error: ''esp'' doesn't look like an EFI partition}} と表示される場合、おそらくパーティションが [[FAT32]] でフォーマットされていません。
   
  +
==== ファームウェアブートマネージャーに GRUB エントリを作成する ====
その後以下のコードを追加してください (BIOS と UEFI 両方で共通):
 
   
  +
{{ic|grub-install}} は自動的にブートマネージャーにメニューエントリを追加しようと試みます。もし GRUB がそれを行わない場合、[[UEFI#efibootmgr]] を見て、{{ic|efibootmgr}} を使ってメニューエントリを作成する指示を読んでください。しかし、[[UEFI#ISO から UEFI ブータブル USB を作成する]] にあるように、よくある原因は CD/USB を UEFI モードで起動していないというものです。
insmod font
 
   
  +
GRUB エントリをファームウェアブートマネージャに作成する例として、{{ic|efibootmgr -c}} を考えてみましょう。これは、{{ic|/dev/sda1}} が EFI システムパーティションであり、{{ic|/boot/efi}} にマウントされていると仮定します。これは {{ic|efibootmgr}} のデフォルトの挙動です。このツールは、("Linux" という名前の) 新しいブートオプションを作成し、それをブート順序リストの1番目に配置します。オプションを渡すことでデフォルトの挙動を変更できます。デフォルトの OS ローダーは {{ic|\EFI\arch\grub.efi}} です。
if loadfont ${prefix}/fonts/unicode.pf2
 
then
 
insmod gfxterm
 
set gfxmode=auto
 
set gfxpayload=keep
 
terminal_output gfxterm
 
fi
 
   
  +
==== レスキューシェルが起動する ====
gfxterm (graphical terminal) が正しく動作すれば、{{ic|unicode.pf2}} フォントファイルは {{ic|${GRUB_PREFIX_DIR<nowiki>}</nowiki>}} にあるはずです。
 
   
  +
GRUB はロードされたが、エラーが表示されずにレスキューシェルに落とされる場合、以下の2つの理由のうち1つが原因である可能性があります:
=== msdos-style エラーメッセージ ===
 
   
  +
* {{ic|grub.cfg}} が存在しないか、場所を間違えている。{{ic|--boot-directory}} を使って GRUB UEFI をインストールして、{{ic|grub.cfg}} が存在しない場合に起こります。
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!
 
  +
* ブートパーティションが変更された ({{ic|grubx64.efi}} ファイルにハードコードされています)。
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.
 
   
  +
==== GRUB UEFI がロードされない ====
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。
 
 
=== GRUB UEFI がシェルを起動する ===
 
 
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。
 
   
  +
有効な UEFI の例:
=== GRUB UEFI がロードされない ===
 
   
  +
{{hc|# efibootmgr -u|
EFI の動作の例:
 
{{hc|# efibootmgr -v|
 
 
BootCurrent: 0000
 
BootCurrent: 0000
 
Timeout: 3 seconds
 
Timeout: 3 seconds
 
BootOrder: 0000,0001,0002
 
BootOrder: 0000,0001,0002
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi)
+
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi)
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi)
+
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi)
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
+
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
 
}}
 
}}
   
画面が数秒間真っ暗になってその後次のブートオプションが試行される場合、[https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 この投稿]によると、GRUB を root パーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:
+
画面が数秒間真っ暗になってその後次のブートオプションが試行される場合、[https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 この投稿]によると、GRUB をルートパーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:
  +
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)
 
  +
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grubx64.efi)
  +
  +
==== デフォルト/フォールバックのブートパス ====
  +
  +
一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、{{ic|grub-install}} が、GRUB を起動するエントリが {{ic|efibootmgr}} によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです:
  +
  +
# 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 ===
 
=== Invalid signature ===
   
(パーティションを再設定したりハードドライブを追加した) Windows を起動しようとしたときに "invalid signature" エラーが起こる場合、GRUB のデバイス設定を移動削除再設定てください:
+
(例えば、パーティションを再設定したり、追加のハードドライブを追加したりしたあとで) Windows を起動しようとし "invalid signature" エラーが発生する場合、GRUB のデバイス設定を移動 (削除) 、GRUB に再設定させてください:
  +
 
# mv /boot/grub/device.map /boot/grub/device.map-old
 
# mv /boot/grub/device.map /boot/grub/device.map-old
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
  +
 
これで {{ic|grub-mkconfig}} は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、{{ic|/boot/grub/device.map-old}} は削除してください。
 
これで {{ic|grub-mkconfig}} は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、{{ic|/boot/grub/device.map-old}} は削除してください。
   
 
=== 起動中にフリーズする ===
 
=== 起動中にフリーズする ===
   
GRUB がカーネルと initial ramdisk をロードした後、エラーを出さずにトが固まる場合、{{ic|add_efi_memmap}} カーネルパラメータを取りてみてください。
+
GRUB がカーネルと初期 RAM ディスクをロードした後、エラーメッセージが表示ずにフリズする場合、{{ic|add_efi_memmap}} カーネルパラメータをてみてください。
   
  +
=== 他の OS から Arch が見つからない ===
=== GRUB Legacy のリストア ===
 
   
  +
他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[公式リポジトリ]]にある {{Pkg|lsb-release}} パッケージから利用可能です。
* GRUB v2 のファイルをどけてください:
 
   
  +
=== chroot でインストールした時に警告が表示される ===
# mv /boot/grub /boot/grub.nonfunctional
 
   
  +
(システムのインストール中などに) chroot 環境で LVM システム上に GRUB をインストールする際に、以下のような警告が発生する場合があります:
* GRUB Legacy を {{ic|/boot}} にコピーしてください:
 
   
  +
/run/lvm/lvmetad.socket: connect failed: No such file or directory
# cp -af /boot/grub-legacy /boot/grub
 
   
  +
または
* MBR と sda の次の 62 セクタをバックアップしたコピーで置き換えて下さい:
 
   
  +
WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning.
{{Warning|このコマンドはパーティションテーブルも復元するので、古いパーティションテーブルで修正済みのパーティションテーブルを上書きすることに注意してください。あなたのシステムが'''破壊されます'''。}}
 
   
  +
これは、{{ic|/run}} が chroot 内で利用可能でないから起こります。すべてが正しく行われていれば、これらの警告のせいでシステムが起動できなくなることはありません。インストールを継続することができます。
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
 
   
  +
=== GRUB のロードが遅い ===
MBR のブートコードだけをリストアするとより安全です:
 
   
  +
ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 {{ic|/boot}} や {{ic|/}} に十分な空き容量があるか確認してください。
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
 
   
  +
=== error: unknown filesystem ===
=== 他の OS から Arch が見つからない ===
 
   
  +
GRUB が {{ic|error: unknown filesystem}} と出力して起動しない理由はいくつか考えられます。[[UUID]] が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、[[#GUID Partition Table (GPT) 特有の手順|BIOS Boot Partition]] がドライブの最初の 2TB の中にない可能性があります [https://bbs.archlinux.org/viewtopic.php?id=195948]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。
他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[Official Repositories (日本語)|公式リポジトリ]]にある {{pkg|lsb-release}} パッケージから利用可能です。
 
   
  +
また、このエラーは [[ext4]] ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません:
=== メニューエントリが重複する ===
 
  +
* {{ic|large_dir}} - サポートされません。
GRUB を新規インストールすると重複するメニューエントリが生成される可能性があります。これは grub-mkconfig が実行されたときに上流のデフォルトの {{ic|/etc/grub.d/10_linux}} スクリプトと Arch の {{ic|/etc/grub.d/10_archlinux}} スクリプトがメニューエントリを作成するためです。これを修正するには 10_linux スクリプトを無効にしてもう一度 grub-mkconfig コマンドを実行してください。
 
  +
* {{ic|metadata_csum_seed}} - GRUB 2.11 でサポートされます ([https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 コミット]).
# chmod -x /etc/grub.d/10_linux
 
  +
# grub-mkconfig -o /boot/grub/grub.cfg
 
  +
{{Warning| {{ic|/boot}} ファイルシステム上で[[ファイルシステム]]の新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。}}
  +
  +
=== grub-reboot で再設定されない ===
  +
  +
GRUB は Btrfs のルートパーティションに書き込むを行うことができません [https://bbs.archlinux.org/viewtopic.php?id=166131]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。{{ic|grub-editenv create}} を実行して {{ic|/etc/default/grub}} に {{ic|GRUB_DEFAULT<nowiki>=</nowiki>0}} を設定することでエントリをリセットできます (設定後は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を行ってください)。
  +
  +
=== 古い Btrfs のせいでインストールができない ===
  +
  +
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: {{ic|/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' does not support blocklists.
  +
  +
ドライブを完全に消去してもいいですが、{{ic|wipefs -o 0x10040 /dev/sdx}} を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。
  +
  +
=== Windows 8/10 が認識されない ===
  +
  +
Windows 8/10 の "高速スタートアップ"、"ハイブリッドブート"、"Hiberboot" と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができなくなる可能性があります。そのため {{ic|grub-mkconfig}} が Windows を認識することができなくなります。Windows で高速スタートアップを無効化することで GRUB のメニューに追加することができるようになるはずです。
  +
  +
=== grub-rescue プロンプトと暗号化済み /boot ===
  +
  +
[[#暗号化された /boot|暗号化済みの /boot]] を使用している場合に間違ったパスワードを入力してしまうと grub-rescue プロンプトに入ります。
  +
  +
この grub-rescue プロンプトではできることが限られています。以下のコマンドを使ってブートを完了させます:
  +
  +
{{bc|
  +
grub rescue> cryptomount <partition>
  +
grub rescue> insmod normal
  +
grub rescue> normal
  +
}}
  +
  +
より良い説明は[https://blog.stigok.com/2017/12/29/decrypt-and-mount-luks-disk-from-grub-rescue-mode.html このブログ投稿]{{Dead link|2023|04|23|status=404}}をご覧ください。
  +
  +
=== GRUB をインストールしたが起動時にメニューが表示されない ===
  +
  +
{{ic|/etc/default/grub}} を見て {{ic|GRUB_TIMEOUT}} が {{ic|0}} に設定されていないかチェックしてください。{{ic|0}} に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。{{ic|GRUB_TIMEOUT_STYLE}} が {{ic|hidden}} に設定されていないかもチェックしてください。{{ic|hidden}} に設定されていた場合、{{ic|menu}} に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]して、再起動してメニューが表示されるか確かめてください。
  +
  +
これでうまく行かない場合、グラフィカルターミナルとの互換性の問題があるのかもしれません。{{ic|/etc/default/grub}} で {{ic|GRUB_TERMINAL_OUTPUT}} を {{ic|console}} に設定し、GRUB のグラフィカルターミナルを無効化してください。
   
 
== 参照 ==
 
== 参照 ==
   
  +
* [[Wikipedia:ja:GNU GRUB]]
# 公式 GRUB マニュアル - https://www.gnu.org/software/grub/manual/grub.html
 
  +
* [https://www.gnu.org/software/grub/manual/grub.html 公式 GRUB マニュアル]
# Ubuntu wiki の GRUB ページ - https://help.ubuntu.com/community/Grub2
 
# UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ - https://help.ubuntu.com/community/UEFIBooting
+
* [https://help.ubuntu.com/community/Grub2 Ubuntu wiki の GRUB ページ]
  +
* [https://help.ubuntu.com/community/UEFIBooting UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ]
# Wikipedia の [[Wikipedia:BIOS Boot partition|BIOS Boot partition]] ページ
 
  +
* [[Wikipedia:BIOS Boot partition]]
# http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html - GRUB の設定方法の詳細な説明
 
  +
* [https://web.archive.org/web/20160424042444/http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html#Editing_etcgrub.d05_debian_theme How to configure GRUB]
  +
  +
{{TranslationStatus|GRUB|2024-08-26|812848}}

2024年8月26日 (月) 15:49時点における最新版

関連記事

GRUB (GRand Unified Bootloader) はブートローダーです。現在の GRUB は GRUB 2 とも呼ばれています。元の GRUB (GRUB Legacy) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。

ノート: この記事全体で、espEFI システムパーティション (別名 ESP) のマウントポイントを表します。

目次

サポートされているファイルシステム

GRUB には複数のファイルシステム (特に重要なものとしては FAT32ext4BtrfsXFS) に対する独自のサポートがあります。注意事項に関しては #サポートのないファイルシステム 章を見てください。

警告: ファイルシステムには、GRUB がまだ対応していない新しい機能が導入されることがあります。その場合、GRUB と互換性の無い機能を無効化しない限り、そのファイルシステムを /boot に対して使用するべきではありません。この問題は、/boot パーティションを別に分けて、FAT32 などの広くサポートされているファイルシステムを使用することで、回避することができます。

UEFI システム

ノート:
  • 次のページを読んで理解しておくことをおすすめします: Unified Extensible Firmware Interfaceパーティショニング#GUID Partition TableArch ブートプロセス#UEFI_2
  • UEFI を使うようにインストールする場合、Arch のインストールメディアを UEFI モードで起動することが重要です。さもないと、efibootmgr が GRUB の UEFI ブートエントリを追加できません。フォールバックブートパスへのインストールは NVRAM を使用しないため、BIOS モードでも可能です。
  • UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。EFI システムパーティション#既存のパーティションの確認 に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。
  • この記事全体で、insmod を使って追加の GRUB2 モジュールを挿入可能であると仮定しています。#Shim-lock で議論されているように、これはセキュアブートが有効化されている UEFI システムには当てはまりません。セキュアブートシステム上で標準の GRUB EFI ファイル grubx64.efi に含まれていない追加の GRUB モジュールを使用したい場合は、grub-mkstandalone を使って追加の GRUB モジュールを含めた GRUB EFI grubx64.efi を再生成しなければなりません。

インストール

ノート:
  • UEFI の実装はマザーボード製造者ごとに異なっています。以下で説明されている手順は広い範囲の UEFI システムで動作するように意図されています。しかし、この方法を適用しているにも関わらず問題が発生する場合は、あなたのハードウェア固有のケースにおける詳細な情報を (可能であれば解決策も) 共有することが推奨されます。そのようなケースのために GRUB/EFI サンプル の記事が提供されています。
  • このセクションでは、あなたが x64 (64 ビット) UEFI のシステムに対して GRUB をインストールしようとしていると仮定します。IA32 (32 ビット) UEFI の場合は (32 ビット CPU と混同しないでください)、適切な場所で x86_64-efii386-efi に置き換えてください。Unified Extensible Firmware Interface#UEFI ファームウェアのビット数を調べる の手順を見て、UEFI のビット数を調べてください。

まず、grubefibootmgrインストールしてください。GRUB はブートローダである一方、efibootmgr はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。

そして、以下の手順に従って GRUB をディスクにインストールしてください:

  1. EFI システムパーティションをマウントしてください。そして、このセクションの後の部分で出てくる esp という記述をそのマウントポイントに置き換えてください。
  2. ブートローダの識別子を選んでください、ここでは仮に GRUB としましょう。esp/EFI/ にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。
  3. 以下のコマンドを実行して、GRUB EFI アプリケーション grubx64.efiesp/EFI/GRUB/ に、モジュールを /boot/grub/x86_64-efi/ にインストールしてください。
ノート:
  • GRUB をブートローダとしてインストールするシステム内でパッケージをインストールし、grub-install を実行してください。つまり、ライブインストール環境から起動している場合、grub-install は (インストール先の) chroot 環境の中で実行する必要があるということです。何らかの理由で、インストールされたシステムの外で grub-install を実行する必要がある場合、マウントした /boot ディレクトリへのパスを --boot-directory= オプションに渡してください。例: --boot-directory=/mnt/boot
  • 一部のマザーボードは、空白を含む bootloader-id を扱うことができません。
# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB

上記のインストール作業が完了した後、メインの 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 実行ファイルを配置するので注意してください。とはいえ、そのファイルは Windows の UEFI ブートエントリを再生成するためだけに使用されます。Mac 上に GRUB をインストールする場合、このオプションを使用する必要があります。一部のデスクトップマザーボード (特に MSI のマザーボード) はここに保存されている EFI 実行ファイルしか見ないので、このオプションが必須になります。 UEFI アップデートを実行すると、既存の UEFI ブートエントリが削除されるかもしれません。なので、"removable" なブートエントリを有効化しておくと、それをフォールバックとして利用できます。
ノート:
  • --efi-directory--bootloader-id は GRUB UEFI 専用です。--efi-directory は、非推奨となった --root-directory を置き換えます。
  • grub-install コマンドに device_path オプション (例えば /dev/sda) が無いことに気付いたかもしれません。実際、device_path は GRUB EFI インストールスクリプトによって無視されます。UEFI ブートローダーは MBR ブートコードもパーティションブートセクタも全く使用しないのです。

問題が発生した場合は UEFI のトラブルシューティング を見て下さい。加えて GRUB/ヒントとテクニック#UEFI の詳細情報 も参照してください。

セキュアブートサポート

GRUB は、CA 鍵か shim のいずれかを使用するセキュアブートを完全にサポートしています。しかし、インストールのコマンドは、どちらを使用するかによって異なります。

警告:
  • セキュアブートを不適切に設定すると、システムが起動不能になる可能性があります。セキュアブートを有効化した後に何らかの理由により起動できなくなった場合、ファームウェアでセキュアブートを無効化し、システムを再起動する必要があります。
  • ブートローダで不必要なモジュールをロードすると、セキュリティリスクを発生させる可能性があります。これらのコマンドは、必要なときにだけ使用してください。

CA 鍵

CA 鍵を使うには、インストールのコマンドは次のようになります:

# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --modules="tpm" --disable-shim-lock

Shim-lock

ノート: このセクションに進む前に、セキュアブート#shim に書かれてある指示の通りにし、sbsigntools をセットアップして鍵を受け取る準備を整えておく必要があります。

Shim-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、vmlinuzinitramfs のイメージが含まれているファイルシステムを読むために必要なモジュール全てが GRUB のバイナリに含まれていなければなりません。

GRUB バージョン 2.06.r261.g2f4430cc0 から、セキュアブートモードで insmod を使ってモジュールをロードすることは許可されなくなりました (任意のコードをサイドロードできてしまう可能性があるからです)。GRUB モジュールが EFI バイナリ内に組み込まれていない場合、GRUB はそれらのモジュールをサイドロード/insmod しようと試み、その結果、以下のようなメッセージにより GRUB の起動が失敗します:

error: prohibited by secure boot policy

Ubuntu の公式ビルドスクリプトによると、Ubuntu では以下の GRUB モジュールが署名済み GRUB EFI バイナリ grubx64.efi に組み込まれています:

  • "基本" モジュール。CD や簡単にパーティショニングされたディスクからブートするために必要: all_videobootbtrfscatchainconfigfileechoefifwsetupefinetext2fatfontgettextgfxmenugfxtermgfxterm_backgroundgziohalthelphfsplusiso9660jpegkeystatusloadenvloopbacklinuxlslsefilsefimmaplsefisystablssalmemdiskminicmdnormalntfspart_applepart_msdospart_gptpassword_pbkdf2pngproberebootregexpsearchsearch_fs_uuidsearch_fs_filesearch_labelsleepsmbiossquash4testtruevideoxfszfszfscryptzfsinfo
  • x84_64-efi アーキテクチャ用の "プラットフォーム固有" のモジュール。例えば:
    • play: ブート中に音を鳴らす
    • cpuid: ブート時に CPU の機能を確認する
    • tpm: Measured Boot / Trusted Platform Modules をサポートする
  • "高度な" モジュール。以下が含まれます:
    • cryptodisk: plain モードで暗号化されたディスクからブートする
    • gcry_アルゴリズム: 特定のハッシュアルゴリズムと暗号化アルゴリズムをサポートする
    • luks: LUKS で暗号化されたディスクからブートする
    • lvm: LVM 論理ボリュームディスクからブートする
    • mdraid09mdraid1xraid5recraid6rec: RAID 仮想ディスクからブートする

GRUB モジュールのリストはシェル変数の形にしなければなりません (ここでは GRUB_MODULES と表記しています)。最新の Ubuntu スクリプトをベースとして使い、あなたのシステムでは不要なモジュールを取り除くという方法を取ることもできます。モジュールを減らすと、ブートプロセスが比較的速くなり、ESP のスペースをいくらか節約できます。

また、セキュリティを高めるために、EFI バイナリにSecure Boot Advanced Targeting (SBAT) ファイル/セクションを含める必要があります (GRUB が UEFI shim ローダから起動される場合)。SBAT ファイル/セクションには、GRUB バイナリに関するメタデータ (バージョン、メンテナ、開発者、上流の URL) が含まれており、特定の GRUB バージョンに脆弱性がある場合、shim がそのバージョンの GRUB のロードをブロックすることが容易になります [1][2] (shim の UEFI shim bootloader secure boot life-cycle improvements というドキュメントで説明されています)。

SBAT セクションが grubx64.efi に無いと、shim は grubx64.efi の起動に失敗します。

GRUB がインストールされている場合、シンプルな SBAT .csv ファイルが /usr/share/grub/sbat.csv で提供されています。

その /usr/share/grub/sbat.csv ファイルと必要な GRUB_MODULES を使って GRUB を再インストールし、GRUB バイナリを署名してください:

# grub-install --target=x86_64-efi --efi-directory=esp --modules=${GRUB_MODULES} --sbat /usr/share/grub/sbat.csv
# sbsign --key MOK.key --cert MOK.crt --output esp/EFI/GRUB/grubx64.efi esp/EFI/GRUB/grubx64.efi
# cp esp/EFI/GRUB/grubx64.efi esp/EFI/BOOT/grubx64.efi

再起動し、MokManager で鍵を選択すれば、セキュアブートが機能するはずです。

セキュアブートを使用する

インストール後は、セキュアブート#セキュアブートを実現する を見て、セキュアブートを有効化する手順を確認してください。

CA 鍵の方法を取っている場合、鍵の管理や登録、ファイルの署名は sbctl で自動化できます。詳細は セキュアブート#sbctl でより簡単に行う を見てください。

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 では最初のパーティションの前に未使用の領域があることは保証されていません。
  • UEFI システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは依然として EFI システムパーティションが必要です。

ディスク上にパーティションタイプ GUID 21686148-6449-6E6F-744E-656564454649 の、ファイルシステムの無い 1 メビバイト (fdiskgdisk+1M) のパーティションを作成してください。

  • fdisk では、パーティションタイプ BIOS boot を選択してください。
  • gdisk では、パーティションタイプコード ef02 を選択してください。
  • parted では、そのパーティションで bios_grub フラグをセット/アクティブ化してください。

このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。

GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。fdiskgdisk では、セクター 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-legacyAUR がインストールされている場合は置き換えられます。) 次に以下を実行してください:

# grub-install --target=i386-pc /dev/sdX

i386-pc は実際のアーキテクチャに関わらず使用されます。/dev/sdX は GRUB がインストールされる ディスク (パーティションではありません) です。例えば、/dev/sda/dev/nvme0n1/dev/mmcblk0 です。ブロックデバイスの命名方法については デバイスファイル#ブロックデバイスの名前 を参照してください。

次に、メイン設定ファイルを生成する必要があります。

/bootLVM を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。

ヒント: USB メモリなどに GRUB をインストールする他の方法については GRUB/ヒントとテクニック#代替インストール方法 を参照してください。

grub-install コマンドの詳細については、grub-install(8) および GRUB Manual を参照してください。

設定

インストールされたシステムでは、GRUB は起動の度に設定ファイル /boot/grub/grub.cfg をロードします。ツールを使う場合は、#grub.cfg の生成 を、手動で作成する場合は #grub.cfg のカスタマイズ を参照してください。

grub.cfg の生成

このセクションでは /etc/default/grub 設定ファイルの編集についてだけ扱っています。他のオプションは GRUB/ヒントとテクニック を見て下さい。

ノート: /etc/grub.d/ 下のファイルや /etc/default/grub に変更を加えた後は必ずメイン設定ファイルの再生成を行なって下さい。
警告: GRUB の新しいバージョンで設定ファイルの構文が変更された場合、ブートローダーをアップデート/再インストールしてください (#UEFI システム#BIOS システム を見てください)。設定が一致しないと、システムが起動できなくなる可能性があります。例えば、新しい設定では既存の GRUB バイナリが認識しない関数が使用されているかもしれず、想定外の動作を引き起こす可能性があります。

メイン設定ファイルの生成

インストールした後は、メインの設定ファイル /boot/grub/grub.cfg を生成する必要があります。生成プロセスは、/etc/default/grub 内の様々なオプションや /etc/grub.d/ 下のスクリプトによって制御されます。/etc/default/grub におけるオプションのリストと、それぞれのオプションの簡潔な説明は、GNU のドキュメントを参照してください。

追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムのルートファイルシステムを判定し、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに chroot していることが重要です。

ノート:
  • デフォルトのファイルパスは /boot/grub/grub.cfg です、/boot/grub/i386-pc/grub.cfg ではありません。
  • chrootsystemd-nspawn コンテナで grub-mkconfig を実行しようとした場合、次のようなエラーによりうまく行かないことがあります: grub-probe: error: failed to get canonical path of /dev/sdaX。この場合、このフォーラムの投稿で記述されているように arch-chroot を使ってみて下さい。

grub-mkconfig ツールを使って /boot/grub/grub.cfg を生成してください:

# grub-mkconfig -o /boot/grub/grub.cfg

デフォルトで、生成スクリプトは Arch Linux のカーネルのメニューエントリを自動的に設定に追加します。

ヒント:

他のオペレーティングシステムのエントリを自動的に追加する方法は #他の 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 ブートメニューエントリの配置を決定します。必要なスクリプトを確実に実行させるために、nn06 よりも大きくする必要があります。

カスタムのメニューエントリの例は #ブートメニューエントリの例 を見てください。

他の 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

その後、もう一度試してください。

ノート:
  • 正確なマウントポイントは重要ではありません。os-probermtab を読み込んで、起動可能なエントリを検索すべき場所を特定します。
  • 他のオペレーティングシステムをエントリに含めるために、grub-mkconfig を実行するたびに対象のパーティションをマウントすることを忘れないでください。
  • os-prober は、chroot 内で実行すると正しく動作しないかもしれません。そのような場合は、再起動してシステムに入り、再び試してください。
ヒント: 最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、GRUB/ヒントとテクニック#以前のエントリを思い出させる を参照してください。
Windows

UEFI モードでインストールされた Windows の場合、Windows Boot Manager (bootmgfw.efi) を含んでいる EFI システムパーティションがマウントされていることを確認してください。root として os-prober を実行すると、Windows のエントリを検出・生成します。

BIOS モードでインストールされた Windows の場合、Windows システムパーティション をマウントしてください (そのパーティションのファイルシステムラベルSystem Reserved (システムで予約済み) か SYSTEM であるはずです)。root として os-prober を実行すると、Windows のエントリを検出・生成します。

ノート: BIOS モードでインストールされた Windows の場合:
  • NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、NTFS-3G をインストールして再マウントしてみてください。
この記事またはセクションは情報が古くなっています。
理由: Windows 7 以降、bootmgrシステムパーティション内にあり、このパーティションは暗号化されていません。 (Discuss)
  • 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、cryptsetupdislockerAUR で実行できます。これで os-prober が正しいエントリを追加できるはずです。

追加引数

カスタムの追加引数を Linux イメージに渡すために、/etc/default/grubGRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULT 変数を設定することができます。これら2つは互いに追加され、標準のブートエントリを作成する際にカーネルに渡されます。recovery ブートエントリについては、GRUB_CMDLINE_LINUX だけが生成時に使われます。

両方を使う必要はありませんが、上手く使えば便利です。例えば、GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=uuid-of-swap-partition quiet" (uuid-of-swap-partitionハイバネート後に復帰できるようにするためのスワップパーティションの UUID)。この例の設定では、(ハイバネートからの) 復帰をせず、メニューエントリからの起動中にカーネルメッセージを非表示にする quiet も無いリカバリブートエントリを生成します。しかし、他の (標準の) メニューエントリはこれらのオプションを持ちます。

デフォルトでは、grub-mkconfig はルートファイルシステムの UUID を検出して、設定にそれを反映します。これを無効化するには、GRUB_DISABLE_LINUX_UUID=true をアンコメントしてください。

GRUB リカバリエントリを生成するには、/etc/default/grub 内の GRUB_DISABLE_RECOVERYtrue に設定されていない必要があります。

詳細は カーネルパラメータ を参照してください。

トップレベルのメニューエントリを設定する

デフォルトでは、grub-mkconfig は、含まれているカーネルを sort -V を使ってソートし、それらの中の最初のカーネルをトップレベルのエントリとして使用します。すなわち、例えば /boot/vmlinuz-linux-lts/boot/vmlinuz-linux より前に来るので、linux-ltslinux の両方がインストールされている場合、LTS カーネルがトップレベルのメニューエントリとなります。これは、望ましくない場合があるでしょう。この挙動は、/etc/default/grub 内の GRUB_TOP_LEVEL=path_to_kernel" を指定することでオーバーライドすることができます。例えば、標準のカーネルをトップレベルのメニューエントリにするには、GRUB_TOP_LEVEL="/boot/vmlinuz-linux" を使用します。

LVM

警告: GRUB はシンプロビジョニングされた論理ボリュームをサポートしていません。

/boot/LVM を使用している場合、lvm モジュールをプリロードするようにしてください:

/etc/default/grub
GRUB_PRELOAD_MODULES="... lvm"

RAID

GRUB は RAID ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール mdraid09mdraid1x をロードする必要があります:

/etc/default/grub
GRUB_PRELOAD_MODULES="... mdraid09 mdraid1x"

例えば、/dev/md0 は以下のようになります:

set root=(md/0)

パーティショニングされた RAID ボリューム (例: /dev/md0p1) は以下のようになります:

set root=(md/0,1)

/boot パーティションに RAID1 を使用している場合 (あるいは、/boot が RAID1 ルートパーティション上に存在する場合) に GRUB をインストールするには、BIOS システム上では、両方のドライブ上で grub-install を実行してください。例:

# grub-install --target=i386-pc --debug /dev/sda
# grub-install --target=i386-pc --debug /dev/sdb

ここでは、/boot が存在する RAID1 アレイが、/dev/sda/dev/sdb に存在するとしています。

{{Note|GRUB は Btrfs RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 はサポートしていません。RAID 5/6 に対しては mdadm を使用することができます (mdadm は GRUB によってサポートされています)。

暗号化された /boot

GRUB には暗号化された /boot を起動するための特別なサポートがあります。これは、LUKS ブロックデバイスをアンロックして、GRUB の設定を読み込み、initramfsカーネル をそのブロックデバイスからロードすることにより行われます。このオプションは暗号化されていないブートパーティションの問題を解決することを試みます。

ヒント: /boot を別のパーティションに保存する必要はありません。システムのルート / ディレクトリツリー下に保存することもできます。
警告: GRUB 2.12rc1 の LUKS2 に対するサポートは限られています。詳細は #LUKS2 セクションを見てください。

この機能を有効化するには、/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 を再インストールしてみてください。
ヒント: pacman フック を使用すれば、/boot 内のファイルにアクセスする必要のあるアップグレード時に /boot を自動マウントできます。
LUKS2

#インストール 章で説明されているように、grub-install を使用して LUKS サポートありでブータブルな GRUB イメージを作成してください。ただし、いくつかの注意点があります:

  • LUKS2 の初期サポートが GRUB 2.06 で追加されましたが、いくつかの制限があります。これらの制限は、GRUB 2.12rc1 で部分的にのみ対処されています。GRUB bug #55093 を参照してください。
  • GRUB 2.12rc1 から、grub-install で LUKS2 のロックを解除するためのコアイメージを作成できるようになりました。しかし、PBKDF2 のみがサポートされており、Argon2 はサポートされていません。
  • Argon2id (cryptsetup デフォルト) と Argon2i PBKDF はサポートされていません (GRUB bug #59409)。PBKDF2 のみのサポートです。
ヒント: LUKS2 と Argon のサポートパッチが施された grub-improved-luks2-gitAUR を使用できます。このパッケージの Argon サポートには UEFI システムが必要であることに注意してください。[3]
ノート: GRUB 2.12rc1 より前では、カスタムの GRUB 設定ファイルを使って grub-mkimage コマンドで EFI バイナリを手動で作成する必要がありました。(例えば、/boot/grub/grub-pre.cfgcryptomountinsmod normal、そして normal への呼び出しを追加する必要がありました。) しかし、これはもはや必要なくなり、grub-install だけで十分です。ただし、2.06 からアップグレードした後に少なくとも一回は grub-mkconfig -o /boot/grub/grub.cfg を実行する必要があります。

起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、cryptomount -a を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、cryptomount -u $crypto_uuid を使用して特定のパーティションをマウントしてください。その後、通常通り insmod normalnormal で進めてください。

正しいパスフレーズを入力したが 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" パーティション (/) 下にあるディレクトリを指定しても構いません)

LoaderDevicePartUUID

systemd-gpt-auto-generator(8)GPT パーティションの自動マウントをするために必要な LoaderDevicePartUUID UEFI 変数を GRUB で設定するには、grub.cfgbli モジュールをロードしてください:

if [ "$grub_platform" = "efi" ]; then
  insmod bli
fi

ブートメニューエントリの例

ヒント: 以下のブートエントリは grub-mkconfig によって生成された /boot/grub/grub.cfg でも使用可能です。以下を /etc/grub.d/40_custom に追加してメインの設定ファイルを再生成するか、あるいは以下を直接 /boot/grub/custom.cfg に追加してください。

複数の GRUB エントリーを管理するヒントとして、例えば linuxlinux-lts カーネルを同時使用している場合は GRUB/ヒントとテクニック#複数のエントリ を見てください。

ArchisoArchboot のブートメニューエントリについては マルチブート 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 バイナリをチェインロードできます。

ヒント: GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを if 文で囲ってください:
if [ ${grub_platform} == "efi" ]; then
	UEFI のときだけ表示するメニューエントリをここへ
fi
UEFI シェル

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.efiesp/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 カーネルイメージを持っているならば、それをブートメニューに追加できます。例えば:

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 のブートローダーを実行することです。

ノート: このメニューエントリは、UEFI ブートモードで実行中であり、かつ Windows のビット数が UEFI のビット数と一致する場合にのみ機能します。BIOS モードでインストールされた GRUB では機能しません。さらなる情報については Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限 をご覧ください。
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
ノート: GRUB は bootmgr ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを チェインロードする必要はもはやありません。
警告: /bootmgr が存在する場所は システムパーティション であり、"本当"の Windows パーティション (通常、C:) ではありません。システムパーティションのファイルシステムラベルSystem Reserved (システムで予約済み) か SYSTEM であり、サイズは約100~549 MiB 程度です。さらなる情報については Wikipedia:System partition and boot partition をご覧ください。

このセクションを通して Windows のパーティションは /dev/sda1 にあると仮定します。パーティションが異なる場合は hd0,msdos1 という記述をすべて変更してください。

ノート: 以下のメニューエントリは BIOS ブートモードでのみ機能します。UEFI モードでインストールされた GRUB では機能しません。Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限 をご覧ください。

両方の例で XXXX-XXXX はファイルシステムの 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 XXXX-XXXX
		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 XXXX-XXXX
		ntldr /ntldr
	}
fi
ノート: GRUB をインストールすると Windows 8 が汚染される場合があります。この場合、\boot\bcd (エラーコード 0xc000000f)のエラーにより Windows が起動できなくなります。これを直すには Windows 回復コンソール(インストールディスク上にある cmd.exe)を開いて、以下を実行してください:
X:\> bootrec.exe /fixboot
X:\> bootrec.exe /RebuildBcd

bootrec.exe /Fixmbr実行しないでください。GRUB が吹き飛びます。 あるいは、トラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。 また、対象のハードドライブとブート可能ドライブの両方だけを接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。

ラベルを使う

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" シェルに落とされるでしょう:

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) の先頭や、パーティションレスディスク (VBR) のパーティションの先頭に組み込んだり、あるいは UEFI の場合は EFI バイナリとして組み込むことができます。

パーティションの VBR をチェインロード

set root=(hdX,Y)
chainloader +1
boot

X=0,1,2... Y=1,2,3...

例えば最初のハードディスクの最初のパーティションに保存された Windows をチェインロードするには:

set root=(hd0,1)
chainloader +1
boot

同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。

ディスクの MBR やパーティションレスディスクの VBR をチェインロード

set root=hdX
chainloader +1
boot

UEFI モードでインストールされた Windows/Linux のチェインロード

insmod fat
set root=(hd0,gpt4)
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
boot

insmod fat は、EFI システムパーティション上の Windows ブートローダーにアクセするために、FAT ファイルシステムモジュールをロードするために使用されます。 (hd0,gpt4) (すなわち /dev/sda4) は、この例における EFI システムパーティションです。 chainloader 行のエントリは、チェインロードすべき .efi ファイルへのパスを指定しています。

通常のロード

#rescue コンソールを使う の例を見て下さい。

rescue コンソールを使う

まず #コマンドシェルを使う を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。

GRUB rescue で利用できるコマンドには insmodlssetunset があります。この例では setinsmod を使います。set は変数を変更し insmod は新しいモジュールを挿入して機能を追加します。

始める前に、ユーザーは自分の /boot パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):

grub rescue> set prefix=(hdX,Y)/boot/grub

X は物理ドライブ番号、Y はパーティション番号に置き換えてください。

ノート: boot パーティションを分割している場合、パスから /boot を省いて下さい (つまり、set prefix=(hdX,Y)/grub と入力する)。

コンソールの機能を拡張するために、linux モジュールを挿入します:

grub rescue> insmod i386-pc/linux.mod

もしくは、単純に:

grub rescue> insmod linux

これで、より親しみのあるであろう linuxinitrd のコマンドが使えます。

例えば、Arch Linux を起動する場合:

set root=(hd0,5)
linux /boot/vmlinuz-linux root=/dev/sda5
initrd /boot/initramfs-linux.img
boot

boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります:

ノート: boot は別のパーティションであり、ルートパーティションの一部ではないので、上の prefix 変数と同じような形式で 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 を消去

UEFI システム

grub を削除する前に、他のブートローダがインストールされていて、GRUB の後を引き継ぐように設定されていることを確認してください。

$ efibootmgr
BootOrder: 0003,0001,0000,0002
Boot0000* Windows Boot Manager  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)
Boot0001* GRUB  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi)
Boot0002* Linux-Firmware-Updater        HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi)
Boot0003* Linux Boot Manager    HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)

BootOrdergrub が最初のエントリになっている場合、systemd-boot などの他のブートローダをインストールして最初のエントリにしてください。その後、bootnum を使って grub を削除することができます。

# efibootmgr --delete-bootnum -b 1

また、esp/EFI/grub/boot/grub ディレクトリも削除してください。

BIOS システム

grub を他の BIOS ブートローダに置き換えるには、単に新しいブートローダをインストールしてください (そうすることで、MBR ブートコードが上書きされます)。

grub-install/boot/grub ディレクトリを作成するので、これは手動で削除する必要があります。しかし、grub をまたインストールするかもしれない場合は、このディレクトリを残しておいたほうが良いかもしれません。

UEFI/GPT に移行した後は、dd を使って MBR ブートコードを削除することができます。

トラブルシューティング

サポートのないファイルシステム

GRUB が root のファイルシステムをサポートしていない場合、代替の /boot パーティションをサポートのあるファイルシステムで作成する必要があります。​開発バージョンの GRUB である grub-gitAUR が該当するファイルシステムをネイティブサポートしている場合があります。

サポートされないファイルシステムで GRUB を使用した場合、ドライブの UUID を抽出できないため、GRUB は古典的で非永続的な /dev/sdXx 名を使います。この場合、/boot/grub/grub.cfg を手動で編集し、root=/dev/sdXxroot=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

よくあるインストール時のエラー

  • 一部の UEFI デバイスで起こりうるエラーは、Could not prepare Boot variable: Read-only file system です。/sys/firmware/efi/efivars を読み書き可能な状態で再マウントする必要があります。
    # mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars
    ブートローダーのインストールに関しては Gentoo Wiki を見てください。
  • sysfsprocfs がある状態で grub-install を実行すると問題が発生し、modprobe efivarfs を実行しなければならないと言われる場合、efivarfs をマウントして上記のコマンドを実行してみてください。
  • --target--directory オプションのどちらかがないと、grub-install はどこにファームウェアをインストールすればいいのか決められません。そのような場合 grub-installsource_dir does not exist. Please specify --target or --directory というメッセージを表示します。
  • grub-install の実行後に error: esp doesn't look like an EFI partition と表示される場合、おそらくパーティションが 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 はロードされたが、エラーが表示されずにレスキューシェルに落とされる場合、以下の2つの理由のうち1つが原因である可能性があります:

  • grub.cfg が存在しないか、場所を間違えている。--boot-directory を使って GRUB UEFI をインストールして、grub.cfg が存在しない場合に起こります。
  • ブートパーティションが変更された (grubx64.efi ファイルにハードコードされています)。

GRUB UEFI がロードされない

有効な UEFI の例:

# efibootmgr -u
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0001,0002
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi)
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi)
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI

画面が数秒間真っ暗になって、その後、次のブートオプションが試行される場合、この投稿によると、GRUB をルートパーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:

Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grubx64.efi)

デフォルト/フォールバックのブートパス

一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、grub-install が、GRUB を起動するエントリが efibootmgr によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです:

# 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 のデバイス設定を移動 (削除) し、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 がカーネルと初期 RAM ディスクをロードした後に、エラーメッセージが表示されずにフリーズする場合、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 の中にない可能性があります [4]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。

また、このエラーは ext4 ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません:

  • large_dir - サポートされません。
  • metadata_csum_seed - GRUB 2.11 でサポートされます (コミット).
警告: /boot ファイルシステム上でファイルシステムの新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。

grub-reboot で再設定されない

GRUB は Btrfs のルートパーティションに書き込むを行うことができません [5]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。grub-editenv create を実行して /etc/default/grubGRUB_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' does not support blocklists.

ドライブを完全に消去してもいいですが、wipefs -o 0x10040 /dev/sdx を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。

Windows 8/10 が認識されない

Windows 8/10 の "高速スタートアップ"、"ハイブリッドブート"、"Hiberboot" と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができなくなる可能性があります。そのため grub-mkconfig が Windows を認識することができなくなります。Windows で高速スタートアップを無効化することで GRUB のメニューに追加することができるようになるはずです。

grub-rescue プロンプトと暗号化済み /boot

暗号化済みの /boot を使用している場合に間違ったパスワードを入力してしまうと grub-rescue プロンプトに入ります。

この grub-rescue プロンプトではできることが限られています。以下のコマンドを使ってブートを完了させます:

grub rescue> cryptomount <partition>
grub rescue> insmod normal
grub rescue> normal

より良い説明はこのブログ投稿[リンク切れ 2023-04-23]をご覧ください。

GRUB をインストールしたが起動時にメニューが表示されない

/etc/default/grub を見て GRUB_TIMEOUT0 に設定されていないかチェックしてください。0 に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。GRUB_TIMEOUT_STYLEhidden に設定されていないかもチェックしてください。hidden に設定されていた場合、menu に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、メインの設定ファイルを再生成して、再起動してメニューが表示されるか確かめてください。

これでうまく行かない場合、グラフィカルターミナルとの互換性の問題があるのかもしれません。/etc/default/grubGRUB_TERMINAL_OUTPUTconsole に設定し、GRUB のグラフィカルターミナルを無効化してください。

参照

翻訳ステータス: このページは en:GRUB の翻訳バージョンです。最後の翻訳日は 2024-08-26 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。