Difference between revisions of "GRUB (日本語)"

From ArchWiki
Jump to: navigation, search
m
m
Line 39: Line 39:
 
* 今の GRUB は''モジュール式''であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや [[LVM]])
 
* 今の GRUB は''モジュール式''であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや [[LVM]])
 
* デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、{{ic|/dev/sda1}} は {{ic|(hd0,msdos1)}} (MBR) や {{ic|(hd0,gpt1)}} (GPT) と表記されます。
 
* デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、{{ic|/dev/sda1}} は {{ic|(hd0,msdos1)}} (MBR) や {{ic|(hd0,gpt1)}} (GPT) と表記されます。
* systemd-sysvcompat を使わずに systemd を利用していて、昔の grub の menu.lst に {{ic|<nowiki>init=/usr/lib/systemd/systemd</nowiki>}} が存在する場合、自動的に生成される grub.cfg ファイルはこのカーネルパラメータを持ち越さないかもしれません (起動時に "ERROT: Root device mounted successfully, but /sbin/init does not exist" と表示されます)。この場合、grub がエラーを出した Arch Linux エントリを編集して、{{ic|<nowiki>init=/usr/lib/systemd/systemd</nowiki>}} をカーネルパラメータに追加し、[[#Additional_arguments|それを永続化させてください]]。
+
* systemd-sysvcompat を使わずに systemd を利用していて、昔の grub の menu.lst に {{ic|<nowiki>init=/usr/lib/systemd/systemd</nowiki>}} が存在する場合、自動的に生成される grub.cfg ファイルはこのカーネルパラメータを持ち越さないかもしれません (起動時に "ERROT: Root device mounted successfully, but /sbin/init does not exist" と表示されます)。この場合、grub がエラーを出した Arch Linux エントリを編集して、{{ic|<nowiki>init=/usr/lib/systemd/systemd</nowiki>}} をカーネルパラメータに追加し、[[#追加引数|それを永続化させてください]]。
 
* GRUB は GRUB legacy よりもかなり大きくなっています (/boot に ~13 MB は占領します)。分割された /boot パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。システムの再パーティショニングをしたいときは、[[Syslinux]] に切り替えてください、容量が少なくてすみます (/boot に ~1.5 MB ほど取ります)。
 
* GRUB は GRUB legacy よりもかなり大きくなっています (/boot に ~13 MB は占領します)。分割された /boot パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。システムの再パーティショニングをしたいときは、[[Syslinux]] に切り替えてください、容量が少なくてすみます (/boot に ~1.5 MB ほど取ります)。
  
Line 534: Line 534:
  
 
==== grub-mkconfig を使う ====
 
==== grub-mkconfig を使う ====
The best way to add other entries is editing the {{ic|/etc/grub.d/40_custom}} or {{ic|/boot/grub/custom.cfg}} . The entries in this file will be automatically added when running {{ic|grub-mkconfig}}.
+
 
After adding the new lines, run:
+
他のエントリを追加する最適の方法は {{ic|/etc/grub.d/40_custom}} {{ic|/boot/grub/custom.cfg}} を編集することです。{{ic|grub-mkconfig}} の実行時にこのファイルにエントリが自動で追加されます。
  # grub-mkconfig -o /boot/grub/grub.cfg  
+
新しい行を追加した後、次を実行して {{ic|grub.cfg}} を生成・更新してください:
to generate an updated {{ic|grub.cfg}}.
+
  # grub-mkconfig -o /boot/grub/grub.cfg
  
 
===== GNU/Linux とデュアルブート =====
 
===== GNU/Linux とデュアルブート =====
  
Assuming that the other distro is on partition {{ic|sda2}}:
+
他のディストリが {{ic|sda2}} パーティションに存在する場合:
  
 
  menuentry "Other Linux" {
 
  menuentry "Other Linux" {
Line 551: Line 551:
 
===== FreeBSD とデュアルブート =====
 
===== FreeBSD とデュアルブート =====
  
Requires that FreeBSD is installed on a single partition with UFS. Assuming it is installed on {{ic|sda4}}:
+
FreeBSD UFS でシングルパーティションにインストールする必要があります。{{ic|sda4}} にインストールされている場合:
  
 
  menuentry "FreeBSD" {
 
  menuentry "FreeBSD" {
Line 560: Line 560:
 
===== Windows とデュアルブート =====
 
===== Windows とデュアルブート =====
  
This assumes that your Windows partition is {{ic|sda3}}. Remember you need to point set root and chainloader to the system reserve partition that windows made when it installed, not the actual partition windows is on. This example works if your system reserve partition is {{ic|sda3}}.
+
ここでは Windows のパーティションが {{ic|sda3}} にあると仮定しています。実際に windows があるパーティションではなく、インストール時に windows が作成したシステムの予約済みパーティションに set root chainloader を設定する必要があります。あなたのシステムの予約済みパーティションが {{ic|sda3}} の場合:
  
 
  # (2) Windows XP
 
  # (2) Windows XP
Line 568: Line 568:
 
  }
 
  }
  
If the Windows bootloader is on an entirely different hard drive than GRUB, it may be necessary to trick Windows into believing that it is the first hard drive. This was possible with {{ic|drivemap}}. Assuming GRUB is on {{ic|hd0}} and Windows is on {{ic|hd2}}, you need to add the following after {{ic|set root}}:
+
Windows のブートローダーが GRUB とは完全に異なるハードドライブに存在する場合、Windows に GRUB が存在するのが最初のハードドライブだと信じこませる必要があるかもしれません。これは {{ic|drivemap}} を使ってできます。GRUB が {{ic|hd0}} に、Windows が {{ic|hd2}} にあるとするには、{{ic|set root}} の後に次を追加してください:
  
 
  drivemap -s hd0 hd2
 
  drivemap -s hd0 hd2
  
==== EasyBCD NeoGRUB を使って Windows とデュアルブート ====
+
==== EasyBCD NeoGRUB を使って Windows とデュアルブート ====
  
Since EasyBCD's NeoGRUB currently does not understand the GRUB menu format, chainload to it by replacing the contents of your {{ic|C:\NST\menu.lst}} file with lines similar to the following:
+
現在 EasyBCD NeoGRUB GRUB のメニューフォーマットを認識しないので、{{ic|C:\NST\menu.lst}} ファイルの中身を以下のように置き換えることでチェインロードしてください:
  
 
  default 0
 
  default 0
Line 589: Line 589:
 
==== フレームバッファの解像度を設定する ====
 
==== フレームバッファの解像度を設定する ====
  
GRUB can set the framebuffer for both GRUB itself and the kernel. The old {{ic|1=vga=}} way is deprecated. The preferred method is editing {{ic|/etc/default/grub}} as the following sample:
+
GRUB GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い {{ic|1=vga=}} deprecated になりました。以下のように {{ic|/etc/default/grub}} を編集する方法が推奨されています:
  
 
  GRUB_GFXMODE=1024x768x32
 
  GRUB_GFXMODE=1024x768x32
 
  GRUB_GFXPAYLOAD_LINUX=keep
 
  GRUB_GFXPAYLOAD_LINUX=keep
  
To generate the changes, run:  
+
変更を適用するには、次を実行してください:  
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
  
The {{ic|gfxpayload}} property will make sure the kernel keeps the resolution.
+
{{ic|gfxpayload}} プロパティによってカーネルに解像度を維持させます。
  
 
{{Note|
 
{{Note|
* If this example does not work for you try to replace {{ic|1=gfxmode="1024x768x32"}} by {{ic|1=vbemode="0x105"}}. Remember to replace the specified resolution with one suitable for your screen
+
* 上記のサンプルで上手く行かないときは {{ic|1=gfxmode="1024x768x32"}} {{ic|1=vbemode="0x105"}} に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい
* To show all the modes you can use {{ic|1=# hwinfo --framebuffer}} (hwinfo is available in [community]), while at GRUB prompt you can use the {{ic|1=vbeinfo}} command
+
* {{ic|1=# hwinfo --framebuffer}} を使って利用できる全てのモードを表示することができます (hwinfo [community] から利用可能です)、GRUB のプロンプトでは {{ic|1=vbeinfo}} コマンドが使用できます
 
}}
 
}}
  
If this method does not work for you, the deprecated {{ic|1=vga=}} method will still work. Just
+
この方法が使えない時は、昔の {{ic|1=vga=}} を使って下さい。{{ic|/etc/default/grub}} の {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} という行に追加するだけです、例えば: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} は解像度が {{ic|1024x768}} になります。
add it next to the {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} line in {{ic|/etc/default/grub}}
+
for eg: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} will give you a {{ic|1024x768}} resolution.
+
  
You can choose one of these resolutions: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}}
+
以下の解像度のどれかを選ぶことができます: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}}
  
 
==== 915resolution hack ====
 
==== 915resolution hack ====
  
Some times for Intel graphic adapters neither {{ic|1=# hwinfo --framebuffer}} nor {{ic|1=vbeinfo}} will show you the desired resolution. In this case you can use {{ic|915resolution}} hack. This hack will temporarily modify video BIOS and add needed resolution. See [http://915resolution.mango-lang.org/ 915resolution's home page]
+
たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} {{ic|1=vbeinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。
  
First you need to find a video mode which will be modified later. For that we need the GRUB command shell:
+
まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です:
 
{{hc|sh:grub> 915resolution -l|
 
{{hc|sh:grub> 915resolution -l|
 
Intel 800/900 Series VBIOS Hack : version 0.5.3
 
Intel 800/900 Series VBIOS Hack : version 0.5.3
Line 621: Line 619:
 
[...]
 
[...]
 
}}
 
}}
Next, we overwrite the {{ic|Mode 30}} with {{ic|1440x900}} resolution:
+
次に、{{ic|Mode 30}} {{ic|1440x900}} 解像度で上書きします:
 
{{hc|/etc/grub.d/00_header|
 
{{hc|/etc/grub.d/00_header|
 
[...]
 
[...]
Line 628: Line 626:
 
[...]
 
[...]
 
}}
 
}}
Lastly we need to set {{ic|GRUB_GFXMODE}} as described earlier, regenerate GRUB configuration file and reboot to test changes:
+
最後に、前で説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう:
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # reboot
 
  # reboot
Line 673: Line 671:
 
テーマを使っている時は基本的にスプラッシュイメージは表示されません。
 
テーマを使っている時は基本的にスプラッシュイメージは表示されません。
  
==== Menu colors ====
+
==== メニューの色 ====
  
You can set the menu colors in GRUB. The available colors for GRUB can be found in [https://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html the GRUB Manual].
+
GRUB のメニューの色を設定することができます。GRUB で利用できる色は [https://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html the GRUB Manual] にあります。
Here is an example:
+
以下サンプルです:
  
Edit {{ic|/etc/default/grub}}:
+
{{ic|/etc/default/grub}} を編集してください:
 
  GRUB_COLOR_NORMAL="light-blue/black"
 
  GRUB_COLOR_NORMAL="light-blue/black"
 
  GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
 
  GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
  
Generate the changes:
+
変更を適用してください:
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
  
==== Hidden menu ====
+
==== メニューを隠す ====
  
One of the unique features of GRUB is hiding/skipping the menu and showing it by holding {{ic|Esc}} when needed. You can also adjust whether you want to see the timeout counter.
+
GRUB のユニークな機能のひとつとして、メニューを隠して必要な時に {{ic|Esc}} を押して表示することができます。また、タイムアウトカウンターを表示するかどうか設定することもできます。
  
Edit {{ic|/etc/default/grub}} as you wish. Here is an example where the comments from the beginning of the two lines have been removed to enable the feature, the timeout has been set to five seconds and to be shown to the user:
+
{{ic|/etc/default/grub}} を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています:
 
  GRUB_HIDDEN_TIMEOUT=5
 
  GRUB_HIDDEN_TIMEOUT=5
 
  GRUB_HIDDEN_TIMEOUT_QUIET=false
 
  GRUB_HIDDEN_TIMEOUT_QUIET=false
  
and run:
+
そして次を実行して下さい:
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
  
Line 706: Line 704:
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
  
Another option if you want to keep the framebuffer in GRUB is to revert to text mode just before starting the kernel. To do that modify the variable in {{ic|/etc/default/grub}}:
+
他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、{{ic|/etc/default/grub}} 内の次の変数を変更してください:
 
  GRUB_GFXPAYLOAD_LINUX=text
 
  GRUB_GFXPAYLOAD_LINUX=text
  
and rebuild the configuration as before.
+
そして同じように設定を再生成してください。
  
 
=== 他のオプション ===
 
=== 他のオプション ===
Line 715: Line 713:
 
==== LVM ====
 
==== LVM ====
  
If you use [[LVM]] for your {{ic|/boot}}, add the following before menuentry lines:
+
[[LVM]] {{ic|/boot}} で使っている場合、メニューエントリの行の前に次を追加してください:
  
 
  insmod lvm
 
  insmod lvm
  
and specify your root in the menuentry as:
+
そしてメニューエントリで root を次のように指定してください:
  
 
  set root=lvm/''lvm_group_name''-''lvm_logical_boot_partition_name''
 
  set root=lvm/''lvm_group_name''-''lvm_logical_boot_partition_name''
  
Example:
+
サンプル:
  
 
  # (0) Arch Linux
 
  # (0) Arch Linux
Line 736: Line 734:
 
==== RAID ====
 
==== RAID ====
  
GRUB provides convenient handling of RAID volumes. You need to add {{ic|insmod mdraid}} which allows you to address the volume natively. For example, {{ic|/dev/md0}} becomes:
+
GRUB には RAID ボリュームの便利な制御機能があります。 You need to add {{ic|insmod mdraid}} which allows you to address the volume natively. For example, {{ic|/dev/md0}} becomes:
 
  set root=(md0)
 
  set root=(md0)
  
Line 760: Line 758:
 
  # grub-mkconfig -o /boot/grub/grub.cfg
 
  # grub-mkconfig -o /boot/grub/grub.cfg
  
==== Using Labels ====
+
==== ラベルを使う ====
  
 
It is possible to use labels, human-readable strings attached to filesystems, by using the {{ic|--label}} option to {{ic|search}}. First of all, label your existing partition:
 
It is possible to use labels, human-readable strings attached to filesystems, by using the {{ic|--label}} option to {{ic|search}}. First of all, label your existing partition:
Line 773: Line 771:
 
  }
 
  }
  
==== Recall previous entry ====
+
==== 以前のエントリを思い出させる ====
  
GRUB can remember the last entry you booted from and use this as the default entry to boot from next time. This is useful if you have multiple kernels (i.e., the current Arch one and the LTS kernel as a fallback option) or operating systems. To do this, edit {{ic|/etc/default/grub}} and change the value of {{ic|GRUB_DEFAULT}}:
+
GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと fallback としての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
  
 
  GRUB_DEFAULT=saved
 
  GRUB_DEFAULT=saved
  
This ensures that GRUB will default to the saved entry. To enable saving the selected entry, add the following line to {{ic|/etc/default/grub}}:
+
これで GRUB は保存されたエントリをデフォルトにします。選択したエントリの保存を有効にするには、次の行を {{ic|/etc/default/grub}} に追加してください:
  
 
  GRUB_SAVEDEFAULT=true
 
  GRUB_SAVEDEFAULT=true
  
{{Note|Manually added menu items, e.g. Windows in {{ic|/etc/grub.d/40_custom}} or {{ic|/boot/grub/custom.cfg}}, will need {{ic|savedefault}} added. Remember to regenerate([[#Generate config file]]) your configuration file.}}
+
{{Note|手動で追加したメニューアイテム (例: {{ic|/etc/grub.d/40_custom}} {{ic|/boot/grub/custom.cfg}} の Windows) には {{ic|savedefault}} の追加が必要です。設定ファイルを[[#grub-mkconfig を使って自動で生成する|再生成]]するのを忘れないで下さい。}}
  
==== Changing the default menu entry ====
+
==== デフォルトのメニューエントリを変更する ====
  
To change the default selected entry, edit {{ic|/etc/default/grub}} and change the value of {{ic|GRUB_DEFAULT}}:
+
デフォルトで選択されるエントリを変更するには、{{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
  
Using numbers :
+
数字を使う:
 
  GRUB_DEFAULT=0
 
  GRUB_DEFAULT=0
Grub identifies entries in generated menu counted from zero. That means 0 for the first entry which is the default value, 1 for the second and so on.
+
Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。
  
Or using menu titles :
+
メニューのタイトルを使う:
 
  GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
 
  GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
  
{{Note|Remember to regenerate([[#Generate config file]]) your configuration file.}}
+
{{Note|設定ファイルを[[#grub-mkconfig を使って自動で生成する|再生成]]するのを忘れないで下さい。}}
  
==== Security ====
+
==== セキュリティ ====
  
 
If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB's configuration files. To do this, run the command {{ic|grub-mkpasswd-pbkdf2}}. Enter a password and confirm it:
 
If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB's configuration files. To do this, run the command {{ic|grub-mkpasswd-pbkdf2}}. Enter a password and confirm it:
Line 1,111: Line 1,109:
 
== トラブルシューティング ==
 
== トラブルシューティング ==
  
=== Intel BIOS not booting GPT ===
+
=== Intel BIOS GPT をブートしない ===
  
Some Intel BIOS's require at least one bootable MBR partition to be present at boot, causing GPT-partitioned boot setups to be unbootable.
+
Intel BIOS によっては起動時に最低でも1つ起動可能な MBR パーティションが必要なため、GPT でパーティションされたブートセットアップが起動できなくなることがあります。
  
 
This can be circumvented by using (for instance) fdisk to mark one of the GPT partitions (preferably the 1007 KiB partition you have created for GRUB already) bootable in the MBR. This can be achieved, using fdisk, by the following commands: Start fdisk against the disk you are installing, for instance {{ic|fdisk /dev/sda}}, then press {{ic|a}} and select the partition you wish to mark as bootable (probably #1) by pressing the corresponding number, finally press {{ic|w}} to write the changes to the MBR.
 
This can be circumvented by using (for instance) fdisk to mark one of the GPT partitions (preferably the 1007 KiB partition you have created for GRUB already) bootable in the MBR. This can be achieved, using fdisk, by the following commands: Start fdisk against the disk you are installing, for instance {{ic|fdisk /dev/sda}}, then press {{ic|a}} and select the partition you wish to mark as bootable (probably #1) by pressing the corresponding number, finally press {{ic|w}} to write the changes to the MBR.
Line 1,119: Line 1,117:
 
{{Note|The bootable-marking must be done in {{ic|fdisk}} or similar, not in GParted or others, as they will not set the bootable flag in the MBR.}}
 
{{Note|The bootable-marking must be done in {{ic|fdisk}} or similar, not in GParted or others, as they will not set the bootable flag in the MBR.}}
  
More information is available [http://www.rodsbooks.com/gdisk/bios.html here]
+
詳細は [http://www.rodsbooks.com/gdisk/bios.html ここ] から見ることができます。
  
 
=== デバッグメッセージを有効にする ===
 
=== デバッグメッセージを有効にする ===
Line 1,183: Line 1,181:
 
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。
 
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。
  
=== GRUB UEFI not loaded ===
+
=== GRUB UEFI がロードされない ===
  
 
An example of a working EFI:
 
An example of a working EFI:
Line 1,211: Line 1,209:
 
=== GRUB Legacy のリストア ===
 
=== GRUB Legacy のリストア ===
  
* Move GRUB v2 files out of the way:
+
* GRUB v2 のファイルをどけてください:
  
 
  # mv /boot/grub /boot/grub.nonfunctional
 
  # mv /boot/grub /boot/grub.nonfunctional
  
* Copy GRUB Legacy back to {{ic|/boot}}:
+
* GRUB Legacy {{ic|/boot}} にコピーしてください:
  
 
  # cp -af /boot/grub-legacy /boot/grub
 
  # cp -af /boot/grub-legacy /boot/grub
  
* Replace MBR and next 62 sectors of sda with backed up copy
+
* MBR sda の次の 62 セクタをバックアップしたコピーで置き換えて下さい:
  
 
{{Warning|This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It '''will''' mess up your system.}}
 
{{Warning|This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It '''will''' mess up your system.}}
Line 1,225: Line 1,223:
 
  # dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
 
  # dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
  
A safer way is to restore only the MBR boot code use:
+
MBR のブートコードだけをリストアするとより安全です:
  
 
  # dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
 
  # dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1

Revision as of 16:41, 2 September 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki - BURG は GRUB v2 をベースにした全く新しいブートローダーです。幅広い OS で使うことができ、テキスト・グラフィックモードで動く、細かく設定可能なメニューシステムを持っています。 Template:Article summary wiki - 前のバージョンで、今はサポートされていません。 Template:Article summary heading Template:Article summary wiki Template:Article summary link Template:Article summary end

GRUB - GRUB Legacy と混同しないでください - は次世代の GRand Unified Bootloader です。GRUB Legacy の後継の研究開発プロジェクト PUPA から GRUB は作られています。全てを整理するため GRUB はスクラッチから書きなおされモジュール性とポータビリティを獲得しました [1]

手短に言えば、ブートローダーはコンピューターが起動した時に最初に走るソフトウェアプログラムです。Linux カーネルのロードとコントロールの移譲を担当しています。そして、カーネルはオペレーションシステムの他全てを初期化します。

Contents

前置き

  • GRUB という名前は公式でソフトウェアのバージョン2を示しています、[2] を見て下さい。古いバージョンについての記事は GRUB Legacy を見て下さい。
  • GRUB は root で (/boot ファイルシステムを分割しないで) Btrfs を使った zlib や LZO による圧縮をサポートしています。

GRUB Legacy ユーザーへのメモ

  • GRUB Legacy から GRUB へのアップグレードはで書かれている GRUB のフレッシュインストールとほとんど同じです。
  • GRUB Legacy と GRUB ではコマンドが異なります。先に進む前に GRUB commands を確認してください (例: "find" は "search" に置き換わっています)。
  • 今の GRUB はモジュール式であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや LVM)
  • デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、/dev/sda1(hd0,msdos1) (MBR) や (hd0,gpt1) (GPT) と表記されます。
  • systemd-sysvcompat を使わずに systemd を利用していて、昔の grub の menu.lst に init=/usr/lib/systemd/systemd が存在する場合、自動的に生成される grub.cfg ファイルはこのカーネルパラメータを持ち越さないかもしれません (起動時に "ERROT: Root device mounted successfully, but /sbin/init does not exist" と表示されます)。この場合、grub がエラーを出した Arch Linux エントリを編集して、init=/usr/lib/systemd/systemd をカーネルパラメータに追加し、それを永続化させてください
  • GRUB は GRUB legacy よりもかなり大きくなっています (/boot に ~13 MB は占領します)。分割された /boot パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。システムの再パーティショニングをしたいときは、Syslinux に切り替えてください、容量が少なくてすみます (/boot に ~1.5 MB ほど取ります)。

重要なデータのバックアップ

GRUB のインストールはスムーズに行われるべきですが、GRUB v2 にアップグレードする前に GRUB Legacy のファイルを保持しておくことを強く推奨します。

# mv /boot/grub /boot/grub-legacy

ブートコードやパーティションテーブルを含んでいる MBR をバックアップするには (/dev/sdX は実際のディスクパスに置き換えてください):

# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1

MBR の446バイトにはブートコードが含まれていて、次の64バイトにはパーティションテーブルが含まれています。リストアする際にパーティションテーブルを上書きしたくない場合は、MBR ブートコードだけをバックアップすることを推奨します:

# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1

GRUB2 を正しくインストールできないときは、#GRUB Legacy のリストア を見て下さい。

事前の注意事項

BIOS システム

GUID Partition Table (GPT) 特有の手順

GPT でパーティションされたシステムには core.img を埋め込むための MBR の隙間の領域がないので (GPT のプライマリヘッダーやプライマリパーティションテーブルに使われます)、BIOS-GPT の GRUB 設定では BIOS boot partition が必要になります。このパーティションは BIOS-GPT 環境の GRUB でだけ使われます。MBR パーティションではそのようなパーティションのタイプは存在しません (少なくとも GRUB にはありません)。システムが UEFI を使っている時も (ブートセクタの埋め込みがないので)、このパーティションは必要ありません。

BIOS-GPT 設定では gdisk, cgdisk, GNU Parted などを使って、ディスクの最初にファイルシステムのない 1007 KiB のパーティションを作成してください。1007 KiB という容量によって次に続くパーティションを 1024 KiB に正しくアライメントすることができます。必要であれば、ディスクの他の場所にこのパーティションを配置することもできますが、先頭の 2TiB の領域内である必要があります。パーティションタイプは (c)gdisk では ef02 に GNU Parted では set <BOOT_PART_NUM> bios_grub on に設定してください。

Note:
  • このパーティションは grub-installgrub-setup を実行する前に作成しておく必要があります
  • 他の全てのパーティションの後にこのパーティションを作成する場合、gdisk では容量の消費が一番少ない場所 (セクター 34-2047) にしか作成できません。なぜなら gdisk はパーティションを出来る限り 2048 セクター境界に自動アライメントするからです
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 パーティション・アライメントをサポートしているパーティションツールを使うのが得策です。

UEFI システム

Note: UEFI, GPT, UEFI Bootloaders のページをよく読んでおいてください。
UEFI System Partition を作成・マウントする

Unified Extensible Firmware Interface#EFI System Partition に書かれた手順に従って UEFI System Partition を作成してください。そして /boot/efi に UEFI System Partition at /boot/efi をマウントしてください。他のマウントポイントに UEFI System Partition をマウントしている場合は、下の手順で /boot/efi とマウントポイントを置き換えてください:

# mkdir -p /boot/efi
# mount -t vfat <UEFI_SYSTEM_PARTITION> /boot/efi

/boot/efi/EFI ディレクトリを作成してください:

# mkdir /boot/efi/EFI

インストール

BIOS システム

公式リポジトリ にある grub パッケージから GRUB をインストールできます。grub-legacy がインストールされている場合は置き換えられます。

Note: パッケージをインストールするだけでは /boot/grub/i386-pc/core.img ファイルや /boot/grub/i386-pc 内の GRUB モジュールは更新されません。下で説明されているように grub-install を使って手動でアップデートする必要があります。

ブートファイルをインストール

BIOS ブートで GRUB ブートファイルをインストールする方法は3つあります:

GPT BIOS boot partition にインストールする

GUID Partition Table のディスクは予約された "ブートトラック" を持っていません。そのため GRUB core イメージを保持する BIOS Boot Partition (ef02) を作成する必要があります。

GNU Parted を使って、以下のようなコマンドで設定することができます:

# parted /dev/disk set <partition-number> bios_grub on

gdisk を使っている場合、パーティションのタイプを ef02 に設定してください。GUID を直接設定する必要があるパーティショニングプログラムでは、‘21686148-6449-6e6f-744e656564454649’ (もしくは Hah!IdontNeedEFI) が GUID です。

Warning: パーティションを BIOS Boot Partition と決めるときはどのパーティションが選択されているかに注意してください。インストール中 GRUB が BIOS Boot Partition を見つけた時、自動的にパーティションを上書きします。パーティションに何もデータが入っていないことを確認してください。

GPT ディスクで grub をセットアップするには、/boot/grub ディレクトリを作り、/boot/grub/i386-pc/core.img ファイルを生成して、それを BIOS Boot Partition に埋め込みます、以下を実行してください:

# modprobe dm-mod
# grub-install --target=i386-pc --recheck --debug /dev/sda

/dev/sda はインストール先に置き換えて下さい。

下の #設定ファイルの生成 に進んで下さい。

440バイトの MBR ブートコード領域にインストールする

440バイトの Master Boot Record ブートコード領域に grub をセットアップするには、/boot/grub ディレクトリを作り、/boot/grub/i386-pc/core.img ファイルを生成して、それを 31 KiB の (最低限の容量 - パーティションのアライメントによって変化します) MBR の後の領域に埋め込み、設定ファイルを生成します、以下を実行してください:

# modprobe dm-mod
# grub-install --recheck /dev/sdX

/dev/sdX はインストール先に置き換えて下さい (この場合最初の SATA ディスクの MBR)。/bootLVM を使う場合、複数の物理ディスクに GRUB をインストールできます。

Warning: 後者を使う時は /boot ディレクトリを確認してください。たまに boot-directory パラメータが /boot の中にもうひとつ /boot フォルダを作ることがあります。次のように表示されたら間違ったインストールがなされます: /boot/boot/grub/

下の #設定ファイルの生成 に進んで下さい。

パーティションやパーティションレスディスクにインストールする
Note: GRUB does not encourage installation to a partition boot sector or a partitionless disk like GRUB Legacy or Syslinux does. This kind of setup is prone to breakage, especially during updates, and is not supported by Arch devs.

パーティションブートセクタや、パーティションレスディスク (別名 superfloppy) やフロッピーディスクに grub をセットアップするには、以下を実行してください (/boot パーティションを /dev/sdaX として例にしています):

# modprobe dm-mod
# chattr -i /boot/grub/i386-pc/core.img
# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX
# chattr +i /boot/grub/i386-pc/core.img

--force オプションを使ってブロックリストを利用する必要があります --grub-setup=/bin/true は使えません (core.img を生成するだけと同じです)。

grub-install will give out warnings like which should give you the idea of what might go wrong with this approach:

/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. 
                        However, blocklists are UNRELIABLE and their use is discouraged.

--force がないと下のエラーが表示され grub-setup はパーティションブートセクタにブートコードを設定しません:

/sbin/grub-setup: error: will not proceed with blocklists

--force をつければ次のように表示されるはずです:

Installation finished. No error reported.

The reason why grub-setup does not by default allow this is because in case of partition or a partitionless disk is that grub relies on embedded blocklists in the partition bootsector to locate the /boot/grub/i386-pc/core.img file and the prefix dir /boot/grub. The sector locations of core.img may change whenever the filesystem in the partition is being altered (files copied, deleted etc.). For more info see https://bugzilla.redhat.com/show_bug.cgi?id=728742 and https://bugzilla.redhat.com/show_bug.cgi?id=730915.

The workaround for this is to set the immutable flag on /boot/grub/i386-pc/core.img (using chattr command as mentioned above) so that the sector locations of the core.img file in the disk is not altered. The immutable flag on /boot/grub/i386-pc/core.img needs to be set only if grub is installed to a partition boot sector or a partitionless disk, not in case of installation to MBR or simple generation of core.img without embedding any bootsector (mentioned above).

下の #設定ファイルの生成 に進んで下さい。

core.img だけを生成する

grub のブートセクタコードを MBR, MBR の後の隙間またはパーティションのブートセクタに埋め込まずに /boot/grub ディレクトリを作成して /boot/grub/i386-pc/core.img ファイルを生成するには、grub-install--grub-setup=/bin/true を加えて下さい:

# modprobe dm-mod
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda

これで Linux カーネルやマルチブートカーネルとして GRUB Legacy や syslinux から GRUB の core.img をチェインロードできます。

設定ファイルの生成

最後に、GRUB の設定を生成してください (設定については設定セクションで詳しく説明しています):

# grub-mkconfig -o /boot/grub/grub.cfg
Note: このファイルのパスは /boot/grub/grub.cfg です、/boot/grub/i386-pc/grub.cfg ではありません。

GRUB がブート中に "no suitable mode found" とエラーを表示するときは、#"No suitable mode found" エラー を見て下さい。

grub-mkconfig が失敗する場合、次のコマンドで /boot/grub/menu.lst ファイルを /boot/grub/grub.cfg に変換してください:

# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg

例えば:

/boot/grub/menu.lst
default=0
timeout=5

title  Arch Linux Stock Kernel
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda2 ro
initrd /initramfs-linux.img

title  Arch Linux Stock Kernel Fallback
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda2 ro
initrd /initramfs-linux-fallback.img
/boot/grub/grub.cfg
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi
set timeout=5

menuentry 'Arch Linux Stock Kernel' {
  set root='(hd0,1)'; set legacy_hdbias='0'
  legacy_kernel   '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
  legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img'
  
}

menuentry 'Arch Linux Stock Kernel Fallback' {
  set root='(hd0,1)'; set legacy_hdbias='0'
  legacy_kernel   '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
  legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img'
}

GRUB の /boot/grub/grub.cfg 設定ファイルを作るのを忘れて、再起動したら GRUB のコマンドシェルが表示された場合、以下を入力してください:

sh:grub> insmod legacycfg
sh:grub> legacy_configfile ${prefix}/menu.lst

Arch で起動して正しい GRUB /boot/grub/grub.cfg 設定ファイルを再生成してください。

Note: このオプションは BIOS システムでだけ機能します、UEFI システムでは動きません。

マルチブート

追加のユーティリティをインストールすれば、すぐに動かすことができます: os-prober。パッケージをインストールして、grub-mkconfig -o /boot/grub/grub.cfg を再度実行してください。失敗する場合は、下の説明を見て手動でエントリを加えて下さい。

Note: Windows が見つからない時は、Windows の boot パーティションをマウントしてみてください
BIOS-MBR モードでインストールされた Microsoft Windows
Note: GRUB は bootmgr の直接起動をサポートしており、もはや BIOS-MBR 環境で Windows を起動するためにパーティションブートセクタのチェインロードをする必要はありません。
Warning: bootmgr が存在するのはシステムパーティションであり、"実際に使っている" Windows のパーティション (一般的に C:) ではありません。blkid で全ての UUID を表示した際、システムパーティションは LABEL="SYSTEM RESERVED" のパーティションであり容量はほんの 100 MB (Arch の boot パーティションとほぼ同じ大きさ) です。詳細は Wikipedia:System partition and boot partition を参照してください。

このセクションでは、あなたの Windows パーティションは /dev/sda1 だと仮定しています。違うパーティションを使っている場合は全ての hd0,msdos1 を修正しなくてはなりません。最初に、bootmgr と関連ファイルがある Windows のシステムパーティションの NTFS ファイルシステムの UUID を見つけて下さい。例えば、Windows の bootmgr/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 では、上記のコマンドにある bootmgrNTLDR に置き換えて下さい。さらに、SYSTEM_RESERVED パーティションは存在しない可能性があることに注意してください; あなたの Windows パーティション上に NTLDR ファイルがないか調べて下さい。

次に、BIOS-MBR モードでインストールされた Windows (XP, Vista, 7, 8) を起動するために下のコードを /etc/grub.d/40_custom/boot/grub/custom.cfg に追加して、上で説明したように grub-mkconfig を使って grub.cfg を再生成してください:

Windows Vista/7/8 では:

menuentry "Microsoft Windows Vista/7/8 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
}

Windows XP では:

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 /ntldr
}
Note: たまに (Windows 8 で GRUB をインストールした場合など)、\boot\bcd でエラーが起こって Windows を起動できなくなることがあります (エラーコード 0xc000000f)。Windows の回復コンソール (インストールディスクから cmd) を使って以下を実行することで修復することが可能です:
x:\> "bootrec.exe /fixboot" 
x:\> "bootrec.exe /RebuildBcd".
Warning: "bootrec.exe /Fixmbr" を使わないで下さい GRUB が消去されてしまいます。

/etc/grub.d/40_custom をテンプレートとして使って /etc/grub.d/nn_custom を作成することができます。nn は優先順位を定義し、スクリプトが実行される順番を示します。スクリプトが実行される順番で grub のブートメニューの場所が決まります。

Note: 最初に必要なスクリプトが実行されるように nn は 06 よりも大きな値にするべきです。

UEFI システム

Note: それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。 Users experiencing problems getting Grub/EFI to work properly are encouraged to share detailed steps for hardware-specific cases where UEFI booting does not work as described below. In an effort to keep the parent GRUB article neat and tidy, see the GRUB EFI Examples page for these special cases.

最初に grub パッケージをインストールして、それから下の手順に従って下さい。

Note: パッケージをインストールするだけでは core.efi ファイルや UEFI System Partition 内の GRUB モジュールは更新されません。下で説明されているように grub-install を使って手動でアップデートする必要があります。

ブートファイルのインストール

UEFI system partition にインストールする
Note:
  • 下のコマンドでは GRUB を x86_64-efi でインストールすると仮定しています (IA32-efi を使うのなら下のコマンドの x86_64i386 に置き換えて下さい)。
  • インストールを行うために、BIOS ではなく UEFI を使って起動する必要があります。ISO ファイルを USB ドライブにコピーして起動した場合、このガイドに従ってください、そうしないと grub-install はエラーを出します。

GRUB のインストールスクリプトが UEFI system partition を検知するように UEFI system partition を /boot/efi/ にマウントしてください:

# mkdir -p /boot/efi
# mount -t vfat /dev/sdXY /boot/efi

以下のコマンドを実行して GRUB UEFI アプリケーションを /boot/efi/EFI/arch_grub に、GRUB のモジュールを /boot/grub/x86_64-efi (推奨) にインストールしてください:

# modprobe dm-mod
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug
Note: --target--directory オプションがないと、grub-install は GRUB がインストールされるファームウェアがどれか決められません。そのような場合 grub-installsource_dir does not exist. Please specify --target or --directory というメッセージを表示します。

GRUB モジュールと grub.cfg/boot/efi/EFI/grub ディレクトリに grubx64.efi アプリケーションを /boot/efi/EFI/arch_grub にインストールしたい (つまり全ての GRUB UEFI ファイルを UEFISYS partition に収める) 場合は以下を使って下さい:

# modprobe dm-mod 
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --boot-directory=/boot/efi/EFI --recheck --debug

--efi-directory オプションは UEFI SYSTEM PARTITION のマウントポイントを、--bootloader-idgrubx64.efi ファイルの保存に使われるディレクトリの名前を、--boot-directory は実際にモジュールがインストールされる (そして grub.cfg を作成する) ディレクトリをそれぞれ指定します。

実際のパスは:

<efi-directory>/<EFI or efi>/<bootloader-id>/grubx64.efi
<boot-directory>/grub/x86_64-efi/<all modules, grub.efi, core.efi, grub.cfg>
Note: --bootloader-id オプションは <boot-directory>/grub を変更しません、つまりモジュールを <boot-directory>/<bootloader-id> にインストールすることはできません、このパスは <boot-directory>/grub に固定されています。

--efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub は:

<efi-directory>/<EFI or efi>/<bootloader-id> == <boot-directory>/grub == /boot/efi/EFI/grub

--efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=arch_grub は:

<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub
<boot-directory>/grub == /boot/efi/EFI/grub

--efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub は:

<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub
<boot-directory>/grub == /boot/grub

--efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub は:

<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/grub
<boot-directory>/grub == /boot/grub

<efi-directory>/<EFI or efi>/<bootloader-id>/grubx64.efi<boot-directory>/grub/x86_64-efi/core.efi と全く同じです。

Note:
  • GRUB 2.00 では grub-install のオプション --efi-directory--root-directory を置き換えます、後者は使われなくなりました。
  • オプション --efi-directory--bootloader-id は GRUB UEFI 専用です。

どんな場合でも grub-installgrubx64.efi を UEFI SYSTEM PARTITION の中にインストールするために UEFI SYSTEM PARTITION をマウントする必要があり、それによってファームウェアから起動されます (using the efibootmgr created boot entry in non-Mac systems)。

GRUB を BIOS システムで設定するときと異なり grub-install コマンドの最後に <device_path> オプション (例: /dev/sda) を使わないことに注意してください。UEFI のブートローダーは MBR やパーティションのブートセクタを全く使わないので <device_path> が指定されてもインストールスクリプトはそれを無視されます。

#UEFI 設定ファイルの生成#ファームウェアのブートマネージャに GRUB エントリを作成する に従って grub.cfg ファイルを作成することでシステムを UEFI ブートすることができます。

UEFI 設定ファイルの生成

最後に、GRUB の設定を生成してください (設定については設定セクションで詳しく説明しています):

# grub-mkconfig -o <boot-directory>/grub/grub.cfg
Note: このファイルのパスは <boot-directory>/grub/grub.cfg です、<boot-directory>/grub/x86_64-efi/grub.cfg ではありません。

--boot-directory=/boot を使った場合:

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

--boot-directory=/boot/efi/EFI を使った場合:

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

パスは --bootloader-id オプションの値とは無関係です。

GRUB がブート中に "no suitable mode found" とエラーを表示するときは、#"No suitable mode found" エラー を見て下さい。

ファームウェアのブートマネージャに GRUB エントリを作成する

grub-install は自動でブートマネージャにメニューエントリを作成しようとします。作成されないときは、Beginners' Guide (日本語)#GRUB を参照して efibootmgr を使ってメニューエントリを作成してください。また、UEFI モードで CD/USB を起動できないような問題については Unified Extensible Firmware Interface#Create UEFI bootable USB from ISO を参照してください。

GRUB の独立 UEFI アプリケーションを作成する

全てのモジュールを UEFI アプリケーション内の memdisk に埋め込んだ grubx64_standalone.efi アプリケーションを作成することができ、これによって GRUB UEFI モジュールやその他関連ファイルが利用するディレクトリを別に持つ必要がなくなります。これを行うには grub に含まれている grub-mkstandalone コマンドを使います。

The easiest way to do this would be with the install command already mentioned before, but specifying the modules to include. For example:

# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \
--output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" <any extra files you want to include>

The grubx64_standalone.efi file expects grub.cfg to be within its $prefix which is (memdisk)/boot/grub. The memdisk is embedded within the EFI app. The grub-mkstandlone script allow passing files to be included in the memdisk image to be as the arguments to the script (in <any extra files you want to include>).

If you have the grub.cfg at /home/user/Desktop/grub.cfg, then create a temporary /home/user/Desktop/boot/grub/ directory, copy the /home/user/Desktop/grub.cfg to /home/user/Desktop/boot/grub/grub.cfg, cd into /home/user/Desktop/boot/grub/ and run:

# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \
--output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" "boot/grub/grub.cfg"

The reason to cd into /home/user/Desktop/boot/grub/ and to pass the file path as boot/grub/grub.cfg (notice the lack of a leading slash - boot/ vs. /boot/ ) is because dir1/dir2/file is included as (memdisk)/dir1/dir2/file by the grub-mkstandalone script.

If you pass /home/user/Desktop/grub.cfg the file will be included as (memdisk)/home/user/Desktop/grub.cfg. If you pass /home/user/Desktop/boot/grub/grub.cfg the file will be included as (memdisk)/home/user/Desktop/boot/grub/grub.cfg. That is the reason for cd'ing into /home/user/Desktop/boot/grub/ and passing boot/grub/grub.cfg, to include the file as (memdisk)/boot/grub/grub.cfg, which is what grub.efi expects the file to be.

efibootmgr を使って /boot/efi/EFI/arch_grub/grubx64_standalone.efi の UEFI ブートマネージャエントリを作成する必要があります。#ファームウェアのブートマネージャに GRUB エントリを作成する に従って下さい。

マルチブート

UEFI-GPT モードでインストールされた Microsoft Windows

Windows の UEFI ブートローダーファイルが存在する UEFI SYSTEM PARTITION の FAT32 ファイルシステムの UUID を見つけて下さい。例えば、Windows の bootmgfw.efi/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi にある場合 (FAT ファイルシステムでは大文字小文字の違いは無視されます):

# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
1ce5-7f28
# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1

次に、UEFI-GPT モードでインストールされた Windows x86_64 (Vista SP1+, 7, 8) をチェインロードするために以下のコードを /etc/grub.d/40_custom に追加してください:

menuentry "Microsoft Windows Vista/7/8 x86_64 UEFI-GPT" {
  insmod part_gpt
  insmod fat
  insmod search_fs_uuid
  insmod chain
  search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28
  chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

その後 /boot/grub/grub.cfg を再生成してください:

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

設定

grub.cfg を自動で生成するか手動で編集するか選ぶことができます。

Note:
  • EFI システムでは、--boot-directory オプションを使って GRUB がインストールされた場合、grub.cfg ファイルは grubx64.efi と同じディレクトリにあるはずです。そうでないのなら、GRUB BIOS と同じように grub.cfg ファイルは /boot/grub/ にあります
  • ここ に GRUB の設定方法のほとんど完璧に近い説明があります。

grub-mkconfig を使って自動で生成する

GRUB の menu.lst に同等の設定ファイルが /etc/default/grub/etc/grub.d/* です。grub-mkconfig はこれらのファイルを使って grub.cfg を生成します。デフォルトではスクリプトは標準出力に出力します。grub.cfg ファイルを生成するには次のコマンドを実行してください:

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

/etc/grub.d/10_linux is set to automatically add menu items for Arch linux that work out of the box, to any generated configuration. Other operating systems may need to be added manually to /etc/grub.d/40_custom or /boot/grub/custom.cfg

Note: If you're trying to do this in a chroot or systemd-nspawn container, you might notice that it doesn't work, complaining that grub-probe can't get the 'canonical path of /dev/sdaX'. In this case, try using arch-chroot as described here.

追加引数

カスタムの追加引数を Linux イメージに渡すために、/etc/default/grubGRUB_CMDLINE_LINUX 変数を設定することができます。

例として、GRUB_CMDLINE_LINUX="resume=/dev/sdaX" を使えばハイバネーションからの復帰を有効にできます (sdaX は swap パーティションに置き換えて下さい)。

また、GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}" を使うこともできます (${swap_uuid} は swap パーティションの UUID に置き換えて下さい)。

複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。 So, for users who want both resume and systemd it would look like this: GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/usr/lib/systemd/systemd"

詳しくは Kernel parameters (日本語) を見て下さい。

grub.cfg を手動で編集する

Warning: grub.cfg ファイルの編集は非推奨です。このファイルは grub-mkconfig コマンドで生成して、/etc/default/grub や、/etc/grub.d フォルダ内のスクリプトを編集するのに越したことはありません。

基本的な GRUB 設定ファイルは以下のオプションを使っています:

  • (hdX,Y) is the partition Y on disk X, partition numbers starting at 1, disk numbers starting at 0
  • set default=N is the default boot entry that is chosen after timeout for user action
  • set timeout=M is the time M to wait in seconds for a user selection before default is booted
  • menuentry "title" {entry options} is a boot entry titled title
  • set root=(hdX,Y) sets the boot partition, where the kernel and GRUB modules are stored (boot need not be a separate partition, and may simply be a directory under the "root" partition (/)

設定サンプル:

/boot/grub/grub.cfg
# Config file for GRUB - The GNU GRand Unified Bootloader
# /boot/grub/grub.cfg

# DEVICE NAME CONVERSIONS
#
#  Linux           Grub
# -------------------------
#  /dev/fd0        (fd0)
#  /dev/sda        (hd0)
#  /dev/sdb2       (hd1,2)
#  /dev/sda3       (hd0,3)
#

# Timeout for menu
set timeout=5

# Set default boot entry as Entry 0
set default=0

# (0) Arch Linux
menuentry "Arch Linux" {
  set root=(hd0,1)
  linux /vmlinuz-linux root=/dev/sda3 ro
  initrd /initramfs-linux.img
}

## (1) Windows
#menuentry "Windows" {
#  set root=(hd0,3)
#  chainloader +1
#}

デュアルブート

Note: GRUB に自動で他のシステムを検索してほしい場合は、os-prober をインストールするとよいでしょう。

grub-mkconfig を使う

他のエントリを追加する最適の方法は /etc/grub.d/40_custom/boot/grub/custom.cfg を編集することです。grub-mkconfig の実行時にこのファイルにエントリが自動で追加されます。 新しい行を追加した後、次を実行して grub.cfg を生成・更新してください:

# grub-mkconfig -o /boot/grub/grub.cfg
GNU/Linux とデュアルブート

他のディストリが sda2 パーティションに存在する場合:

menuentry "Other Linux" {
  set root=(hd0,2)
  linux /boot/vmlinuz (add other options here as required)
  initrd /boot/initrd.img (if the other kernel uses/needs one)
}
FreeBSD とデュアルブート

FreeBSD は UFS でシングルパーティションにインストールする必要があります。sda4 にインストールされている場合:

menuentry "FreeBSD" {
  set root=(hd0,4)
  chainloader +1
}
Windows とデュアルブート

ここでは Windows のパーティションが sda3 にあると仮定しています。実際に windows があるパーティションではなく、インストール時に windows が作成したシステムの予約済みパーティションに set root と chainloader を設定する必要があります。あなたのシステムの予約済みパーティションが sda3 の場合:

# (2) Windows XP
menuentry "Windows XP" {
  set root="(hd0,3)"
  chainloader +1
}

Windows のブートローダーが GRUB とは完全に異なるハードドライブに存在する場合、Windows に GRUB が存在するのが最初のハードドライブだと信じこませる必要があるかもしれません。これは drivemap を使ってできます。GRUB が hd0 に、Windows が hd2 にあるとするには、set root の後に次を追加してください:

drivemap -s hd0 hd2

EasyBCD と NeoGRUB を使って Windows とデュアルブート

現在 EasyBCD の NeoGRUB は GRUB のメニューフォーマットを認識しないので、C:\NST\menu.lst ファイルの中身を以下のように置き換えることでチェインロードしてください:

default 0
timeout 1
title       Chainload into GRUB v2
root        (hd0,7)
kernel      /boot/grub/i386-pc/core.img

外観の設定

GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては #"No suitable mode found" エラー のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。

フレームバッファの解像度を設定する

GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い vga= は deprecated になりました。以下のように /etc/default/grub を編集する方法が推奨されています:

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

変更を適用するには、次を実行してください:

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

gfxpayload プロパティによってカーネルに解像度を維持させます。

Note:
  • 上記のサンプルで上手く行かないときは gfxmode="1024x768x32"vbemode="0x105" に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい
  • # hwinfo --framebuffer を使って利用できる全てのモードを表示することができます (hwinfo は [community] から利用可能です)、GRUB のプロンプトでは vbeinfo コマンドが使用できます

この方法が使えない時は、昔の vga= を使って下さい。/etc/default/grub"GRUB_CMDLINE_LINUX_DEFAULT=" という行に追加するだけです、例えば: "GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792" は解像度が 1024x768 になります。

以下の解像度のどれかを選ぶことができます: 640×480, 800×600, 1024×768, 1280×1024, 1600×1200, 1920×1200

915resolution hack

たまに Intel のグラフィックドライバーで # hwinfo --framebuffervbeinfo のどちらも希望する解像度を表示しないことがあります。この場合、915resolution を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。915resolution のホームページ を見て下さい。

まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です:

sh:grub> 915resolution -l
Intel 800/900 Series VBIOS Hack : version 0.5.3
[...]
Mode 30 : 640x480, 8 bits/pixel
[...]

次に、Mode 301440x900 解像度で上書きします:

/etc/grub.d/00_header
[...]
915resolution 30 1440 900  # Inserted line
set gfxmode=${GRUB_GFXMODE}
[...]

最後に、前で説明したように GRUB_GFXMODE を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう:

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

背景画像とビットマップフォント

GRUB は背景画像と pf2 フォーマットのビットマップフォントをサポートしています。grub パッケージに含まれている unifont フォントは unicode.pf2 というファイル名で置いてあり、同じく ASCII 文字は ascii.pf2 という名前です。

サポートされている画像フォーマットは tga, png, jpeg で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。

正しいフレームバッファの解像度を設定するようにしてください。

/etc/default/grub を以下のように編集してください:

GRUB_BACKGROUND="/boot/grub/myimage"
#GRUB_THEME="/path/to/gfxtheme"
GRUB_FONT="/path/to/font.pf2"
Note: GRUB を分割して別のパーティションにインストールしている場合、/boot/grub/myimage/grub/myimage になります。

変更を適用して grub.cfg に情報を追加するには、次を実行して下さい:

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

スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに "Found background image..." と表示されるはずです。 この文句が表示されない場合、画像情報はおそらく grub.cfg ファイルに組み入れられていません。

画像が表示されないときは、以下をチェックしてください:

  • /etc/default/grub に記述したパスとファイル名が正しいか
  • 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg)
  • 画像が RGB モードで保存されていて、インデックスは付いていないか
  • コンソールモードが /etc/default/grub で無効になっているか
  • 背景画像を /boot/grub/grub.cfg ファイルに入れるために grub-mkconfig コマンドをちゃんと実行したか

テーマ

以下は GRUB パッケージに含まれている Starfield テーマを設定する例です。

/etc/default/grub を編集してください:

GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"

変更を適用してください:

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

テーマの設定が成功すると、ターミナルに Found theme: /usr/share/grub/themes/starfield/theme.txt と表示されます。 テーマを使っている時は基本的にスプラッシュイメージは表示されません。

メニューの色

GRUB のメニューの色を設定することができます。GRUB で利用できる色は the GRUB Manual にあります。 以下サンプルです:

/etc/default/grub を編集してください:

GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

変更を適用してください:

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

メニューを隠す

GRUB のユニークな機能のひとつとして、メニューを隠して必要な時に Esc を押して表示することができます。また、タイムアウトカウンターを表示するかどうか設定することもできます。

/etc/default/grub を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています:

GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=false

そして次を実行して下さい:

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

フレームバッファの無効化

バイナリドライバーに問題が発生するので NVIDIA のプロプライエタリドライバーを使っているユーザーは GRUB のフレームバッファを無効化するべきです。

フレームバッファを無効にするには、/etc/default/grub を編集して次の行をアンコメントしてください:

GRUB_TERMINAL_OUTPUT=console

そして次を実行して下さい:

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

他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、/etc/default/grub 内の次の変数を変更してください:

GRUB_GFXPAYLOAD_LINUX=text

そして同じように設定を再生成してください。

他のオプション

LVM

LVM/boot で使っている場合、メニューエントリの行の前に次を追加してください:

insmod lvm

そしてメニューエントリで root を次のように指定してください:

set root=lvm/lvm_group_name-lvm_logical_boot_partition_name

サンプル:

# (0) Arch Linux
menuentry "Arch Linux" {
  insmod lvm
  set root=lvm/VolumeGroup-lv_boot
  # you can only set following two lines
  linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro
  initrd /initramfs-linux.img
}

RAID

GRUB には RAID ボリュームの便利な制御機能があります。 You need to add insmod mdraid which allows you to address the volume natively. For example, /dev/md0 becomes:

set root=(md0)

whereas a partitioned RAID volume (e.g. /dev/md0p1) becomes:

set root=(md0,1)

To install grub when using raid1 as the /boot partition (or using /boot housed on a raid1 root partition), on devices with GPT ef02/'BIOS boot partition', simply run grub-install on both of the drives, such as:

grub-install --recheck --debug /dev/sda && grub-install --recheck --debug /dev/sdb

Where the raid1 array housing /boot is housed on /dev/sda and /dev/sdb.

Persistent block device naming

One naming scheme for Persistent block device naming is the use of globally unique UUIDs to detect partitions instead of the "old" /dev/sd*. Advantages are covered up in the above linked article.

Persistent naming via filesystem UUIDs are used by default in GRUB.

Note: The /boot/grub.cfg file needs regeneration with the new UUID in /etc/default/grub every time a relevant filesystem is resized or recreated. Remember this when modifying partitions & filesystems with a Live-CD.

Whether to use UUIDs is controlled by an option in /etc/default/grub:

# GRUB_DISABLE_LINUX_UUID=true

Either way, do not forget to generate the changes:

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

ラベルを使う

It is possible to use labels, human-readable strings attached to filesystems, by using the --label option to search. First of all, label your existing partition:

# tune2fs -L <LABEL> <PARTITION>

Then, add an entry using labels. An example of this:

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 はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと fallback としての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには /etc/default/grub を編集して GRUB_DEFAULT の値を変更してください:

GRUB_DEFAULT=saved

これで GRUB は保存されたエントリをデフォルトにします。選択したエントリの保存を有効にするには、次の行を /etc/default/grub に追加してください:

GRUB_SAVEDEFAULT=true
Note: 手動で追加したメニューアイテム (例: /etc/grub.d/40_custom/boot/grub/custom.cfg の Windows) には savedefault の追加が必要です。設定ファイルを再生成するのを忘れないで下さい。

デフォルトのメニューエントリを変更する

デフォルトで選択されるエントリを変更するには、/etc/default/grub を編集して GRUB_DEFAULT の値を変更してください:

数字を使う:

GRUB_DEFAULT=0

Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。

メニューのタイトルを使う:

GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
Note: 設定ファイルを再生成するのを忘れないで下さい。

セキュリティ

If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB's configuration files. To do this, run the command grub-mkpasswd-pbkdf2. Enter a password and confirm it:

grub-mkpasswd-pbkdf2
[...]
Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A

Then, add the following to /etc/grub.d/00_header:

/etc/grub.d/00_header
cat << EOF

set superusers="username"
password_pbkdf2 username <password>

EOF

where <password> is the string generated by grub-mkpasswd_pbkdf2.

Regenerate your configuration file. Your GRUB command line, boot parameters and all boot entries are now protected.

This can be relaxed and further customized with more users as described in the "Security" part of the GRUB manual.

Root encryption

To let GRUB automatically add the kernel parameters for root encryption, add cryptdevice=/dev/yourdevice:label to GRUB_CMDLINE_LINUX in /etc/default/grub.

Tip: If you are upgrading from a working GRUB Legacy configuration, check /boot/grub/menu.lst.pacsave for the correct device/label to add. Look for them after the text kernel /vmlinuz-linux.

Example with root mapped to /dev/mapper/root:

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"

Also, disable the usage of UUIDs for the rootfs:

GRUB_DISABLE_LINUX_UUID=true

Regenerate the configuration.

Boot non-default entry only once

The command grub-reboot is very helpful to boot another entry than the default only once. GRUB loads the entry passed in the first command line argument, when the system is rebooted the next time. Most importantly GRUB returns to loading the default entry for all future booting. Changing the configuration file or selecting an entry in the GRUB menu is not necessary.

Note: This requires GRUB_DEFAULT=saved in /etc/default/grub (and then regenerating grub.cfg) or, in case of hand-made grub.cfg, the line set default="${saved_entry}".

Hide GRUB unless the Shift key is held down

In order to achieve the fastest possible boot, instead of having GRUB wait for a timeout, it is possible for GRUB to hide the menu, unless the Shift key is held down during GRUB's start-up.

In order to achieve this, you should add the following line to /etc/default/grub:

 GRUB_FORCE_HIDDEN_MENU="true"

And the following file should be created:

/etc/grub.d/31_hold_shift

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"

export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"

. "${datarootdir}/grub/grub-mkconfig_lib"

found_other_os=

make_timeout () {

  if [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then 
    if [ "x${1}" != "x" ] ; then
      if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
    verbose=
      else
    verbose=" --verbose"
      fi

      if [ "x${1}" = "x0" ] ; then
    cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep$verbose --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
EOF
      else
    cat << EOF
if [ "x\${timeout}" != "x-1" ]; then
  if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
    set timeout=0
  fi
fi
EOF
      fi
    fi
  fi
}

adjust_timeout () {
  if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
    cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
    make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
    echo else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
    echo fi
  else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
  fi
}

  adjust_timeout

    cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep$verbose --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
EOF

GRUB から ISO を直接起動する

/etc/grub.d/40_custom/boot/grub/custom.cfg を編集して対象の ISO のエントリを追加してください。編集したら、通常通り grub-mkconfig -o /boot/grub/grub.cfg を (root で) 実行して GRUB メニューを更新してください。

Arch ISO

Note: The following examples assume the ISO is in /archives on hd0,6.
Tip: For thumbdrives, use something like (hd1,$partition) and either /dev/sdbY for the img_dev parameter or a persistent name, e.g. img_dev=/dev/disk/by-label/CORSAIR.
x86_64
menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
  set isofile="/archives/archlinux-2013.05.01-dual.iso"
  set partition="6"
  loopback loop (hd0,$partition)/$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}
i686
menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
  set isofile="/archives/archlinux-2013.05.01-dual.iso"
  set partition="6"
  loopback loop (hd0,$partition)/$isofile
  linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/i686/archiso.img
}

Ubuntu ISO

Note: The example assumes that the iso is in /archives on hd0,6. Users must adjust the location and hdd/partition in the lines below to match their systems.
menuentry "ubuntu-13.04-desktop-amd64.iso" {
  set isofile="/archives/ubuntu-13.04-desktop-amd64.iso"
  loopback loop (hd0,6)/$isofile
  linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --
  initrd (loop)/casper/initrd.lz
}
menuentry "ubuntu-12.04-desktop-amd64.iso" {
  set isofile="/archives/ubuntu-12.04-desktop-amd64.iso"
  loopback loop (hd0,6)/$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --
  initrd (loop)/casper/initrd.lz
}

他の ISO

Other working configurations from link Source.

Using the command shell

Since the MBR is too small to store all GRUB modules, only the menu and a few basic commands reside there. The majority of GRUB functionality remains in modules in /boot/grub, which are inserted as needed. In error conditions (e.g. if the partition layout changes) GRUB may fail to boot. When this happens, a command shell may appear.

GRUB offers multiple shells/prompts. If there is a problem reading the menu but the bootloader is able to find the disk, you will likely be dropped to the "normal" shell:

sh:grub>

If there is a more serious problem (e.g. GRUB cannot find required files), you may instead be dropped to the "rescue" shell:

grub rescue>

The rescue shell is a restricted subset of the normal shell, offering much less functionality. If dumped to the rescue shell, first try inserting the "normal" module, then starting the "normal" shell:

grub rescue> set prefix=(hdX,Y)/boot/grub
grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod
rescue:grub> normal

Pager support

GRUB supports pager for reading commands that provide long output (like the help command). This works only in normal shell mode and not in rescue mode. To enable pager, in GRUB command shell type:

sh:grub> set pager=1

GUI 設定ツール

以下のパッケージがインストール可能です:

  • grub-customizer — ブートローダー (GRUB や BURG) のカスタマイズ
https://launchpad.net/grub-customizer || grub-customizerAUR
  • grub2-editor — GRUB ブートローダー設定の KDE4 コントロールモジュール
http://kde-apps.org/content/show.php?content=139643 || grub2-editorAUR
  • kcm-grub2 — この Kcm モジュールは GRUB の基本的な設定を管理します
http://kde-apps.org/content/show.php?content=137886 || kcm-grub2AUR
  • startupmanager — GRUB Legacy, GRUB, Usplash, Splashy の設定を変更できる GUI アプリ (abandonned)
http://sourceforge.net/projects/startup-manager/ || startupmanagerAUR

parttool for hide/unhide

If you have a Windows 9x paradigm with hidden C:\ disks GRUB can hide/unhide it using parttool. For example, to boot the third C:\ disk of three Windows 9x installations on the CLI enter the CLI and:

parttool hd0,1 hidden+ boot-
parttool hd0,2 hidden+ boot-
parttool hd0,3 hidden- boot+
set root=hd0,3
chainloader +1
boot

Using the rescue console

See #Using the command shell first. If unable to activate the standard shell, one possible solution is to boot using a live CD or some other rescue disk to correct configuration errors and reinstall GRUB. However, such a boot disk is not always available (nor necessary); the rescue console is surprisingly robust.

The available commands in GRUB rescue include insmod, ls, set, and unset. This example uses set and insmod. set modifies variables and insmod inserts new modules to add functionality.

Before starting, the user must know the location of their /boot partition (be it a separate partition, or a subdirectory under their root):

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

where X is the physical drive number and Y is the partition number.

To expand console capabilities, insert the linux module:

grub rescue> insmod (hdX,Y)/boot/grub/linux.mod
Note: With a separate boot partition, omit /boot from the path, (i.e. type set prefix=(hdX,Y)/grub and insmod (hdX,Y)/grub/linux.mod).

This introduces the linux and initrd commands, which should be familiar (see #Configuration).

An example, booting Arch Linux:

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

With a separate boot partition, again change the lines accordingly:

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

After successfully booting the Arch Linux installation, users can correct grub.cfg as needed and then reinstall GRUB.

To reinstall GRUB and fix the problem completely, changing /dev/sda if needed. See #Bootloader installation for details.

Combining the use of UUIDs and basic scripting

If you like the idea of using UUIDs to avoid unreliable BIOS mappings or are struggling with GRUB's syntax, here is an example boot menu item that uses UUIDs and a small script to direct GRUB to the proper disk partitions for your system. All you need to do is replace the UUIDs in the sample with the correct UUIDs for your system. The example applies to a system with a boot and root partition. You will obviously need to modify the GRUB configuration if you have additional partitions:

 menuentry "Arch Linux 64" {
         # Set the UUIDs for your boot and root partition respectively
         set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07
         set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a
   
         # (Note: This may be the same as your boot partition)
   
         # Get the boot/root devices and set them in the root and grub_boot variables
         search --fs-uuid $the_root_uuid --set=root
         search --fs-uuid $the_boot_uuid --set=grub_boot
   
         # Check to see if boot and root are equal.
         # If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)
         if [ $the_boot_uuid == $the_root_uuid ] ; then
             set grub_boot=($grub_boot)/boot
         else
             set grub_boot=($grub_boot)
         fi
   
         # $grub_boot now points to the correct location, so the following will properly find the kernel and initrd
         linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro
         initrd $grub_boot/initramfs-linux.img
 }

トラブルシューティング

Intel BIOS が GPT をブートしない

Intel BIOS によっては起動時に最低でも1つ起動可能な MBR パーティションが必要なため、GPT でパーティションされたブートセットアップが起動できなくなることがあります。

This can be circumvented by using (for instance) fdisk to mark one of the GPT partitions (preferably the 1007 KiB partition you have created for GRUB already) bootable in the MBR. This can be achieved, using fdisk, by the following commands: Start fdisk against the disk you are installing, for instance fdisk /dev/sda, then press a and select the partition you wish to mark as bootable (probably #1) by pressing the corresponding number, finally press w to write the changes to the MBR.

Note: The bootable-marking must be done in fdisk or similar, not in GParted or others, as they will not set the bootable flag in the MBR.

詳細は ここ から見ることができます。

デバッグメッセージを有効にする

以下を grub.cfg に追加してください:

set pager=1
set debug=all

"No suitable mode found" エラー

メニューエントリのどれかを起動したときに以下のエラーが表示される場合:

error: no suitable mode found
Booting however

GRUB の正しいビデオモード (gfxmode) を使って GRUB グラフィカルターミナル (gfxterm) を初期化する必要があります。このビデオモードは 'gfxpayload' を使って GRUB から linux カーネルに渡されます。UEFI 環境の場合、GRUB のビデオモードが初期化されないと、端末にカーネルのブートメッセージが (少なくとも KMS が有効になるまで) 全く表示されません。

Copy /usr/share/grub/unicode.pf2 to ${GRUB_PREFIX_DIR} (/boot/grub/ in case of BIOS and UEFI systems). If GRUB UEFI was installed with --boot-directory=/boot/efi/EFI set, then the directory is /boot/efi/EFI/grub/:

# cp /usr/share/grub/unicode.pf2 ${GRUB_PREFIX_DIR}

If /usr/share/grub/unicode.pf2 does not exist, install bdf-unifont, create the unifont.pf2 file and then copy it to ${GRUB_PREFIX_DIR}:

# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf

Then, in the grub.cfg file, add the following lines to enable GRUB to pass the video mode correctly to the kernel, without of which you will only get a black screen (no output) but booting (actually) proceeds successfully without any system hang.

BIOS systems:

insmod vbe

UEFI systems:

insmod efi_gop
insmod efi_uga

After that add the following code (common to both BIOS and UEFI):

insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
    insmod gfxterm
    set gfxmode=auto
    set gfxpayload=keep
    terminal_output gfxterm
fi

As you can see for gfxterm (graphical terminal) to function properly, unicode.pf2 font file should exist in ${GRUB_PREFIX_DIR}.

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) 特有の手順 を読んで下さい。

GRUB UEFI がシェルを起動する

GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく grub.cfg が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を --boot-directory でインストールして grub.cfg がなかったり、ブートパーティションのパーティション番号 (grubx64.efi ファイルにハードコードされています) が変更されているときにこの問題が発生します。

GRUB UEFI がロードされない

An example of a working EFI:

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

If the screen only goes black for a second and the next boot option is tried afterwards, according to this post, moving GRUB to the partition root can help. The boot option has to be deleted and recreated afterwards. The entry for GRUB should look like this then:

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

Invalid signature

(パーティションを再設定したりハードドライブを追加した後) Windows を起動しようとしたときに "invalid signature" エラーが起こる場合、GRUB のデバイス設定を移動(削除)して再設定してください:

# mv /boot/grub/device.map /boot/grub/device.map-old
# grub-mkconfig -o /boot/grub/grub.cfg

grub-mkconfig should now mention all found boot options, including Windows. If it works, remove /boot/grub/device.map-old.

起動中にフリーズする

GRUB がカーネルと initial ramdisk をロードした後、エラーを出さずにブートが固まる場合、add_efi_memmap カーネルパラメータを取り除いてみてください。

GRUB Legacy のリストア

  • GRUB v2 のファイルをどけてください:
# mv /boot/grub /boot/grub.nonfunctional
  • GRUB Legacy を /boot にコピーしてください:
# cp -af /boot/grub-legacy /boot/grub
  • MBR と sda の次の 62 セクタをバックアップしたコピーで置き換えて下さい:
Warning: This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It will mess up your system.
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1

MBR のブートコードだけをリストアするとより安全です:

# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1

他の OS から Arch が見つからない

他のディストリビューションで os-prober を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、/etc/lsb-release をおくことで検知が改善されると報告されています。このファイルと更新ツールは公式リポジトリにある lsb-release パッケージから利用可能です。

資料

  1. 公式 GRUB マニュアル - https://www.gnu.org/software/grub/manual/grub.html
  2. Ubuntu wiki の GRUB ページ - https://help.ubuntu.com/community/Grub2
  3. GRUB wiki page describing steps to compile for UEFI systems - https://help.ubuntu.com/community/UEFIBooting
  4. Wikipedia の BIOS Boot partition ページ

参照

  1. A Linux Bash Shell script to compile and install GRUB for BIOS from BZR Source
  2. A Linux Bash Shell script to compile and install GRUB for UEFI from BZR Source