「GRUB」の版間の差分
(→UEFI: 「デフォルト/フォールバックのブートパス」を追加) |
Kusanaginoturugi (トーク | 投稿記録) (→Unified カーネルイメージをチェインロード: unified を片仮名に変更) |
||
(3人の利用者による、間の45版が非表示) | |||
1行目: | 1行目: | ||
− | {{Translateme|記事の内容が古くなっています。飜訳のご協力または原文の方をご参照ください。}} |
||
[[Category:ブートローダー]] |
[[Category:ブートローダー]] |
||
[[Category:GNU]] |
[[Category:GNU]] |
||
− | [[ar:GRUB]] |
||
− | [[cs:GRUB]] |
||
[[de:GRUB]] |
[[de:GRUB]] |
||
− | [[el:GRUB]] |
||
[[en:GRUB]] |
[[en:GRUB]] |
||
[[es:GRUB]] |
[[es:GRUB]] |
||
[[fa:گراب]] |
[[fa:گراب]] |
||
− | [[fr:GRUB]] |
||
− | [[he:GRUB]] |
||
− | [[id:GRUB]] |
||
− | [[it:GRUB]] |
||
− | [[nl:GRUB]] |
||
[[pt:GRUB]] |
[[pt:GRUB]] |
||
[[ru:GRUB]] |
[[ru:GRUB]] |
||
− | [[tr:GRUB2]] |
||
− | [[uk:GRUB]] |
||
[[zh-hans:GRUB]] |
[[zh-hans:GRUB]] |
||
− | [[zh-hant:GRUB]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Arch ブートプロセス}} |
{{Related|Arch ブートプロセス}} |
||
30行目: | 18行目: | ||
{{Related|マルチブート USB ドライブ}} |
{{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) は[[Arch ブートプロセス#ブートローダー|マルチブートローダー]] です。GRUB Legacy の後継の研究開発プロジェクト [https://www.nongnu.org/pupa/ PUPA] から GRUB は作られています。全てを整理するため GRUB はスクラッチから書きなおされモジュール性とポータビリティを獲得しました [https://www.gnu.org/software/grub/grub-faq.html#q1]。現在の GRUB は GRUB2 とも呼ばれ、GRUB Legacy はバージョン 0.9x に対応しています。 |
||
− | |
||
− | {{Note|記事全体で、{{ic|''esp''}} は [[EFI システムパーティション]](別名 ESP) のマウントポイントを示します。}} |
||
− | == |
+ | == サポートされているファイルシステム == |
+ | GRUB には[https://www.gnu.org/software/grub/manual/grub/html_node/Features.html#Features 複数のファイルシステム] (特に重要なものとしては [[FAT32]]、[[ext4]]、[[Btrfs]]、[[XFS]]) に対する独自のサポートがあります。注意事項に関しては [[#サポートのないファイルシステム]] 章を見てください。 |
||
− | === GUID Partition Table (GPT) 特有の手順 === |
||
+ | {{Warning|ファイルシステムには、GRUB がまだ対応していない新しい機能が導入されることがあります。その場合、GRUB と互換性の無い機能を無効化しない限り、そのファイルシステムを {{ic|/boot}} に対して使用するべきではありません。この問題は、[[パーティショニング#/boot|/boot パーティション]]を別に分けて、[[FAT32]] などの広くサポートされているファイルシステムを使用することで、回避することができます。}} |
||
− | GPT でパーティションされたシステムには {{ic|core.img}} を埋め込むための MBR の隙間の領域がないので (GPT のプライマリヘッダーやプライマリパーティションテーブルに使われます)、[[GUID Partition Table|BIOS-GPT]] の GRUB 設定では [https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html BIOS boot partition] が必要になります。このパーティションは BIOS-GPT 環境の GRUB でだけ使われます。MBR パーティションではそのようなパーティションのタイプは存在しません (少なくとも GRUB にはありません)。システムが UEFI を使っている時も (ブートセクタの埋め込みがないので)、このパーティションは必要ありません。 |
||
+ | == 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| |
||
+ | * 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。 |
||
− | * {{ic|<nowiki>--target=i386-pc</nowiki>}} を使って {{ic|grub-install}} の対象を {{ic|i386-pc}} に明示的に指定する必要があります。そうしないとあなたの設定が EFI-GPT ではないかと {{ic|grub-install}} が勘違いする可能性があるからです。 |
||
+ | * UEFI を使うようにインストールする場合、Arch のインストールメディアを UEFI モードで起動することが重要です。さもないと、''efibootmgr'' が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。 |
||
− | * このパーティションは {{ic|grub-install}} や {{ic|grub-setup}} を実行する前に作成しておく必要があります |
||
+ | * UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。 |
||
− | * 他の全てのパーティションの後にこのパーティションを作成する場合、gdisk では容量の消費が一番少ない場所 (セクター 34-2047) にしか作成できません。なぜなら gdisk はパーティションを出来る限り 2048 セクター境界に自動アライメントするからです |
||
+ | * この記事全体で、{{ic|insmod}} を使って追加の GRUB2 モジュールを挿入可能であると仮定しています。[[#Shim-lock]] で議論されているように、これはセキュアブートが有効化されている UEFI システムには当てはまりません。セキュアブートシステム上で標準の GRUB EFI ファイル {{ic|grubx64.efi}} に含まれていない追加の GRUB モジュールを使用したい場合は、{{ic|grub-mkstandalone}} を使って追加の GRUB モジュールを含めた GRUB EFI {{ic|grubx64.efi}} を再生成しなければなりません。 |
||
}} |
}} |
||
− | |||
− | === Master Boot Record (MBR) 特有の手順 === |
||
− | |||
− | 通常 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 パーティション・アライメントをサポートしているパーティションツールを使うのが得策です。 |
||
=== インストール === |
=== インストール === |
||
+ | {{Note| |
||
− | [[公式リポジトリ]] にある {{Pkg|grub}} パッケージから GRUB を[[pacman|インストール]]できます。{{AUR|grub-legacy}} がインストールされている場合は置き換えられます。次に以下の手順を実行します。 |
||
+ | * UEFI の実装はマザーボード製造者ごとに異なっています。以下で説明されている手順は広い範囲の UEFI システムで動作するように意図されています。しかし、この方法を適用しているにも関わらず問題が発生する場合は、あなたのハードウェア固有のケースにおける詳細な情報を (可能であれば解決策も) 共有することが推奨されます。そのようなケースのために [[GRUB/EFI サンプル]] の記事が提供されています。 |
||
+ | * このセクションでは、あなたが x64 (64 ビット) UEFI のシステムに対して GRUB をインストールしようとしていると仮定します。IA32 (32 ビット) UEFI の場合は (32 ビット CPU と混同しないでください)、適切な場所で {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えてください。[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数を調べる]] の手順を見て、UEFI のビット数を調べてください。 |
||
+ | }} |
||
+ | {{Warning|{{Pkg|grub}} 2:2.06.r566.g857af0e17-1 から、IA32 UEFI (ターゲット {{ic|i386-efi}}) でのブートが壊れています。{{Bug|79098}} を参照してください。}} |
||
− | # grub-install --target=i386-pc ''/dev/sdX'' |
||
+ | まず、{{Pkg|grub}} と {{Pkg|efibootmgr}} を[[インストール]]してください。''GRUB'' はブートローダである一方、''efibootmgr'' はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。 |
||
− | {{ic|''/dev/sdX''}} は GRUB がインストールされる '''ディスク''' ('''パーティションではありません''') です。例えば、{{ic|/dev/sda}}、{{ic|/dev/nvme0n1}} または {{ic|/dev/mmcblk0}} です。ブロックデバイスの命名方法については、[[デバイスファイル#ブロックデバイスの名前]]を参照してください。 |
||
+ | そして、以下の手順に従って GRUB をディスクにインストールしてください: |
||
− | 次に、[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]する必要があります。 |
||
− | |
||
− | [[LVM]] を {{ic|/boot}} に使用している場合、GRUB を複数の物理ディスクにインストールすることができます。 |
||
+ | # [[EFI システムパーティション#パーティションのマウント|EFI システムパーティションをマウント]]してください。そして、このセクションの後の部分で出てくる {{ic|''esp''}} という記述をそのマウントポイントに置き換えてください。 |
||
− | {{Tip|USB メモリなどに GRUB をインストールする他の方法については、[[GRUB/ヒントとテクニック#代替インストール方法]]を参照してください。}} |
||
+ | # ブートローダの識別子を選んでください、ここでは仮に {{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]] を使って必要ないエントリを削除してください。 |
||
− | {{ic|grub-install}} コマンドの詳細については、{{man|8|grub-install}} および [https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation GRUB Manual] を参照してください。 |
||
+ | 設定を確定したあとに[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]することを忘れないでください。 |
||
− | == UEFI システム == |
||
+ | {{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 をインストールする場合、このオプションを使用する必要があります。 |
||
− | {{Note|[[Unified Extensible Firmware Interface|UEFI]], [[GUID Partition Table|GPT]], [[ブートローダー]]のページをよく読んでおいてください。}} |
||
+ | UEFI アップデートを実行すると、既存の UEFI ブートエントリが削除されるかもしれません。なので、"removable" なブートエントリを有効化しておくと、それをフォールバックとして利用できます。}} |
||
+ | {{Note| |
||
− | === GPT と ESP があるかどうか確認する === |
||
+ | * {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は、非推奨となった {{ic|--root-directory}} を置き換えます。 |
||
+ | * {{ic|grub-install}} コマンドに ''device_path'' オプション (例えば {{ic|/dev/sda}}) が無いことに気付いたかもしれません。実際、''device_path'' は GRUB EFI インストールスクリプトによって無視されます。UEFI ブートローダーは MBR ブートコードもパーティションブートセクタも全く使用しないのです。 |
||
+ | }} |
||
+ | 問題が発生した場合は [[#UEFI|UEFI のトラブルシューティング]] を見て下さい。加えて [[GRUB/ヒントとテクニック#UEFI の詳細情報]] も参照してください。 |
||
− | EFI を使って起動するにはディスク上に [[EFI System Partition]] (ESP) が必要になります。GPT は必ずしも必要ではありませんが、強く推奨されており、この記事では GPT を使う方法しか記述していません。Windows 8 など、既にオペレーティングシステムが動作している EFI が使えるコンピュータに Archlinux をインストールする場合、既に ESP は存在するはずです。GPT と ESP を確認するには、root で {{ic|parted}} を使って起動に使いたいディスクのパーティションテーブル (例: {{ic|/dev/sda}}) を表示して下さい。 |
||
+ | === セキュアブートサポート === |
||
− | # parted /dev/sda print |
||
+ | GRUB は、CA 鍵か shim のいずれかを使用するセキュアブートを完全にサポートしています。しかし、インストールのコマンドは、どちらを使用するかによって異なります。 |
||
− | GPT なら、"Partition Table: gpt" と表示されます。EFI なら、vfat/fat32 ファイルシステムで 'boot' フラグが有効になっている小さな (512 MiB 以下) パーティションがあります。そのパーティション上には、"EFI" という名前のフォルダがあるはずです。これらの存在が確認できたのなら、それは ESP になります。そのパーティション番号を覚えておいて下さい。後で GRUB を ESP にインストールするときに使います。 |
||
+ | {{Warning| |
||
− | === ESP を作成する === |
||
+ | * [[セキュアブート]]を不適切に設定すると、システムが起動不能になる可能性があります。セキュアブートを有効化した後に何らかの理由により起動できなくなった場合、ファームウェアでセキュアブートを無効化し、システムを再起動する必要があります。 |
||
+ | * ブートローダで不必要なモジュールをロードすると、セキュリティリスクを発生させる可能性があります。これらのコマンドは、必要なときにだけ使用してください。 |
||
+ | }} |
||
+ | ==== CA 鍵 ==== |
||
− | ESP が存在しない場合、作成する必要があります。[[EFI システムパーティション]]の指示に従って ESP を作成してください。 |
||
− | + | CA 鍵を使うには、インストールのコマンドは次のようになります: |
|
+ | # grub-install --target=x86_64-efi --efi-directory=''esp'' --bootloader-id=GRUB --modules="tpm" --disable-shim-lock |
||
− | {{Note|それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。GRUB や EFI が正しく動作しないという問題が起きたユーザーは下で説明されていること以外のハードウェア特有のケースについて詳しい手順を共有することが奨励されています。この記事では総合的なことしか書かれていないので、特別な場合については [[GRUB/EFI サンプル]]のページを見て下さい。}} |
||
+ | ==== Shim-lock ==== |
||
− | 下のコマンドでは GRUB を {{ic|x86_64-efi}} でインストールすると仮定しています (i686 環境用の {{ic|IA32-efi}} を使うのなら下のコマンドの {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えて下さい)。 |
||
+ | {{Note|このセクションに進む前に、[[セキュアブート#shim]] に書かれてある指示の通りにし、{{pkg|sbsigntools}} をセットアップして鍵を受け取る準備を整えておく必要があります。}} |
||
− | [[Bash]] シェルにログインしていることを確認して下さい。例えば、Arch ISO から起動している場合: |
||
+ | Shim-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、[[vmlinuz]] と [[initramfs]] のイメージが含まれているファイルシステムを読むために必要なモジュール全てが GRUB のバイナリに含まれていなければなりません。 |
||
− | # arch-chroot /mnt /bin/bash |
||
+ | GRUB バージョン {{ic|2.06.r261.g2f4430cc0}} から、セキュアブートモードで {{ic|insmod}} を使ってモジュールをロードすることは許可されなくなりました (任意のコードをサイドロードできてしまう可能性があるからです)。GRUB モジュールが EFI バイナリ内に組み込まれていない場合、GRUB はそれらのモジュールをサイドロード/{{ic|insmod}} しようと試み、その結果、以下のようなメッセージにより GRUB の起動が失敗します: |
||
− | {{Pkg|grub}} と {{Pkg|efibootmgr}} パッケージをインストールしてください。''GRUB'' はブートローダーであり、''efibootmgr'' は {{ic|.efi}} ブータブルスタブを作成します (GRUB のインストールスクリプトによって使用されます)。 |
||
+ | error: prohibited by secure boot policy |
||
− | 以下の手順では GRUB UEFI アプリケーションを {{ic|''$esp''/EFI/grub}} にインストールして、モジュールを {{ic|/boot/grub/x86_64-efi}} にインストールします。そして、{{ic|grubx64.efi}} ブータブルスタブを {{ic|''$esp''/EFI/grub}} に配置します。 |
||
+ | [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}} に組み込まれています: |
||
− | ブートディレクトリとブートローダー ID を設定してインストールしてください。{{ic|$esp}} は efi パーティションに置き換えて下さい (通常は {{ic|/boot}}): |
||
+ | * [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}} |
||
− | # grub-install --target=x86_64-efi --efi-directory=''$esp'' --bootloader-id=''grub'' |
||
+ | * x84_64-efi アーキテクチャ用の [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n147 "プラットフォーム固有" のモジュール]。例えば: |
||
+ | ** {{ic|play}}: ブート中に音を鳴らす |
||
+ | ** {{ic|cpuid}}: ブート時に CPU の機能を確認する |
||
+ | ** {{ic|tpm}}: Measured Boot / [[TPM|Trusted Platform Modules]] をサポートする |
||
+ | * [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 のスペースをいくらか節約できます。 |
||
− | {{Tip|bootloader-id に {{ic|boot}} と指定した場合、EFI 変数がリセットされた場合やドライブを他のコンピュータに移した場合でもドライブから起動することができるようになります。通常は BIOS を使用する方法と同じようにドライブを選択することで使うことができます。Windows とデュアルブートする場合、Windows は EFI パーティションの EFI フォルダの中に boot という名前のフォルダを作成するので注意してください。このフォルダによって Windows の EFI ブートオプションが再作成されます。}} |
||
+ | また、セキュリティを高めるために、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 ディレクトリが {{ic|/boot/grub/}} に作成されます。 |
||
+ | SBAT セクションが {{ic|grubx64.efi}} に無いと、shim は {{ic|grubx64.efi}} の起動に失敗します。 |
||
− | 後で[[#設定|設定]]を変更した後は忘れずに[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]してください。 |
||
+ | GRUB がインストールされている場合、シンプルな SBAT ''.csv'' ファイルが {{ic|/usr/share/grub/sbat.csv}} で提供されています。 |
||
− | {{Note| |
||
− | * ディストリビューションによっては {{ic|/boot/efi}} や {{ic|/boot/EFI}} ディレクトリが必要な場合がありますが、Arch では不要です。 |
||
− | * オプション {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は ESP のマウントポイントを指定します。このオプションと同じものとして以前は {{ic|--root-directory}} が使われていました。 |
||
− | * GRUB を BIOS システムで設定するときと異なり {{ic|grub-install}} コマンドの最後に <device_path> オプション (例: {{ic|/dev/sda}}) を使わないことに注意してください。UEFI のブートローダーは MBR やパーティションのブートセクタを全く使わないので <device_path> が指定されてもインストールスクリプトはそれを無視します。 |
||
− | }} |
||
+ | その {{ic|/usr/share/grub/sbat.csv}} ファイルと必要な {{ic|GRUB_MODULES}} を使って GRUB を再インストールし、GRUB バイナリを署名してください: |
||
− | 問題が発生した場合は [[#UEFI]] を見て下さい。 |
||
+ | # 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'' で鍵を選択すれば、セキュアブートが機能するはずです。 |
||
− | ==== 他のインストール方法 ==== |
||
+ | ==== セキュアブートを使用する ==== |
||
− | GRUB のブートファイルを全て EFI System Partition の中に収めたい時は、{{ic|grub-install}} コマンドに {{ic|--boot-directory=$esp}} を追加してください: |
||
− | # grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --boot-directory=$esp --debug |
||
+ | インストール後は、[[セキュアブート#セキュアブートを実現する]] を見て、セキュアブートを有効化する手順を確認してください。 |
||
− | このコマンドによって GRUB モジュールは {{ic|$esp/grub}} に置かれます (このパスの最後の '/grub' はハードコードされています)。この方法を使うと、{{ic|grub.cfg}} も EFI System Partition 上に作る必要があり、設定するときに正しい位置を {{ic|grub-mkconfig}} に示す必要があります: |
||
+ | CA 鍵の方法を取っている場合、鍵の管理や登録、ファイルの署名は {{pkg|sbctl}} で自動化できます。詳細は [[セキュアブート#sbctl でより簡単に行う]] を見てください。 |
||
− | # grub-mkconfig -o $esp/grub/grub.cfg |
||
+ | == BIOS システム == |
||
− | 設定の他のところは同じです。 |
||
− | + | === GUID Partition Table (GPT) 特有の手順 === |
|
− | UEFI ファームウェアによっては {{ic|.efi}} ブータブルスタブが特定の名前で特定の場所に配置されていることが必要とされます: {{ic|$esp/EFI/boot/bootx64.efi}} ({{ic|$esp}} は UEFI パーティションのマウントポイントに置き換えて下さい)。そうしておかないと場合によって起動できなくなってしまうことがあります。幸いに、これを必要としない他のファームウェアでは問題は起きません。 |
||
+ | BIOS/[[GPT]] の構成では、[https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation BIOS ブートパーティション]が必要です。GRUB は {{ic|core.img}} をこのパーティションに埋め込みます。 |
||
− | 応急処置を行うには、必要なディレクトリを作成して、それから grub の {{ic|.efi}} スタブをコピーしてください: |
||
+ | {{Note| |
||
− | # mkdir $esp/EFI/boot |
||
+ | * この方法を試す前に、すべてのシステムでこのパーティショニング方式がサポートされているわけではないということを心に留めておいてください。詳細は [[パーティショニング#GUID Partition Table]] を見てください。 |
||
− | # cp $esp/EFI/grub_uefi/grubx64.efi $esp/EFI/boot/bootx64.efi |
||
+ | * BIOS ブートパーティションは BIOS/GPT のセットアップでのみ GRUB が必要とします。BIOS/MBR セットアップでは、GRUB は MBR の後にある隙間を {{ic|core.img}} のために使用します。しかし、GPT では最初のパーティションの前に未使用の領域があることは保証されていません。 |
||
+ | * [[UEFI]] システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは依然として [[EFI システムパーティション]]が必要です。 |
||
+ | }} |
||
+ | ディスク上にパーティションタイプ GUID {{ic|21686148-6449-6E6F-744E-656564454649}} の、ファイルシステムの無い 1 メビバイト (''fdisk'' や ''gdisk'' で {{ic|1=+1M}}) のパーティションを作成してください。 |
||
− | ==== ファームウェアのブートマネージャに GRUB エントリを作成する ==== |
||
+ | * [[fdisk]] では、パーティションタイプ {{ic|BIOS boot}} を選択してください。 |
||
− | {{ic|grub-install}} は自動でブートマネージャにメニューエントリを作成しようとします。作成されないときは、{{ic|efibootmgr}} を使ってメニューエントリを作成してください。また、UEFI モードで CD/USB を起動できないような問題については [[Unified Extensible Firmware Interface#ISO から UEFI ブータブル USB を作成する|Unified Extensible Firmware Interface#ISO から UEFI ブータブル USB を作成する]] を参照してください。 |
||
+ | * [[gdisk]] では、パーティションタイプコード {{ic|ef02}} を選択してください。 |
||
+ | * [[parted]] では、そのパーティションで {{ic|bios_grub}} フラグをセット/アクティブ化してください。 |
||
+ | このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。 |
||
− | ==== GRUB Standalone ==== |
||
+ | GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。''fdisk'' や ''gdisk'' では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。 |
||
− | {{Note|{{Pkg|grub}} パッケージには様々な grub-mkstandalone のフィックス (特に必須の {{ic|${cmdpath} }} サポート) が含まれていないのでスタンドアロンの GRUB EFI イメージでは {{AUR|grub-git}} パッケージを使って下さい。}} |
||
+ | === Master Boot Record (MBR) 特有の手順 === |
||
− | 全てのモジュールを UEFI アプリケーション内の memdisk に埋め込んだ {{ic|grubx64_standalone.efi}} アプリケーションを作成することができ、これによって GRUB UEFI モジュールやその他関連ファイルが利用するディレクトリを別に持つ必要がなくなります。これを行うには {{Pkg|grub}} に含まれている {{ic|grub-mkstandalone}} コマンドを使います。 |
||
+ | 通常、MBR でパーティションされた環境において [[MBR]] の後の隙間 (512 バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダーアライメントは問題になりません。しかしながら GRUB の {{ic|core.img}} 用に十分な領域を確保するために 1 から 2 MiB ほど MBR の後の領域をとることを推奨します ({{bug|24103}})。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために ({{ic|core.img}} の埋め込みとは関係ありません) 1 MiB [[パーティショニング#パーティションアライメント|パーティションアライメント]]をサポートしているパーティションツールを使うのが得策です。 |
||
− | # 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} }} 機能を正しく動作させるために必要です。}} |
||
+ | {{Pkg|grub}} パッケージを[[インストール]]してください ({{AUR|grub-legacy}} がインストールされている場合は置き換えられます。) 次に以下を実行してください: |
||
− | それから GRUB の設定ファイルを {{ic|$esp/EFI/grub/grub.cfg}} にコピーして [[Unified Extensible Firmware Interface#efibootmgr|efibootmgr]] を使って {{ic|$esp/EFI/grub/grubx64_standalone.efi}} の UEFI Boot Manager エントリを作成してください。 |
||
+ | # grub-install --target=i386-pc ''/dev/sdX'' |
||
− | ==== 技術的な情報 ==== |
||
+ | {{ic|i386-pc}} は実際のアーキテクチャに関わらず使用されます。{{ic|''/dev/sdX''}} は GRUB がインストールされる '''ディスク''' ('''パーティションではありません''') です。例えば、{{ic|/dev/sda}}、{{ic|/dev/nvme0n1}}、{{ic|/dev/mmcblk0}} です。ブロックデバイスの命名方法については [[デバイスファイル#ブロックデバイスの名前]] を参照してください。 |
||
− | GRUB EFI のファイルはいつでも設定ファイルが {{ic|${prefix}/grub.cfg}} にあることを期待しています。しかしながらスタンドアロンの GRUB EFI ファイルでは、{{ic|${prefix} }} は tar アーカイブの中に置かれスタンドアロンの GRUB EFI ファイルそれ自体に埋め込まれます (GRUB ではクォートのない {{ic|"(memdisk)"}} で示される)。この tar アーカイブには通常の GRUB EFI インストールで {{ic|/boot/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}} にあるとして読み込みます。 |
||
+ | |
||
+ | {{ic|/boot}} に [[LVM]] を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。 |
||
+ | {{Tip|USB メモリなどに GRUB をインストールする他の方法については [[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"}} を使います。 |
||
+ | {{ic|grub-install}} コマンドの詳細については、{{man|8|grub-install}} および [https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation GRUB Manual] を参照してください。 |
||
− | これでスタンドアロンの GRUB EFI ファイルと実際の {{ic|grub.cfg}} は EFI System Partition の中のディレクトリに (同じディレクトリである限り) 保存することが出来るようになり、持ち運びが容易になります。 |
||
== 設定 == |
== 設定 == |
||
175行目: | 183行目: | ||
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/ヒントとテクニック]] を見て下さい。 |
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/ヒントとテクニック]] を見て下さい。 |
||
− | {{Note|{{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}} |
+ | {{Note|{{ic|/etc/grub.d/}} 下のファイルや {{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}} |
+ | |||
+ | {{Warning|GRUB の新しいバージョンで設定ファイルの構文が変更された場合、ブートローダーをアップデート/再インストールしてください ([[#UEFI システム]] や [[#BIOS システム]] を見てください)。設定が一致しないと、システムが起動できなくなる可能性があります。}} |
||
==== メイン設定ファイルの生成 ==== |
==== メイン設定ファイルの生成 ==== |
||
− | インストールした後は、メインの設定ファイル {{ic|grub.cfg}} を生成する必要があります。生成 |
+ | インストールした後は、メインの設定ファイル {{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 していることが重要です。 |
||
− | {{Note|{{ic|/etc/default/grub}} や {{ic|/etc/grub.d/*}} に変更を加えた後は {{ic|grub.cfg}} を再生成する必要があることを覚えておいて下さい。}} |
||
− | {{Warning|パッケージバージョン 1:2.02.beta2-1 (2014-01-10) から grub-mkconfig は''異常な''設定ファイルを作成するようになっています。生成される {{ic|grub.cfg}} にはブートエントリが重複して含まれ、initramfs が見つからなかったりセルフコンパイルしたカーネルがメニューに表示されなかったりします ({{bug|38455}})。}} |
||
+ | {{Note|1=<nowiki></nowiki> |
||
− | ''grub-mkconfig'' ツールを使って {{ic|grub.cfg}} を生成してください: |
||
+ | * デフォルトのファイルパスは {{ic|/boot/grub/grub.cfg}} です、{{ic|/boot/grub/i386-pc/grub.cfg}} ではありません。 |
||
+ | * [[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|/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=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 が起動します。高度な設定は [[#デュアルブート]] を見てください。[[マルチブート USB ドライブ#ブートエントリ]]も参照。 |
||
+ | |||
+ | {{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}} 文を設定ファイルに追加するからです。 |
||
+ | |||
+ | {{Tip|{{ic|/etc/grub.d/40_custom}} は {{ic|/etc/grub.d/''nn''_custom}} を作成する際のテンプレートとして使うことができます。{{ic|''nn''}} の部分は優先順位で、スクリプトを実行する順番を決定します。スクリプトを実行する順番は GRUB ブートメニューエントリの配置を決定します。必要なスクリプトを確実に実行させるために、{{ic|''nn''}} は {{ic|06}} よりも大きくする必要があります。}} |
||
+ | |||
+ | カスタムのメニューエントリの例は [[#ブートメニューエントリの例]] を見てください。 |
||
==== 他の OS の検出 ==== |
==== 他の OS の検出 ==== |
||
− | ''grub-mkconfig'' |
+ | ''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 を追加、もしくはコメントアウトを外します。 |
||
+ | GRUB_DISABLE_OS_PROBER=false |
||
+ | |||
その後、もう一度試してください。 |
その後、もう一度試してください。 |
||
+ | {{Note| |
||
− | {{Note|毎回他の OS を含めるために ''grub-mkconfig'' を実行するたびにパーティションをマウントすることを忘れないでください。}} |
||
+ | * 正確なマウントポイントは重要ではありません。''os-prober'' は {{ic|mtab}} を読み込んで、起動可能なエントリを検索すべき場所を特定します。 |
||
+ | * 他のオペレーティングシステムをエントリに含めるために、''grub-mkconfig'' を実行するたびに対象のパーティションをマウントすることを忘れないでください。 |
||
+ | * ''os-prober'' は、chroot 内で実行すると正しく動作しないかもしれません。そのような場合は、再起動してシステムに入り、再び試してください。 |
||
+ | }} |
||
− | {{Tip|最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、[[GRUB/ヒントとテクニック#以前のエントリを思い出させる]] |
+ | {{Tip|最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、[[GRUB/ヒントとテクニック#以前のエントリを思い出させる]] を参照してください。}} |
− | ===== |
+ | ===== Windows ===== |
+ | UEFI モードでインストールされた Windows の場合、Windows Boot Manager ({{ic|bootmgfw.efi}}) を含んでいる [[EFI システムパーティション]]がマウントされていることを確認してください。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。 |
||
− | 多くの場合、Windows を含むパーティションは {{Pkg|os-prober}} によって自動的に検出されます。しかし、NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、[[NTFS-3G]] をインストールして再マウントしてみてください。 |
||
− | + | BIOS モードでインストールされた Windows の場合、Windows ''システムパーティション'' をマウントしてください (そのパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であるはずです)。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。 |
|
+ | |||
+ | {{Note|BIOS モードでインストールされた Windows の場合: |
||
+ | * NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、[[NTFS-3G]] をインストールして再マウントしてみてください。 |
||
+ | {{Out of date| Windows 7 以降、{{ic|bootmgr}} は[[Wikipedia:System partition and boot partition#Microsoft definition|システムパーティション]]内にあり、このパーティションは暗号化されていません。}} |
||
+ | * 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、[[cryptsetup]] や {{AUR|dislocker}} で実行できます。これで {{Pkg|os-prober}} が正しいエントリを追加できるはずです。 |
||
+ | }} |
||
==== 追加引数 ==== |
==== 追加引数 ==== |
||
− | カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。こ |
+ | カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。これら2つは互いに追加され、標準のブートエントリを作成する際にカーネルに渡されます。''recovery'' ブートエントリについては、{{ic|GRUB_CMDLINE_LINUX}} だけが生成時に使われます。 |
− | 両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic| |
+ | 両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic|1=GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=''uuid-of-swap-partition'' quiet"}} ({{ic|''uuid-of-swap-partition''}} は [[ハイバネート]]後に復帰できるようにするためのスワップパーティションの [[UUID]])。この例の設定では、(ハイバネートからの) 復帰をせず、メニューエントリからの起動中にカーネルメッセージを非表示にする {{ic|quiet}} も無いリカバリブートエントリを生成します。しかし、他の (標準の) メニューエントリはこれらのオプションを持ちます。 |
+ | デフォルトでは、''grub-mkconfig'' はルートファイルシステムの [[UUID]] を検出して、設定にそれを反映します。これを無効化するには、{{ic|1=GRUB_DISABLE_LINUX_UUID=true}} をアンコメントしてください。 |
||
− | GRUB のリカバリエントリを生成するには {{ic|/etc/default/grub}} で {{ic|<nowiki>#GRUB_DISABLE_RECOVERY=true</nowiki>}} をコメントアウトする必要があります。 |
||
+ | GRUB リカバリエントリを生成するには、{{ic|/etc/default/grub}} 内の {{ic|GRUB_DISABLE_RECOVERY}} が {{ic|true}} に設定されていない必要があります。 |
||
− | また、{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}} を使うこともできます ({{ic|${swap_uuid} }} は swap パーティションの [[永続的なブロックデバイスの命名|UUID]] に置き換えて下さい)。 |
||
+ | 詳細は [[カーネルパラメータ]] を参照してください。 |
||
− | 複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります: |
||
+ | ==== トップレベルのメニューエントリを設定する ==== |
||
− | {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/usr/lib/systemd/systemd"</nowiki>}} |
||
+ | デフォルトでは、''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 ==== |
==== LVM ==== |
||
+ | {{Warning|GRUB はシンプロビジョニングされた論理ボリュームをサポートしていません。}} |
||
− | [[LVM]] を {{ic|/boot}} で使っている場合、メニューエントリの行の前に次を追加してください: |
||
+ | {{ic|/boot}} や {{ic|/}} に [[LVM]] を使用している場合、{{ic|lvm}} モジュールをプリロードするようにしてください: |
||
− | insmod lvm |
||
+ | {{hc|/etc/default/grub|2= |
||
− | そしてメニューエントリで root を次のように指定してください: |
||
+ | GRUB_PRELOAD_MODULES="... lvm" |
||
+ | }} |
||
+ | ==== RAID ==== |
||
− | set root=lvm/''lvm_group_name''-''lvm_logical_boot_partition_name'' |
||
+ | GRUB は [[RAID]] ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール {{ic|mdraid09}} か {{ic|mdraid1x}} をロードする必要があります: |
||
− | サンプル: |
||
+ | {{hc|/etc/default/grub|2= |
||
− | # (0) Arch Linux |
||
+ | GRUB_PRELOAD_MODULES="... mdraid09 mdraid1x" |
||
− | 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 |
||
− | } |
||
+ | 例えば、{{ic|/dev/md0}} は以下のようになります: |
||
− | ==== RAID ==== |
||
− | GRUB には RAID ボリュームの便利な制御機能があります。ボリュームをネイティブに指定できる {{ic|insmod mdraid09}} または {{ic|mdraid1x}} を追加する必要があります。例えば、{{ic|/dev/md0}} は次のようになります: |
||
set root=(md/0) |
set root=(md/0) |
||
− | + | パーティショニングされた RAID ボリューム (例: {{ic|/dev/md0p1}}) は以下のようになります: |
|
+ | |||
set root=(md/0,1) |
set root=(md/0,1) |
||
− | + | {{ic|/boot}} パーティションに RAID1 を使用している場合 (あるいは、{{ic|/boot}} が RAID1 ルートパーティション上に存在する場合) に GRUB をインストールするには、BIOS システム上では、両方のドライブ上で ''grub-install'' を実行してください。例: |
|
+ | |||
# grub-install --target=i386-pc --debug /dev/sda |
# grub-install --target=i386-pc --debug /dev/sda |
||
# grub-install --target=i386-pc --debug /dev/sdb |
# grub-install --target=i386-pc --debug /dev/sdb |
||
− | ここで {{ic|/boot}} がある RAID1 アレイは {{ic|/dev/sda}} と {{ic|/dev/sdb}} に収容されます。 |
||
+ | ここでは、{{ic|/boot}} が存在する RAID1 アレイが、{{ic|/dev/sda}} と {{ic|/dev/sdb}} に存在するとしています。 |
||
− | {{Note|GRUB は2015年9月現在 [[Btrfs]] の RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 からの起動はサポートしていません。RAID 5/6 では GRUB によってサポートされている [[mdadm]] を使ってください。}} |
||
+ | {{Note|GRUB は [[Btrfs]] RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 はサポートしていません。RAID 5/6 に対しては [[mdadm]] を使用することができます (mdadm は GRUB によってサポートされています)。 |
||
− | ==== 暗号化 ==== |
||
− | + | ==== 暗号化された /boot ==== |
|
+ | GRUB には暗号化された {{ic|/boot}} を起動するための特別なサポートがあります。これは、[[LUKS]] ブロックデバイスをアンロックして、GRUB の設定を読み込み、[[initramfs]] と [[カーネル]] をそのブロックデバイスからロードすることにより行われます。このオプションは[[dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|暗号化されていないブートパーティション]]の問題を解決することを試みます。 |
||
− | ルートファイルシステムを暗号化して GRUB で使用するには、[[mkinitcpio]] に {{ic|encrypt}} フックまたは {{ic|sd-encrypt}} フック (systemd フックを使用している場合) を追加してください。詳しくは [[Dm-crypt/システム設定#mkinitcpio]] や [[Mkinitcpio#通常のフック]]を見てください。 |
||
+ | {{Tip|{{ic|/boot}} を別のパーティションに保存する必要は'''ありません'''。システムのルート {{ic|/}} ディレクトリツリー下に保存することもできます。}} |
||
− | {{ic|encrypt}} フックを使う場合、{{ic|cryptdevice}} パラメータを {{ic|/etc/default/grub}} に追加してください。以下の例では、{{ic|sda2}} パーティションを {{ic|/dev/mapper/cryptroot}} として暗号化しています: |
||
+ | {{Warning|GRUB 2.12rc1 の LUKS2 に対するサポートは限られています。詳細は [[#LUKS2]] セクションを見てください。}} |
||
− | {{hc|/etc/default/grub|2= |
||
− | GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot" |
||
− | }} |
||
+ | この機能を有効化するには、{{ic|/boot}} が存在するパーティションを通常通り [[LUKS]] を使って暗号化してください。そして、以下のオプションを {{ic|/etc/default/grub}} に追加してください。 |
||
− | {{ic|sd-encrypt}} フックを使用する場合、{{ic|luks.uuid}} を追加してください: |
||
− | {{hc|/etc/default/grub| |
+ | {{hc|/etc/default/grub|output= |
+ | GRUB_ENABLE_CRYPTODISK=y |
||
− | GRUB_CMDLINE_LINUX="luks.uuid=''UUID''" |
||
}} |
}} |
||
+ | このオプションは grub-install により使用され、grub の {{ic|core.img}} を生成します。 |
||
− | ''UUID'' は LUKS で暗号化したデバイスの UUID に置き換えてください。 |
||
− | + | このオプションを追加した後やパーティションを暗号化した後に [[#インストール|GRUB を(再)インストール]]することを忘れないでください。 |
|
+ | これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が {{ic|/boot}} マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]を使えば、これを防げます。 |
||
− | 暗号化デバイスのブートローダー設定に関する詳細は、[[Dm-crypt/システム設定#ブートローダー]]を見て下さい。 |
||
+ | {{Warning| |
||
− | {{Note|{{ic|/boot}} パーティションを暗号化したい場合、さらに設定が必要です。[[#Boot パーティション]]を見てください。}} |
||
+ | * [[#メイン設定ファイルの生成|メインの設定ファイルを生成]]したいときは、{{ic|/boot}} がマウントされていることを確認してください。 |
||
+ | * {{ic|/boot}} マウントポイントが関与するシステムアップデートを行うために、アップデートする前に、暗号化された {{ic|/boot}} がアンロックされていて、かつ、マウントされていることを確認してください。{{ic|/boot}} パーティションが別にある場合、[[crypttab]] を[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]と一緒に使うことでこれを自動化できます。 |
||
+ | }} |
||
+ | {{Note| |
||
− | {{Tip|GRUB Legacy の設定から更新する場合は、{{ic|/boot/grub/menu.lst.pacsave}} を確認して適切なデバイス・ラベルを加えて下さい。{{ic|kernel /vmlinuz-linux}} という文の後ろにあるはずです。}} |
||
+ | * 特殊なキーマップを使用している場合、デフォルトの 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}} を自動マウントできます。}} |
||
− | ===== Boot パーティション ===== |
||
+ | ===== LUKS2 ===== |
||
− | GRUB [https://www.gnu.org/software/grub/manual/grub.html#Simple-configuration パラメータ] {{ic|GRUB_ENABLE_CRYPTODISK}} を使うことで [[LUKS]] ブロックデバイスを開くときに GRUB にパスワードを要求させて、設定を読み込んでブロックデバイスから [[initramfs]] と[[カーネル]]をロードすることができます。このオプションは [[Dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|boot パーティションが暗号化されてない]]という問題を解決します。 |
||
+ | [[#インストール]] 章で説明されているように、{{ic|grub-install}} を使用して LUKS サポートありでブータブルな GRUB イメージを作成してください。ただし、いくつかの注意点があります: |
||
− | {{ic|/etc/default/grub}} に以下を追加することで機能が有効になります: |
||
− | GRUB_ENABLE_CRYPTODISK=y |
||
− | 設定した後は {{ic|/boot}} をマウントしてから ''grub-mkconfig'' を実行して[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]してください。 |
||
+ | * 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 はサポートされていません。 |
||
+ | * 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]}} |
||
− | * この機能を使うために {{ic|/boot}} を別パーティションにする必要はありません。システムの root {{ic|/}} ディレクトリツリー下に配置できます。ただし、どちらにしても起動するには二回パスフレーズを入力する必要があります。ひとつ目のパスワードは {{ic|/boot}} マウントポイントのロックを解除して、ふたつ目のパスワードは root ファイルシステムのロックを解除します。 |
||
+ | {{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}} を実行する必要があります。}} |
||
− | * {{ic|/boot}} マウントポイントも関連するシステムアップデートを実行するときは、暗号化された {{ic|/boot}} のロックが解除されて initramfs やカーネルによって再マウントされている必要があります。{{ic|/boot}} パーティションを分割している場合、{{ic|/etc/crypttab}} にエントリとキーファイルを追加することで再マウントさせることができます。[[Dm-crypt/システム設定#crypttab]] を参照。 |
||
+ | 起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、{{ic|cryptomount -a}} を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、{{ic|cryptomount -u $crypto_uuid}} を使用して特定のパーティションをマウントしてください。その後、通常通り {{ic|insmod normal}} と {{ic|normal}} で進めてください。 |
||
− | * 特殊なキーマップを使っている場合、デフォルトの GRUB では反映されていません。LUKS ブロックデバイスのロックを解除するためにパスフレーズを入力するときに問題になります。 |
||
+ | 正しいパスフレーズを入力したが {{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 アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。 |
||
− | * パスワードを入力するプロンプトに問題が発生する場合 (cryptouuid や cryptodisk のエラー、あるいは "device not found")、以下のように GRUB を再インストールしてみてください: |
||
− | |||
− | # grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub '''--modules="part_gpt part_msdos"''' |
||
=== grub.cfg のカスタマイズ === |
=== grub.cfg のカスタマイズ === |
||
318行目: | 350行目: | ||
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。 |
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。 |
||
− | * {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上に存在するパーティション ''Y'' を表します。パーティション番号は1から始まり、ディスク番号は0から始まります。 |
+ | * {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上に存在するパーティション ''Y'' を表します。パーティション番号は 1 から始まり、ディスク番号は 0 から始まります。 |
− | * {{ic|1=set default=''N''}} は |
+ | * {{ic|1=set default=''N''}} は、ユーザーが操作せずにタイムアウトした後に選択されるデフォルトのブートエントリを表します。 |
* {{ic|1=set timeout=''M''}} は、ユーザーの選択が無かった場合に ''M'' 秒の間待ってデフォルトのブートエントリが起動されることを表します。 |
* {{ic|1=set timeout=''M''}} は、ユーザーの選択が無かった場合に ''M'' 秒の間待ってデフォルトのブートエントリが起動されることを表します。 |
||
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} というタイトルのブートエントリを表します。 |
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} というタイトルのブートエントリを表します。 |
||
− | * {{ic|1=set root=(hd''X'',''Y'')}} はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に "root" パーティション({{ic|/}})下にあるディレクトリを指定しても構いません) |
+ | * {{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= |
||
+ | if [ "$grub_platform" = "efi" ]; then |
||
+ | insmod bli |
||
+ | fi |
||
+ | }} |
||
==== ブートメニューエントリの例 ==== |
==== ブートメニューエントリの例 ==== |
||
− | {{Tip| |
+ | {{Tip|以下のブートエントリは ''grub-mkconfig'' によって生成された {{ic|/boot/grub/grub.cfg}} でも使用可能です。以下を {{ic|/etc/grub.d/40_custom}} に追加して[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]するか、あるいは以下を直接 {{ic|/boot/grub/custom.cfg}} に追加してください。}} |
− | 複数の GRUB エントリーを管理するヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} カーネルを同時使用している場合は [[GRUB/ヒントとテクニック#エントリ]] を見てください。 |
+ | 複数の GRUB エントリーを管理するヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} カーネルを同時使用している場合は [[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。 |
− | [[Archiso]] と [ |
+ | [[Archiso]] と [https://archboot.com Archboot] のブートメニューエントリについては [[マルチブート USB ドライブ#ブートエントリ]] を見てください。 |
===== GRUB コマンド ===== |
===== GRUB コマンド ===== |
||
366行目: | 408行目: | ||
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。 |
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。 |
||
− | {{Tip|1=GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを {{ic|if}} 文で囲ってください |
+ | {{Tip|1=GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを {{ic|if}} 文で囲ってください: |
{{bc|1= |
{{bc|1= |
||
402行目: | 444行目: | ||
}} |
}} |
||
− | ====== |
+ | ====== ユニファイドカーネルイメージをチェインロード ====== |
[[セキュアブート]]に従って生成したか他の方法によって生成した [[Unified カーネルイメージ]]を持っているならば、それをブートメニューに追加できます。例えば: |
[[セキュアブート]]に従って生成したか他の方法によって生成した [[Unified カーネルイメージ]]を持っているならば、それをブートメニューに追加できます。例えば: |
||
411行目: | 453行目: | ||
insmod chain |
insmod chain |
||
search --no-floppy --set=root --fs-uuid ''FILESYSTEM_UUID'' |
search --no-floppy --set=root --fs-uuid ''FILESYSTEM_UUID'' |
||
− | chainloader /EFI/Linux/ |
+ | chainloader /EFI/Linux/arch-linux.efi |
} |
} |
||
}} |
}} |
||
462行目: | 504行目: | ||
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の [[EFI システムパーティション]]を見つけて、そのパーティションから Windows のブートローダーを実行することです。 |
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の [[EFI システムパーティション]]を見つけて、そのパーティションから Windows のブートローダーを実行することです。 |
||
− | {{Note| |
+ | {{Note|このメニューエントリは、UEFI ブートモードで実行中であり、かつ Windows のビット数が UEFI のビット数と一致する場合にのみ機能します。BIOS モードでインストールされた GRUB では機能しません。さらなる情報については [[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]]と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}} |
{{bc|1= |
{{bc|1= |
||
484行目: | 526行目: | ||
}} |
}} |
||
− | 代わりに、{{ic| |
+ | 代わりに、{{ic|lsblk --fs}} を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。 |
{{ic|$hints_string}} コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります: |
{{ic|$hints_string}} コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります: |
||
496行目: | 538行目: | ||
====== BIOS/MBR モードでインストールされた Windows ====== |
====== BIOS/MBR モードでインストールされた Windows ====== |
||
− | {{Note| |
+ | {{Note|GRUB は {{ic|bootmgr}} ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを [https://www.gnu.org/software/grub/manual/grub.html#Chain_002dloading チェインロード]する必要はもはやありません。}} |
− | {{Warning| |
+ | {{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}} という記述をすべて変更してください。 |
このセクションを通して Windows のパーティションは {{ic|/dev/sda1}} にあると仮定します。パーティションが異なる場合は {{ic|hd0,msdos1}} という記述をすべて変更してください。 |
||
− | {{Note| |
+ | {{Note|以下のメニューエントリは BIOS ブートモードでのみ機能します。UEFI モードでインストールされた GRUB では機能しません。[[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]] と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}} |
− | 両方の例で {{ic|'' |
+ | 両方の例で {{ic|''XXXX-XXXX''}} はファイルシステムの UUID を表しています。UUID は {{ic|lsblk --fs}} コマンドを使って得られます。実際の UUID に置き換えてください。 |
Windows Vista/7/8/8.1/10 では: |
Windows Vista/7/8/8.1/10 では: |
||
514行目: | 556行目: | ||
insmod ntfs |
insmod ntfs |
||
insmod ntldr |
insmod ntldr |
||
− | search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 '' |
+ | search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 ''XXXX-XXXX'' |
ntldr /bootmgr |
ntldr /bootmgr |
||
} |
} |
||
528行目: | 570行目: | ||
insmod ntfs |
insmod ntfs |
||
insmod ntldr |
insmod ntldr |
||
− | search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 '' |
+ | search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 ''XXXX-XXXX'' |
ntldr /ntldr |
ntldr /ntldr |
||
} |
} |
||
534行目: | 576行目: | ||
}} |
}} |
||
− | {{Note| |
+ | {{Note|GRUB をインストールすると Windows 8 が汚染される場合があります。この場合、{{ic|\boot\bcd}} (エラーコード {{ic|0xc000000f}})のエラーにより Windows が起動できなくなります。これを直すには Windows 回復コンソール(インストールディスク上にある {{ic|cmd.exe}})を開いて、以下を実行してください: |
X:\> bootrec.exe /fixboot |
X:\> bootrec.exe /fixboot |
||
X:\> bootrec.exe /RebuildBcd |
X:\> bootrec.exe /RebuildBcd |
||
− | {{ic|bootrec.exe /Fixmbr}} を'''実行しない'''でください。GRUB が吹き飛び |
+ | {{ic|bootrec.exe /Fixmbr}} を'''実行しない'''でください。GRUB が吹き飛びます。 |
+ | あるいは、トラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。 |
||
− | また、対象のハードドライブとブート可能ドライブの両方'''だけ'''を接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。}} |
||
+ | また、対象のハードドライブとブート可能ドライブの両方'''だけ'''を接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。 |
||
+ | }} |
||
===== ラベルを使う ===== |
===== ラベルを使う ===== |
||
554行目: | 598行目: | ||
} |
} |
||
− | + | == コマンドシェルを使う == |
|
+ | GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは {{ic|/boot/grub}} 内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合)、GRUB が起動に失敗する場合があります。このとき、コマンドシェルが表示されます。 |
||
− | {{Note|GRUB に自動で他のシステムを検索してほしい場合は、{{Pkg|os-prober}} をインストールするとよいでしょう。}} |
||
+ | GRUB は複数のシェル/プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、おそらく "normal" シェルに落とされるでしょう: |
||
− | ==== /etc/grub.d/40_custom と grub-mkconfig を使って自動生成する ==== |
||
+ | grub> |
||
− | 他のエントリを追加する最適の方法は {{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>}} |
||
+ | さらに深刻な問題 (例: GRUB が必要なファイルを見つけられないなど) があるときは、代わりに "rescue" シェルに落とされるでしょう: |
||
− | 例として、典型的な {{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 のメニューエントリ|ここ]]を見て下さい)。 |
||
+ | grub rescue> |
||
− | '''/etc/grub.d/40_custom''': |
||
+ | rescue シェルは通常のシェルの制限されたサブセットで、使える機能が非常に少なくなっています。rescue シェルが出てきた時は、まず "normal" モジュールの挿入を試して、"normal" シェルを起動してみて下さい: |
||
− | {{hc|/etc/grub.d/40_custom|<nowiki>#!/bin/sh |
||
− | exec tail -n +3 $0 |
||
− | # This file provides an easy way to add custom menu entries. Simply type the |
||
− | # menu entries you want to add after this comment. Be careful not to change |
||
− | # the 'exec tail' line above. |
||
− | |||
− | menuentry "HP / Microsoft Windows 8.1" { |
||
− | echo "Loading HP / Microsoft Windows 8.1..." |
||
− | insmod part_gpt |
||
− | insmod fat |
||
− | insmod search_fs_uuid |
||
− | insmod chain |
||
− | search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6 |
||
− | chainloader /EFI/Microsoft/Boot/bootmgfw.efi |
||
− | } |
||
− | |||
− | menuentry "HP / Microsoft Control Center" { |
||
− | echo "Loading HP / Microsoft Control Center..." |
||
− | insmod part_gpt |
||
− | insmod fat |
||
− | insmod search_fs_uuid |
||
− | insmod chain |
||
− | search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6 |
||
− | chainloader /EFI/HP/boot/bootmgfw.efi |
||
− | } |
||
− | |||
− | menuentry "System shutdown" { |
||
− | echo "System shutting down..." |
||
− | halt |
||
− | } |
||
− | |||
− | menuentry "System restart" { |
||
− | echo "System rebooting..." |
||
− | reboot |
||
− | }</nowiki>}} |
||
− | |||
− | ===== GNU/Linux のメニューエントリ ===== |
||
− | |||
− | 他のディストリが {{ic|sda2}} パーティションに存在する場合: |
||
− | |||
− | menuentry "Other Linux" { |
||
− | set root=(hd0,2) |
||
− | linux /boot/vmlinuz (必要に応じて他のオプションを追加してください) |
||
− | initrd /boot/initrd.img (他のカーネルが使用している場合) |
||
− | } |
||
− | |||
− | ====== 暗号化されている GNU/Linux のメニューエントリ ====== |
||
− | |||
− | {{bc|<nowiki>menuentry "Other Linux (Encrypted)"{ |
||
− | insmod luks |
||
− | cryptomount (hd0,2) |
||
− | set root=(crypto0) |
||
− | linux /boot/vmlinuz cryptdevice=/dev/sda2:cryptroot root=/dev/mapper/cryptroot (必要に応じて他のオプションを追加してください) |
||
− | initrd /boot/initrd.img (他のカーネルが使用している場合) |
||
− | }</nowiki>}} |
||
− | |||
− | ===== FreeBSD のメニューエントリ ===== |
||
− | 以下の3つの方法はどれも UFS(v2) でシングルパーティションに FreeBSD がインストールされている必要があります。ネストされた BSD パーティションテーブルが {{ic|sda4}} にある場合: |
||
− | |||
− | ====== カーネルを直接ロードする ====== |
||
− | {{bc|1= |
||
− | menuentry 'FreeBSD' { |
||
− | insmod ufs2 |
||
− | set root='hd0,gpt4,bsd1' |
||
− | ## or 'hd0,msdos4,bsd1', if using an IBM-PC (MS-DOS) style partition table |
||
− | kfreebsd /boot/kernel/kernel |
||
− | kfreebsd_loadenv /boot/device.hints |
||
− | set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s4a |
||
− | set kFreeBSD.vfs.root.mountfrom.options=rw |
||
− | } |
||
− | }} |
||
− | |||
− | ====== 埋め込まれたブートレコードをチェインロード ====== |
||
− | {{bc|1= |
||
− | menuentry 'FreeBSD' { |
||
− | insmod ufs2 |
||
− | set root='hd0,gpt4,bsd1' |
||
− | chainloader +1 |
||
− | } |
||
− | }} |
||
− | |||
− | ====== 伝統的な BSD の 2nd stage ローダーを実行 ====== |
||
− | {{bc|1= |
||
− | menuentry 'FreeBSD' { |
||
− | insmod ufs2 |
||
− | set root='(hd0,4)' |
||
− | kfreebsd /boot/loader |
||
− | } |
||
− | }} |
||
− | |||
− | ===== Windows XP のメニューエントリ ===== |
||
− | |||
− | ここでは Windows のパーティションが {{ic|sda3}} にあると仮定しています。実際に windows があるパーティションではなく、インストール時に windows が作成したシステムの予約済みパーティションに set root と chainloader を設定する必要があります。あなたのシステムの予約済みパーティションが {{ic|sda3}} の場合: |
||
− | |||
− | # (2) Windows XP |
||
− | menuentry "Windows XP" { |
||
− | set root="(hd0,3)" |
||
− | chainloader +1 |
||
− | } |
||
− | |||
− | Windows のブートローダーが GRUB とは完全に異なるハードドライブに存在する場合、Windows に GRUB が存在するのが最初のハードドライブだと信じこませる必要があるかもしれません。これは {{ic|drivemap}} を使ってできます。GRUB が {{ic|hd0}} に、Windows が {{ic|hd2}} にあるとするには、{{ic|set root}} の後に次を追加してください: |
||
− | |||
− | drivemap -s hd0 hd2 |
||
− | |||
− | ===== 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 |
||
− | |||
− | {{ic|$hints_string}} と {{ic|$fs_uuid}} は以下の2つのコマンドで知ることができます。{{ic|$fs_uuid}} のコマンドは: |
||
− | |||
− | # grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi |
||
− | 1ce5-7f28 |
||
− | |||
− | {{ic|$hints_string}} のコマンドは: |
||
− | |||
− | # 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 が {{ic|$esp}} にマウントされているということを前提にしています。場合によっては Windows の EFI ファイルのパスが異なっている可能性があります。 |
||
− | |||
− | ===== "シャットダウン" メニューエントリ ===== |
||
− | |||
− | {{bc|<nowiki>menuentry "System shutdown" { |
||
− | echo "System shutting down..." |
||
− | halt |
||
− | }</nowiki>}} |
||
− | |||
− | ===== "再起動" メニューエントリ ===== |
||
− | |||
− | {{bc|<nowiki>menuentry "System restart" { |
||
− | echo "System rebooting..." |
||
− | reboot |
||
− | }</nowiki>}} |
||
− | |||
− | ===== "ファームウェア設定" メニューエントリ (UEFI のみ) ===== |
||
− | |||
− | {{bc|<nowiki>menuentry "Firmware setup" { |
||
− | fwsetup |
||
− | }</nowiki>}} |
||
− | |||
− | ===== BIOS-MBR モードでインストールされた Windows ===== |
||
− | |||
− | {{Note|GRUB は {{ic|bootmgr}} の直接起動をサポートしており、もはや BIOS-MBR 環境で Windows を起動するためにパーティションブートセクタのチェインロードをする必要はありません。}} |
||
− | |||
− | {{Warning|{{ic|bootmgr}} が存在するのは'''システムパーティション'''であり、"実際に使っている" Windows のパーティション (一般的に C:) ではありません。{{ic|blkid}} で全ての UUID を表示した際、システムパーティションは {{ic|LABEL="SYSTEM RESERVED"}} もしくは {{ic|LABEL="SYSTEM"}} のパーティションであり容量は僅か 100 MB から 200 MB (Arch の boot パーティションとほぼ同じ大きさ) です。詳細は [[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 Vista/7/8 では: |
||
− | |||
− | # grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr |
||
− | 69B235F6749E84CE |
||
− | |||
− | # grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr |
||
− | --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 |
||
− | |||
− | {{Note|Windows XP では、上記のコマンドにある {{ic|bootmgr}} を {{ic|NTLDR}} に置き換えて下さい。さらに、SYSTEM_RESERVED パーティションは存在しない可能性があることに注意してください; あなたの Windows パーティション上に NTLDR ファイルがないか調べて下さい。}} |
||
− | |||
− | 次に、BIOS-MBR モードでインストールされた Windows (XP, Vista, 7, 8, 10) を起動するために下のコードを {{ic|/etc/grub.d/40_custom}} か {{ic|/boot/grub/custom.cfg}} に追加して、上で説明したように {{ic|grub-mkconfig}} を使って {{ic|grub.cfg}} を再生成してください: |
||
− | |||
− | 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 search_fs_uuid |
||
− | 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 では: |
||
− | |||
− | if [ "${grub_platform}" == "pc" ]; then |
||
− | menuentry "Microsoft Windows XP" { |
||
− | insmod part_msdos |
||
− | insmod ntfs |
||
− | insmod search_fs_uuid |
||
− | insmod ntldr |
||
− | search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE |
||
− | ntldr /bootmgr |
||
− | } |
||
− | fi |
||
− | |||
− | 上記で使っているパーティションの UUID の例である ''69B235F6749E84CE'' は {{ic|lsblk --fs}} コマンドで確認できます。 |
||
− | |||
− | {{Note|たまに (Windows 8 で GRUB をインストールした場合など)、{{ic|\boot\bcd}} でエラーが起こって Windows を起動できなくなることがあります (エラーコード {{ic|0xc000000f}})。Windows の回復コンソール (インストールディスクから cmd) を使って以下を実行することで修復することが可能です: |
||
− | x:\> "bootrec.exe /fixboot" |
||
− | x:\> "bootrec.exe /RebuildBcd". |
||
− | {{ic|bootrec.exe /Fixmbr}} を使わないで下さい、GRUB が消去されてしまいます。}} |
||
− | |||
− | {{ic|/etc/grub.d/40_custom}} をテンプレートとして使って {{ic|/etc/grub.d/nn_custom}} を作成することができます。{{ic|nn}} は優先順位を定義し、スクリプトが実行される順番を示します。スクリプトが実行される順番で grub のブートメニューの場所が決まります。 |
||
− | |||
− | {{Note|最初に必要なスクリプトが実行されるように {{ic|nn}} は 06 よりも大きな値にするべきです。}} |
||
− | |||
− | ==== EasyBCD と NeoGRUB を使って Windows とデュアルブート ==== |
||
− | |||
− | 現在 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}} を再生成してください。 |
||
− | |||
− | ==== parttool for hide/unhide ==== |
||
− | |||
− | {{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 |
||
− | |||
− | == コマンドシェルを使う == |
||
− | |||
− | 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 |
||
818行目: | 619行目: | ||
GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい: |
GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい: |
||
+ | |||
sh:grub> set pager=1 |
sh:grub> set pager=1 |
||
=== コマンドシェル環境を使ってオペレーティングシステムを起動する === |
=== コマンドシェル環境を使ってオペレーティングシステムを起動する === |
||
− | grub> |
+ | grub> |
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。 |
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。 |
||
829行目: | 631行目: | ||
''チェインロード''は現在のブートローダから別のブートローダをロードすることを意味します。 |
''チェインロード''は現在のブートローダから別のブートローダをロードすることを意味します。 |
||
− | 他のブートローダはディスク |
+ | 他のブートローダーは、パーティショニングされたディスク (MBR) の先頭や、パーティションレスディスク (VBR) のパーティションの先頭に組み込んだり、あるいは UEFI の場合は EFI バイナリとして組み込むことができます。 |
− | ==== パーティションのチェインロード ==== |
+ | ==== パーティションの VBR をチェインロード ==== |
set root=(hdX,Y) |
set root=(hdX,Y) |
||
848行目: | 650行目: | ||
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。 |
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。 |
||
− | ==== ディスクや |
+ | ==== ディスクの MBR やパーティションレスディスクの VBR をチェインロード ==== |
set root=hdX |
set root=hdX |
||
856行目: | 658行目: | ||
==== UEFI モードでインストールされた Windows/Linux のチェインロード ==== |
==== UEFI モードでインストールされた Windows/Linux のチェインロード ==== |
||
− | insmod |
+ | insmod fat |
set root=(hd0,gpt4) |
set root=(hd0,gpt4) |
||
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi |
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi |
||
boot |
boot |
||
+ | {{ic|insmod fat}} は、EFI システムパーティション上の Windows ブートローダーにアクセするために、FAT ファイルシステムモジュールをロードするために使用されます。 |
||
− | ''insmod ntfs'' を使うことで ntfs ファイルシステムモジュールをロードして Windows をロードすることができます。上記の例では (hd0,gpt4) または /dev/sda4 が EFI System Partition (ESP) です。''chainloader'' 行のエントリはチェインロードする .efi ファイルのパスを指定しています。 |
||
+ | {{ic|(hd0,gpt4)}} (すなわち {{ic|/dev/sda4}}) は、この例における EFI システムパーティションです。 |
||
+ | {{ic|chainloader}} 行のエントリは、チェインロードすべき ''.efi'' ファイルへのパスを指定しています。 |
||
==== 通常のロード ==== |
==== 通常のロード ==== |
||
871行目: | 675行目: | ||
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。 |
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。 |
||
− | GRUB rescue で利用できるコマンドには {{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=(hdX,Y)/grub}} と入力する)。}} |
||
+ | |||
+ | {{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 |
||
− | もしくは: |
+ | もしくは、単純に: |
+ | |||
grub rescue> insmod linux |
grub rescue> insmod linux |
||
− | これで {{ic|linux}} と {{ic|initrd}} コマンドが使えます |
+ | これで、より親しみのあるであろう {{ic|linux}} と {{ic|initrd}} のコマンドが使えます。 |
+ | |||
+ | 例えば、Arch Linux を起動する場合: |
||
− | 例えば、Arch Linux を起動: |
||
set root=(hd0,5) |
set root=(hd0,5) |
||
linux /boot/vmlinuz-linux root=/dev/sda5 |
linux /boot/vmlinuz-linux root=/dev/sda5 |
||
894行目: | 702行目: | ||
boot |
boot |
||
− | boot パーティションを分割しているなら、行を変更する必要があります: |
+ | boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります: |
+ | |||
− | {{Note|上の prefix と同じような形式で boot パーティションを手動で指定する必要があります。}} |
||
+ | {{Note|boot は別のパーティションであり、ルートパーティションの一部ではないので、上の prefix 変数と同じような形式で boot パーティションを手動で指定する必要があります。}} |
||
+ | |||
set root=(hd0,5) |
set root=(hd0,5) |
||
− | linux ( |
+ | linux (hd''X'',''Y'')/vmlinuz-linux root=/dev/sda6 |
− | initrd ( |
+ | initrd (hd''X'',''Y'')/initramfs-linux.img |
boot |
boot |
||
905行目: | 715行目: | ||
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。 |
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。 |
||
− | GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更し |
+ | GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更してください。詳しくは [[#インストール]] を見て下さい。 |
== GRUB を消去 == |
== GRUB を消去 == |
||
+ | === UEFI システム === |
||
− | 一般に、''grub'' を消去するにはインストール手順を逆の順番で行う必要があります。おそらく最後には残ったものをすべて綺麗にします。しかし、作業を始める前に、''grub'' を削除した後に PC が起動するかどうかや、どう起動させるかを考えておかなければなりません。''grub'' を削除したい理由はおそらく他のブートローダーを使いたくなったからでしょう。安全ですが少し難しい方法は ''grub'' を削除する前に他のブートローダーが動作することを確認することです。 |
||
− | 他のブートローダ |
+ | ''grub'' を削除する前に、他のブートローダがインストールされていて、GRUB の後を引き継ぐように設定されていることを確認してください。 |
− | $ efibootmgr |
||
− | そして、他のブートローダーが {{ic|BootOrder}} の行にあることを確認してください。もし ''grub'' が削除されていない場合、他のブートローダーが ''grub'' の前にあるはずです。もし ''grub'' がすでに削除されている場合、''grub'' はその行に存在しないはずです。しかし、これは PC が他のブートローダーを起動するための必要条件であり、十分条件ではないことに注意してください。また、''grub'' を完全に削除するための十分条件でもありません。 |
||
+ | {{hc|$ efibootmgr| |
||
− | UEFI マシンと非 UEFI マシンの両方において、{{ic|grub-install}} は ''grub'' のインストール作業の一部として手動で実行されます。UEFI の場合、{{ic|grub-install}} は仕事の1つとして {{ic|efibootmgr --create}} の実行と等価なことを行います。''grub'' を削除するには {{ic|grub-install}} の成果物を削除する必要があります。{{ic|efibootmgr --create}} と反対のことをするコマンドは {{ic|efibootmgr --delete-bootnum}} やこれと等価なプログラムです。{{ic|efibootmgr --delete-bootnum}} コマンドを実行すべきブートエントリの番号を得る一つの方法は(引数なしの) {{ic|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) |
||
+ | }} |
||
+ | |||
+ | {{ic|BootOrder}} で ''grub'' が最初のエントリになっている場合、[[systemd-boot]] などの他のブートローダをインストールして最初のエントリにしてください。その後、''bootnum'' を使って ''grub'' を削除することができます。 |
||
+ | |||
+ | # efibootmgr --delete-bootnum -b 1 |
||
+ | |||
+ | また、{{ic|''esp''/EFI/grub}} と {{ic|/boot/grub}} ディレクトリも削除してください。 |
||
+ | |||
+ | === BIOS システム === |
||
+ | ''grub'' を他の BIOS ブートローダに置き換えるには、単に新しいブートローダをインストールしてください (そうすることで、[[パーティショニング#Master Boot Record (bootstrap code)|MBR ブートコード]]が上書きされます)。 |
||
− | {{ic|grub-install}} は {{ic|/boot/grub}} ディレクトリを作成し、これは手動で削除する必要があります。しかし、''grub'' を再びインストールするためにこのディレクトリを残しておきたいユーザーもいるでしょう。 |
||
+ | {{ic|grub-install}} は {{ic|/boot/grub}} ディレクトリを作成するので、これは手動で削除する必要があります。しかし、''grub'' をまたインストールするかもしれない場合は、このディレクトリを残しておいたほうが良いかもしれません。 |
||
− | GPT/UEFI に移行した後に [[パーティショニング#Master Boot Record (bootstrap code)|MBR boot code]] を削除したい場合は [[dd#ブートローダーの削除|dd を使って]]ください: |
||
+ | UEFI/GPT に移行した後は、[[dd#ブートローダーの削除|dd を使って MBR ブートコードを削除する]]ことができます。 |
||
− | # dd if=/dev/zero of=/dev/sd''X'' bs=440 count=1 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
929行目: | 751行目: | ||
GRUB が root のファイルシステムをサポートしていない場合、代替の {{ic|/boot}} パーティションをサポートのあるファイルシステムで作成する必要があります。開発バージョンの GRUB である {{aur|grub-git}} が該当するファイルシステムをネイティブサポートしている場合があります。 |
GRUB が root のファイルシステムをサポートしていない場合、代替の {{ic|/boot}} パーティションをサポートのあるファイルシステムで作成する必要があります。開発バージョンの GRUB である {{aur|grub-git}} が該当するファイルシステムをネイティブサポートしている場合があります。 |
||
− | + | サポートされないファイルシステムで 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 パーティションからブートファイルを正しく読み込むことができません。 |
GRUB はバージョン 2.0.4 より [[F2FS]] をサポートしていますが、{{ic|extra_attr}} フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。 |
||
− | |||
− | === Intel BIOS が GPT をブートしない === |
||
− | |||
− | ==== MBR ==== |
||
− | |||
− | Intel BIOS によっては起動時に最低でも1つ起動可能な MBR パーティションが必要なため、GPT でパーティションされたブートセットアップが起動できなくなることがあります。 |
||
− | |||
− | この問題は fdisk を使って GPT パーティションのひとつ (GRUB のために作成した 1007 KiB のパーティションが好ましい) を MBR でブータブルだと印をつけることで回避できます。fdisk を使って次のコマンドを実行してください: fdisk をインストールするディスクで起動し (例: {{ic|fdisk /dev/sda}})、{{ic|a}} を押してから数字を入力してブータブルにしたいパーティション (おそらく #1) を選択してください。最後に {{ic|w}} を押して変更を MBR に書き込みます。 |
||
− | |||
− | {{Note|ブータブルの設定は GParted ではなく、{{ic|fdisk}} などで行う必要があります。GParted は MBR で bootable フラグを設定しないからです。}} |
||
− | |||
− | 最新版の parted では {{ic|disk_toggle pmbr_boot}} オプションを使うことができます。実行後 Disk Flags に pmbr_boot と表示されることを確認してください。 |
||
− | # parted /dev/sd''x'' disk_toggle pmbr_boot |
||
− | # parted /dev/sd''x'' print |
||
− | |||
− | 詳細は [http://www.rodsbooks.com/gdisk/bios.html ここ] から見ることができます。 |
||
− | |||
− | ==== EFI パス ==== |
||
− | |||
− | UEFI ファームウェアによっては UEFI NVRAM ブートエントリを表示する前に特定の場所にブータブルファイルを必要とします。この場合、{{ic|grub-install}} は {{ic|efibootmgr}} に GRUB をブートするエントリを追加するように指示しますが、VisualBIOS のブートオーダーセレクタではエントリが表示されません。解決方法は特定の場所にファイルを配置することです。EFI パーティションが {{ic|/boot/efi/}} の場合、以下のコマンドで解決します: |
||
− | |||
− | mkdir /boot/efi/EFI/boot |
||
− | cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi |
||
− | |||
− | この解決方法は2014年1月、Intel DH87MC マザーボードのファームウェアで確認しました。 |
||
=== デバッグメッセージを有効にする === |
=== デバッグメッセージを有効にする === |
||
+ | |||
+ | {{Note|この変更は[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]すると上書きされます。}} |
||
以下を {{ic|grub.cfg}} に追加してください: |
以下を {{ic|grub.cfg}} に追加してください: |
||
+ | |||
− | |||
set pager=1 |
set pager=1 |
||
set debug=all |
set debug=all |
||
978行目: | 777行目: | ||
==== よくあるインストール時のエラー ==== |
==== よくあるインストール時のエラー ==== |
||
+ | * 一部の 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]] を見てください。 |
||
− | * grub-install の実行時に sysfs や procfs に関する問題が表示される場合、{{ic|modprobe efivars}} を実行してください。[[Unified Extensible Firmware Interface#UEFI 変数]] を参照。 |
||
+ | * ''sysfs'' か ''procfs'' がある状態で ''grub-install'' を実行すると問題が発生し、{{ic|modprobe efivarfs}} を実行しなければならないと言われる場合、[[Unified Extensible Firmware Interface#efivarfs のマウント|efivarfs をマウント]]して上記のコマンドを実行してみてください。 |
||
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。 |
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。 |
||
− | * grub-install |
+ | * grub-install の実行後に {{ic|error: ''esp'' doesn't look like an EFI partition}} と表示される場合、おそらくパーティションが [[FAT32]] でフォーマットされていません。 |
+ | |||
+ | ==== ファームウェアブートマネージャーに GRUB エントリを作成する ==== |
||
+ | |||
+ | {{ic|grub-install}} は自動的にブートマネージャーにメニューエントリを追加しようと試みます。もし GRUB がそれを行わない場合、[[UEFI#efibootmgr]] を見て、{{ic|efibootmgr}} を使ってメニューエントリを作成する指示を読んでください。しかし、[[UEFI#ISO から UEFI ブータブル USB を作成する]] にあるように、よくある原因は CD/USB を UEFI モードで起動していないというものです。 |
||
+ | |||
+ | GRUB エントリをファームウェアブートマネージャに作成する例として、{{ic|efibootmgr -c}} を考えてみましょう。これは、{{ic|/dev/sda1}} が EFI システムパーティションであり、{{ic|/boot/efi}} にマウントされていると仮定します。これは {{ic|efibootmgr}} のデフォルトの挙動です。このツールは、("Linux" という名前の) 新しいブートオプションを作成し、それをブート順序リストの1番目に配置します。オプションを渡すことでデフォルトの挙動を変更できます。デフォルトの OS ローダーは {{ic|\EFI\arch\grub.efi}} です。 |
||
==== レスキューシェルが起動する ==== |
==== レスキューシェルが起動する ==== |
||
+ | GRUB はロードされたが、エラーが表示されずにレスキューシェルに落とされる場合、以下の2つの理由のうち1つが原因である可能性があります: |
||
− | GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。 |
||
+ | |||
+ | * {{ic|grub.cfg}} が存在しないか、場所を間違えている。{{ic|--boot-directory}} を使って GRUB UEFI をインストールして、{{ic|grub.cfg}} が存在しない場合に起こります。 |
||
+ | * ブートパーティションが変更された ({{ic|grubx64.efi}} ファイルにハードコードされています)。 |
||
==== GRUB UEFI がロードされない ==== |
==== GRUB UEFI がロードされない ==== |
||
− | + | 有効な UEFI の例: |
|
+ | |||
− | {{hc|# efibootmgr -v| |
||
+ | {{hc|# efibootmgr -u| |
||
BootCurrent: 0000 |
BootCurrent: 0000 |
||
Timeout: 3 seconds |
Timeout: 3 seconds |
||
BootOrder: 0000,0001,0002 |
BootOrder: 0000,0001,0002 |
||
− | Boot0000* |
+ | Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi) |
− | Boot0001* Shell |
+ | Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi) |
− | Boot0002* Festplatte |
+ | Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI |
}} |
}} |
||
− | 画面が数秒間真っ暗になってその後次のブートオプションが試行される場合、[https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 この投稿]によると、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 をデフォルト/フォールバックのブートパスにインストールすることです |
+ | 一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、{{ic|grub-install}} が、GRUB を起動するエントリが {{ic|efibootmgr}} によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです: |
# grub-install --target=x86_64-efi --efi-directory=''esp'' '''--removable''' |
# grub-install --target=x86_64-efi --efi-directory=''esp'' '''--removable''' |
||
1,014行目: | 825行目: | ||
=== Invalid signature === |
=== Invalid signature === |
||
− | (パーティションを再設定したりハードドライブを追加した |
+ | (例えば、パーティションを再設定したり、追加のハードドライブを追加したりしたあとで) 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 がカーネルと |
+ | GRUB がカーネルと初期 RAM ディスクをロードした後に、エラーメッセージが表示されずにフリーズする場合、{{ic|add_efi_memmap}} カーネルパラメータを削除してみてください。 |
=== 他の OS から Arch が見つからない === |
=== 他の OS から Arch が見つからない === |
||
− | 他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[公式リポジトリ]]にある {{ |
+ | 他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[公式リポジトリ]]にある {{Pkg|lsb-release}} パッケージから利用可能です。 |
=== chroot でインストールした時に警告が表示される === |
=== chroot でインストールした時に警告が表示される === |
||
+ | (システムのインストール中などに) chroot 環境で LVM システム上に GRUB をインストールする際に、以下のような警告が発生する場合があります: |
||
− | 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 中は利用できないのが原因です。これらの警告によってシステムが起動できなくなるということはないので、安心してインストールを続行してください。 |
||
+ | |||
+ | /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. |
||
+ | |||
+ | これは、{{ic|/run}} が chroot 内で利用可能でないから起こります。すべてが正しく行われていれば、これらの警告のせいでシステムが起動できなくなることはありません。インストールを継続することができます。 |
||
=== GRUB のロードが遅い === |
=== GRUB のロードが遅い === |
||
1,036行目: | 857行目: | ||
=== error: unknown filesystem === |
=== error: unknown filesystem === |
||
+ | |||
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 を再インストール・再設定してください。 |
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 を再インストール・再設定してください。 |
||
+ | |||
+ | また、このエラーは [[ext4]] ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません: |
||
+ | * {{ic|large_dir}} - サポートされません。 |
||
+ | * {{ic|metadata_csum_seed}} - GRUB 2.11 でサポートされます ([https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 コミット]). |
||
+ | |||
+ | {{Warning| {{ic|/boot}} ファイルシステム上で[[ファイルシステム]]の新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。}} |
||
=== grub-reboot で再設定されない === |
=== grub-reboot で再設定されない === |
||
1,042行目: | 870行目: | ||
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}} を行ってください)。 |
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 のせいでインストールができない === |
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: {{ic|/dev/sdx}})、後からパーティションテーブルを書き込むと、Btrfs のフォーマットが一部残留します。ほとんどのユーティリティや OS は残留した Btrfs を認識できないため、GRUB は (たとえ --force が付けられていても) インストールを拒否します: |
パーティションテーブルを作成しないで 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: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet.. |
||
− | # grub-install: error: filesystem `btrfs' |
+ | # grub-install: error: filesystem `btrfs' does not support blocklists. |
ドライブを完全に消去してもいいですが、{{ic|wipefs -o 0x10040 /dev/sdx}} を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。 |
ドライブを完全に消去してもいいですが、{{ic|wipefs -o 0x10040 /dev/sdx}} を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。 |
||
1,053行目: | 881行目: | ||
=== Windows 8/10 が認識されない === |
=== Windows 8/10 が認識されない === |
||
− | Windows 8/10 の "高速スタートアップ" |
+ | Windows 8/10 の "高速スタートアップ"、"ハイブリッドブート"、"Hiberboot" と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができなくなる可能性があります。そのため {{ic|grub-mkconfig}} が Windows を認識することができなくなります。Windows で高速スタートアップを無効化することで GRUB のメニューに追加することができるようになるはずです。 |
+ | === grub-rescue プロンプトと暗号化済み /boot === |
||
− | === VirtualBox EFI モード === |
||
+ | [[#暗号化された /boot|暗号化済みの /boot]] を使用している場合に間違ったパスワードを入力してしまうと grub-rescue プロンプトに入ります。 |
||
− | バージョン6.1以前の VirtualBox では [[#デフォルト/フォールバックのブートパス|デフォルト/フォールバックのブートパス]] に GRUB をインストールしてください。 |
||
+ | |||
+ | この grub-rescue プロンプトでは出来ることが限られています。以下のコマンドを使ってブートを完了させます: |
||
− | === Device /dev/xxx not initialized in udev database even after waiting 10000000 microseconds === |
||
− | |
||
− | If grub-mkconfig hangs and gives error: {{ic|WARNING: Device /dev/''xxx'' not initialized in udev database even after waiting 10000000 microseconds}}. |
||
− | |
||
− | You may need to provide {{ic|/run/lvm/}} access to the chroot environment using: |
||
− | |
||
− | # mkdir /mnt/hostlvm |
||
− | # mount --bind /run/lvm /mnt/hostlvm |
||
− | # arch-chroot /mnt |
||
− | # ln -s /hostlvm /run/lvm |
||
− | |
||
− | See {{Bug|61040}} and [https://bbs.archlinux.org/viewtopic.php?pid=1820949#p1820949 workaround]. |
||
− | |
||
− | === GRUB rescue and encrypted /boot === |
||
− | |
||
− | When using an [[#Encrypted /boot|encrypted /boot]], and you fail to input a correct password, you will be dropped in grub-rescue prompt. |
||
− | |
||
− | This grub-rescue prompt has limited capabilities. Use the following commands to complete the boot: |
||
{{bc| |
{{bc| |
||
grub rescue> cryptomount <partition> |
grub rescue> cryptomount <partition> |
||
1,082行目: | 894行目: | ||
grub rescue> 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:GNU GRUB]] |
+ | * [[Wikipedia:ja:GNU GRUB]] |
* [https://www.gnu.org/software/grub/manual/grub.html 公式 GRUB マニュアル] |
* [https://www.gnu.org/software/grub/manual/grub.html 公式 GRUB マニュアル] |
||
* [https://help.ubuntu.com/community/Grub2 Ubuntu wiki の GRUB ページ] |
* [https://help.ubuntu.com/community/Grub2 Ubuntu wiki の GRUB ページ] |
||
* [https://help.ubuntu.com/community/UEFIBooting UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ] |
* [https://help.ubuntu.com/community/UEFIBooting UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ] |
||
− | * [[Wikipedia: |
+ | * [[Wikipedia:BIOS Boot partition]] |
− | * [https://web.archive.org/web/20160424042444/http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html#Editing_etcgrub.d05_debian_theme |
+ | * [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] |
+ | |||
− | * [https://archived.forum.manjaro.org/t/detecting-efi-files-and-booting-them-from-grub/38083 efi ファイルを検出して grub から起動する] |
||
+ | {{TranslationStatus|GRUB|2024-01-11|796348}} |
2024年4月24日 (水) 20:12時点における版
関連記事
GRUB (GRand Unified Bootloader) はブートローダーです。現在の GRUB は GRUB 2 とも呼ばれています。元の GRUB (GRUB Legacy) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。
目次
- 1 サポートされているファイルシステム
- 2 UEFI システム
- 3 BIOS システム
- 4 設定
- 5 コマンドシェルを使う
- 6 GRUB を消去
- 7 トラブルシューティング
- 7.1 サポートのないファイルシステム
- 7.2 デバッグメッセージを有効にする
- 7.3 msdos-style エラーメッセージ
- 7.4 UEFI
- 7.5 Invalid signature
- 7.6 起動中にフリーズする
- 7.7 他の OS から Arch が見つからない
- 7.8 chroot でインストールした時に警告が表示される
- 7.9 GRUB のロードが遅い
- 7.10 error: unknown filesystem
- 7.11 grub-reboot で再設定されない
- 7.12 古い Btrfs のせいでインストールができない
- 7.13 Windows 8/10 が認識されない
- 7.14 grub-rescue プロンプトと暗号化済み /boot
- 7.15 GRUB をインストールしたが起動時にメニューが表示されない
- 8 参照
サポートされているファイルシステム
GRUB には複数のファイルシステム (特に重要なものとしては FAT32、ext4、Btrfs、XFS) に対する独自のサポートがあります。注意事項に関しては #サポートのないファイルシステム 章を見てください。
UEFI システム
インストール
まず、grub と efibootmgr をインストールしてください。GRUB はブートローダである一方、efibootmgr はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。
そして、以下の手順に従って GRUB をディスクにインストールしてください:
- EFI システムパーティションをマウントしてください。そして、このセクションの後の部分で出てくる
esp
という記述をそのマウントポイントに置き換えてください。 - ブートローダの識別子を選んでください、ここでは仮に
GRUB
としましょう。esp/EFI/
にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。 - 以下のコマンドを実行して、GRUB EFI アプリケーション
grubx64.efi
をesp/EFI/GRUB/
に、モジュールを/boot/grub/x86_64-efi/
にインストールしてください。
# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB
上記のインストール作業が完了した後、メインの GRUB ディレクトリが /boot/grub/
に作成されています。別の場所を指定する方法については GRUB/ヒントとテクニック#代替インストール方法 を見てください。grub-install
はファームウェアのブートマネージャにもエントリを作成しようとすることに注意してください。その名前は上記の例では GRUB
となります。しかし、ブートエントリが埋まっていると、これは失敗します。この場合は efibootmgr を使って必要ないエントリを削除してください。
設定を確定したあとにメインの設定ファイルを生成することを忘れないでください。
問題が発生した場合は 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-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、vmlinuz と initramfs のイメージが含まれているファイルシステムを読むために必要なモジュール全てが 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_video
、boot
、btrfs
、cat
、chain
、configfile
、echo
、efifwsetup
、efinet
、ext2
、fat
、font
、gettext
、gfxmenu
、gfxterm
、gfxterm_background
、gzio
、halt
、help
、hfsplus
、iso9660
、jpeg
、keystatus
、loadenv
、loopback
、linux
、ls
、lsefi
、lsefimmap
、lsefisystab
、lssal
、memdisk
、minicmd
、normal
、ntfs
、part_apple
、part_msdos
、part_gpt
、password_pbkdf2
、png
、probe
、reboot
、regexp
、search
、search_fs_uuid
、search_fs_file
、search_label
、sleep
、smbios
、squash4
、test
、true
、video
、xfs
、zfs
、zfscrypt
、zfsinfo
- x84_64-efi アーキテクチャ用の "プラットフォーム固有" のモジュール。例えば:
play
: ブート中に音を鳴らすcpuid
: ブート時に CPU の機能を確認するtpm
: Measured Boot / Trusted Platform Modules をサポートする
- "高度な" モジュール。以下が含まれます:
cryptodisk
: plain モードで暗号化されたディスクからブートするgcry_アルゴリズム
: 特定のハッシュアルゴリズムと暗号化アルゴリズムをサポートするluks
: LUKS で暗号化されたディスクからブートするlvm
: LVM 論理ボリュームディスクからブートするmdraid09
、mdraid1x
、raid5rec
、raid6rec
: 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 21686148-6449-6E6F-744E-656564454649
の、ファイルシステムの無い 1 メビバイト (fdisk や gdisk で +1M
) のパーティションを作成してください。
- fdisk では、パーティションタイプ
BIOS boot
を選択してください。 - gdisk では、パーティションタイプコード
ef02
を選択してください。 - parted では、そのパーティションで
bios_grub
フラグをセット/アクティブ化してください。
このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。
GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。fdisk や gdisk では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。
Master Boot Record (MBR) 特有の手順
通常、MBR でパーティションされた環境において MBR の後の隙間 (512 バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダーアライメントは問題になりません。しかしながら GRUB の core.img
用に十分な領域を確保するために 1 から 2 MiB ほど MBR の後の領域をとることを推奨します (FS#24103)。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために (core.img
の埋め込みとは関係ありません) 1 MiB パーティションアライメントをサポートしているパーティションツールを使うのが得策です。
インストール
grub パッケージをインストールしてください (grub-legacyAUR がインストールされている場合は置き換えられます。) 次に以下を実行してください:
# grub-install --target=i386-pc /dev/sdX
i386-pc
は実際のアーキテクチャに関わらず使用されます。/dev/sdX
は GRUB がインストールされる ディスク (パーティションではありません) です。例えば、/dev/sda
、/dev/nvme0n1
、/dev/mmcblk0
です。ブロックデバイスの命名方法については デバイスファイル#ブロックデバイスの名前 を参照してください。
次に、メイン設定ファイルを生成する必要があります。
/boot
に LVM を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。
grub-install
コマンドの詳細については、grub-install(8) および GRUB Manual を参照してください。
設定
インストールされたシステムでは、GRUB は起動の度に設定ファイル /boot/grub/grub.cfg
をロードします。ツールを使う場合は、#grub.cfg の生成 を、手動で作成する場合は #grub.cfg のカスタマイズ を参照してください。
grub.cfg の生成
このセクションでは /etc/default/grub
設定ファイルの編集についてだけ扱っています。他のオプションは GRUB/ヒントとテクニック を見て下さい。
メイン設定ファイルの生成
インストールした後は、メインの設定ファイル /boot/grub/grub.cfg
を生成する必要があります。生成プロセスは、/etc/default/grub
内の様々なオプションや /etc/grub.d/
下のスクリプトによって制御されます。/etc/default/grub
におけるオプションのリストと、それぞれのオプションの簡潔な説明は、GNU のドキュメントを参照してください。
追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムのルートファイルシステムを判定し、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに 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
文を設定ファイルに追加するからです。
カスタムのメニューエントリの例は #ブートメニューエントリの例 を見てください。
他の OS の検出
grub-mkconfig で、インストールされている他のシステムを検索して自動的にメニューに追加するには、 os-prober パッケージを インストール して、他のシステムが起動するパーティションをマウントしてください。その後、grub-mkconfig を再実行します。もし、Warning: os-prober will not be executed to detect other bootable partitions
と出力されたら、/etc/default/grub
を編集して次の行を追加/アンコメントしてください:
GRUB_DISABLE_OS_PROBER=false
その後、もう一度試してください。
Windows
UEFI モードでインストールされた Windows の場合、Windows Boot Manager (bootmgfw.efi
) を含んでいる EFI システムパーティションがマウントされていることを確認してください。root として os-prober
を実行すると、Windows のエントリを検出・生成します。
BIOS モードでインストールされた Windows の場合、Windows システムパーティション をマウントしてください (そのパーティションのファイルシステムラベルは System Reserved
(システムで予約済み
) か SYSTEM
であるはずです)。root として os-prober
を実行すると、Windows のエントリを検出・生成します。
追加引数
カスタムの追加引数を Linux イメージに渡すために、/etc/default/grub
で GRUB_CMDLINE_LINUX
と GRUB_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_RECOVERY
が true
に設定されていない必要があります。
詳細は カーネルパラメータ を参照してください。
トップレベルのメニューエントリを設定する
デフォルトでは、grub-mkconfig は、含まれているカーネルを sort -V
を使ってソートし、それらの中の最初のカーネルをトップレベルのエントリとして使用します。すなわち、例えば /boot/vmlinuz-linux-lts
は /boot/vmlinuz-linux
より前に来るので、linux-lts と linux の両方がインストールされている場合、LTS カーネルがトップレベルのメニューエントリとなります。これは、望ましくない場合があるでしょう。この挙動は、/etc/default/grub
内の GRUB_TOP_LEVEL=path_to_kernel"
を指定することでオーバーライドすることができます。例えば、標準のカーネルをトップレベルのメニューエントリにするには、GRUB_TOP_LEVEL="/boot/vmlinuz-linux"
を使用します。
LVM
/boot
や /
に LVM を使用している場合、lvm
モジュールをプリロードするようにしてください:
/etc/default/grub
GRUB_PRELOAD_MODULES="... lvm"
RAID
GRUB は RAID ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール mdraid09
か mdraid1x
をロードする必要があります:
/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
が存在するパーティションを通常通り LUKS を使って暗号化してください。そして、以下のオプションを /etc/default/grub
に追加してください。
/etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
このオプションは grub-install により使用され、grub の core.img
を生成します。
このオプションを追加した後やパーティションを暗号化した後に GRUB を(再)インストールすることを忘れないでください。
これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が /boot
マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。キーファイルを使えば、これを防げます。
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 のみのサポートです。
起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、cryptomount -a
を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、cryptomount -u $crypto_uuid
を使用して特定のパーティションをマウントしてください。その後、通常通り insmod normal
と normal
で進めてください。
正しいパスフレーズを入力したが Invalid passphrase
というエラーにより即座に戻される場合、正しい暗号化モジュールを指定していることを確認してください。cryptsetup luksDump /dev/nvme0n1p2
を使って、ハッシュ関数 (SHA-256, SHA-512) とインストールされているモジュール (gcry_sha256
, gcry_sha512
) が一致するか、PBKDF アルゴリズムが pbkdf2 であるかを確認してください。cryptsetup luksConvertKey --hash sha256 --pbkdf pbkdf2 /dev/nvme0n1p2
を使えば、ハッシュと PBDKDF アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。
grub.cfg のカスタマイズ
このセクションでは grub-mkconfig に頼らずに /boot/grub/grub.cfg
内にある GRUB のブートエントリーを手動で作成する方法について言及します。
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。
(hdX,Y)
はディスク X 上に存在するパーティション Y を表します。パーティション番号は 1 から始まり、ディスク番号は 0 から始まります。set default=N
は、ユーザーが操作せずにタイムアウトした後に選択されるデフォルトのブートエントリを表します。set timeout=M
は、ユーザーの選択が無かった場合に M 秒の間待ってデフォルトのブートエントリが起動されることを表します。menuentry "title" {entry options}
はtitle
というタイトルのブートエントリを表します。set root=(hdX,Y)
はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に "root" パーティション (/
) 下にあるディレクトリを指定しても構いません)
LoaderDevicePartUUID
systemd-gpt-auto-generator(8) が GPT パーティションの自動マウントをするために必要な LoaderDevicePartUUID
UEFI 変数を GRUB で設定するには、grub.cfg
で bli
モジュールをロードしてください:
if [ "$grub_platform" = "efi" ]; then insmod bli fi
ブートメニューエントリの例
複数の GRUB エントリーを管理するヒントとして、例えば linux と linux-lts カーネルを同時使用している場合は GRUB/ヒントとテクニック#複数のエントリ を見てください。
Archiso と Archboot のブートメニューエントリについては マルチブート USB ドライブ#ブートエントリ を見てください。
GRUB コマンド
"Shutdown" メニューエントリ
menuentry "System shutdown" { echo "System shutting down..." halt }
"Restart" メニューエントリ
menuentry "System restart" { echo "System rebooting..." reboot }
"UEFI Firmware Settings" メニューエントリ
if [ ${grub_platform} == "efi" ]; then menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' { fwsetup } fi
EFI バイナリ
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。
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.efi
を esp/EFI/tools/
にコピーしてください。
menuentry "gdisk" { insmod fat insmod chain search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi chainloader /EFI/tools/gdisk_x64.efi }
ユニファイドカーネルイメージをチェインロード
セキュアブートに従って生成したか他の方法によって生成した Unified カーネルイメージを持っているならば、それをブートメニューに追加できます。例えば:
menuentry "Arch Linux" { insmod fat insmod chain search --no-floppy --set=root --fs-uuid FILESYSTEM_UUID chainloader /EFI/Linux/arch-linux.efi }
デュアルブート
GNU/Linux
もう一つのディストリビューションが sda2
パーティションにあると仮定します:
menuentry "Other Linux" { set root=(hd0,2) linux /boot/vmlinuz (必要であれば追加のオプションをここへ) initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ) }
代わりに UUID やファイルシステムのラベルで GRUB に正しいパーティションを探させるには:
menuentry "Other Linux" { # UUID が 763A-9CB6 だとすると search --no-floppy --set=root --fs-uuid 763A-9CB6 # OTHER_LINUX というラベルで探す (パーティションラベルが曖昧でないことを確認してください) #search --no-floppy --set=root --label OTHER_LINUX linux /boot/vmlinuz (必要であれば追加のオプションをここへ。例えば、root=UUID=763A-9CB6) initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ) }
もう一つのディストリビューションが、インストール済みの GRUB と grub.cfg
、カーネル、initramfs のある有効な /boot
フォルダーをすでに持っているならば、GRUB にその grub.cfg
ファイルを起動中にその場で読み込ませることができます。例えば、hd0
と4番目の GPT パーティションの場合:
menuentry "configfile hd0,gpt4" { insmod part_gpt insmod btrfs insmod ext2 set root='hd0,gpt4' configfile /boot/grub/grub.cfg }
このエントリを選ぶと GRUB は他のボリュームからその grub.cfg
を読み込み、メニューを表示させます。configfile
ファイル内のコマンドによって環境変数が変更されても、configfile
から返ると環境変数の変更はすべて破棄されます。始めの GRUB メニューに戻る場合は Esc
を押してください。
UEFI/GPT モードでインストールされた Windows
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の EFI システムパーティションを見つけて、そのパーティションから Windows のブートローダーを実行することです。
if [ "${grub_platform}" == "efi" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 UEFI/GPT" { insmod part_gpt insmod fat insmod chain search --no-floppy --fs-uuid --set=root $hints_string $fs_uuid chainloader /EFI/Microsoft/Boot/bootmgfw.efi } fi
$hints_string
と $fs_uuid
は以下の2つのコマンドで得られます。
$fs_uuid
コマンドは EFI システムパーティションの UUID を割り出します。
# grub-probe --target=fs_uuid esp/EFI/Microsoft/Boot/bootmgfw.efi
1ce5-7f28
代わりに、lsblk --fs
を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。
$hints_string
コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります:
# grub-probe --target=hints_string esp/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
以上の2つのコマンドでは Windows が使用する ESP が esp
にマウントされていると仮定しています。Windows である以上、Windows の EFI ファイルへのパスが異なる場合があるかもしれません。
BIOS/MBR モードでインストールされた Windows
このセクションを通して Windows のパーティションは /dev/sda1
にあると仮定します。パーティションが異なる場合は hd0,msdos1
という記述をすべて変更してください。
両方の例で 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
ラベルを使う
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 で利用できるコマンドには insmod
、ls
、set
、unset
があります。この例では set
と insmod
を使います。set
は変数を変更し insmod
は新しいモジュールを挿入して機能を追加します。
始める前に、ユーザーは自分の /boot
パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):
grub rescue> set prefix=(hdX,Y)/boot/grub
X
は物理ドライブ番号、Y
はパーティション番号に置き換えてください。
コンソールの機能を拡張するために、linux
モジュールを挿入します:
grub rescue> insmod i386-pc/linux.mod
もしくは、単純に:
grub rescue> insmod linux
これで、より親しみのあるであろう linux
と initrd
のコマンドが使えます。
例えば、Arch Linux を起動する場合:
set root=(hd0,5) linux /boot/vmlinuz-linux root=/dev/sda5 initrd /boot/initramfs-linux.img boot
boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります:
set root=(hd0,5) linux (hdX,Y)/vmlinuz-linux root=/dev/sda6 initrd (hdX,Y)/initramfs-linux.img boot
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)
BootOrder
で grub が最初のエントリになっている場合、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/sdXx
を root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
のように置き換える必要があるかもしれません。blkid
コマンドを使えばデバイスの UUID を得られます。永続的なブロックデバイスの命名 を見てください。
GRUB はバージョン 2.0.4 より F2FS をサポートしていますが、extra_attr
フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。
デバッグメッセージを有効にする
以下を grub.cfg
に追加してください:
set pager=1 set debug=all
msdos-style エラーメッセージ
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible! grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged. grub-setup: error: If you really want blocklists, use --force.
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは ここ を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。#Master Boot Record (MBR) 特有の手順 を読んで下さい。
UEFI
よくあるインストール時のエラー
- 一部の 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 を見てください。 - sysfs か procfs がある状態で grub-install を実行すると問題が発生し、
modprobe efivarfs
を実行しなければならないと言われる場合、efivarfs をマウントして上記のコマンドを実行してみてください。 --target
と--directory
オプションのどちらかがないと、grub-install
はどこにファームウェアをインストールすればいいのか決められません。そのような場合grub-install
はsource_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 でサポートされます (コミット).
grub-reboot で再設定されない
GRUB は Btrfs のルートパーティションに書き込むを行うことができません [5]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。grub-editenv create
を実行して /etc/default/grub
に GRUB_DEFAULT=0
を設定することでエントリをリセットできます (設定後は grub-mkconfig -o /boot/grub/grub.cfg
を行ってください)。
古い Btrfs のせいでインストールができない
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: /dev/sdx
)、後からパーティションテーブルを書き込むと、Btrfs のフォーマットが一部残留します。ほとんどのユーティリティや OS は残留した Btrfs を認識できないため、GRUB は (たとえ --force が付けられていても) インストールを拒否します:
# grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet.. # grub-install: error: filesystem `btrfs' 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_TIMEOUT
が 0
に設定されていないかチェックしてください。0
に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。GRUB_TIMEOUT_STYLE
が hidden
に設定されていないかもチェックしてください。hidden
に設定されていた場合、menu
に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、メインの設定ファイルを再生成して、再起動してメニューが表示されるか確かめてください。
これでうまく行かない場合、グラフィカルターミナルとの互換性の問題があるのかもしれません。/etc/default/grub
で GRUB_TERMINAL_OUTPUT
を console
に設定し、GRUB のグラフィカルターミナルを無効化してください。