「GRUB/ヒントとテクニック」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:ブートローダー en:GRUB/Tips and tricks es:GRUB/Tips and tricks zh-CN:GRUB/Tips and tricks メインの記事は GRUB を見て下さ...」)
 
(同期)
 
(6人の利用者による、間の34版が非表示)
1行目: 1行目:
 
[[Category:ブートローダー]]
 
[[Category:ブートローダー]]
 
[[en:GRUB/Tips and tricks]]
 
[[en:GRUB/Tips and tricks]]
[[es:GRUB/Tips and tricks]]
+
[[es:GRUB (Español)/Tips and tricks]]
[[zh-CN:GRUB/Tips and tricks]]
+
[[zh-hans:GRUB/Tips and tricks]]
 
メインの記事は [[GRUB]] を見て下さい。
 
メインの記事は [[GRUB]] を見て下さい。
   
== GUI 設定ツール ==
+
== 代替インストール方法 ==
   
以下のパケージがインストール可能です:
+
=== USB スティクにインストール ===
* {{App|grub-customizer|ブートローダー (GRUB や BURG) のカスタマイズ|https://launchpad.net/grub-customizer|{{AUR|grub-customizer}}}}
 
* {{App|grub2-editor|GRUB ブートローダー設定の KDE4 コントロールモジュール|http://kde-apps.org/content/show.php?content=139643|{{AUR|grub2-editor}}}}
 
* {{App|startupmanager|GRUB Legacy, GRUB, Usplash, Splashy の設定を変更できる GUI アプリ ([https://launchpad.net/startup-manager/+announcement/8300 開発停止])|http://sourceforge.net/projects/startup-manager/|{{AUR|startupmanager}}}}
 
   
== 外観の設定 ==
+
==== BIOS ====
   
  +
USB の1番目のパーティションが FAT32 であり、そのパーティションが /dev/sdy1 であるとすると
GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては [[GRUB#"No suitable mode found" エラー]] のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。
 
   
  +
# mount --mkdir /dev/sdy1 /mnt/usb
=== フレームバッファの解像度を設定する ===
 
  +
# grub-install --target=i386-pc --debug --boot-directory=/mnt/usb/boot /dev/sdy
  +
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg
   
  +
任意で、{{ic|grub.cfg}} の設定ファイルのバックアップを取ってください:
GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い {{ic|1=vga=}} は deprecated になりました。以下のように {{ic|/etc/default/grub}} を編集する方法が推奨されています:
 
   
  +
# mkdir -p /mnt/usb/etc/default
GRUB_GFXMODE=1024x768x32
 
  +
# cp /etc/default/grub /mnt/usb/etc/default
GRUB_GFXPAYLOAD_LINUX=keep
 
  +
# cp -a /etc/grub.d /mnt/usb/etc
  +
  +
# sync; umount /mnt/usb
  +
  +
==== EFI ====
  +
  +
GRUB で EFI イメージを {{ic|''esp''/EFI/BOOT/BOOTX64.efi}} に書き込むには、{{ic|grub-install}} を使うときに {{ic|--removable}} フラグを使用してください (このパスは、UEFI ブートエントリが無くとも、ファームウェアが見つけることができます)。
  +
  +
=== パーティションやパーティションレスディスクにインストールする ===
  +
  +
{{Warning|GRUB では、GRUB Legacy や Syslinux と同じように、パーティションのブートセクタやパーティションレスディスクへのインストールを'''推奨していません'''。この種のセットアップは破損しやすく (特にアップデート中)、Arch の開発陣によるサポートは'''されていません'''。}}
  +
  +
パーティションブートセクタやパーティションレスディスク (別名 superfloppy)、フロッピーディスクに grub をセットアップするには、以下を実行してください ({{ic|/boot}} パーティションを {{ic|/dev/sdaX}} として例にしています):
  +
  +
# chattr -i /boot/grub/i386-pc/core.img
  +
# grub-install --target=i386-pc --debug --force /dev/sdaX
  +
# chattr +i /boot/grub/i386-pc/core.img
  +
  +
{{Note|
  +
* {{ic|/dev/sdaX}} はインストール先に置き換えて下さい。
  +
* {{ic|1=--target=i386-pc}} を使うと、{{ic|grub-install}} は BIOS システム専用にインストールします。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。
  +
}}
  +
  +
{{ic|--force}} オプションを使ってブロックリストを利用する必要があります。{{ic|1=--grub-setup=/bin/true}} を使うべきではありません (このオプションは、単に {{ic|core.img}} を生成するのに似ています)。
  +
  +
{{ic|grub-install}} は以下のような警告を表示し、この方法で何がうまく行かないのかについてヒントを与えます:
  +
  +
/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.
  +
  +
{{ic|--force}} が無いと、以下のエラーが表示され、{{ic|grub-setup}} はパーティションブートセクタのブートコードのセットアップを中止します:
  +
  +
/sbin/grub-setup: error: will not proceed with blocklists
  +
  +
{{ic|--force}} を付ければ、次のように表示されるはずです:
  +
  +
Installation finished. No error reported.
  +
  +
デフォルトで {{ic|grub-setup}} がパーティションやパーティションレスディスクへのインストールをしないようになっている理由は、この場合に限って GRUB がパーティションのブートセクタにある埋め込みブロックリストを使って {{ic|/boot/grub/i386-pc/core.img}} ファイルと prefix ディレクトリ {{ic|/boot/grub}} を見つける必要があるからです。{{ic|core.img}} のセクタ位置はパーティション上の (ファイルのコピーや削除など) ファイルシステムに変更が加えられた時に変化してしまうことがあります。詳細は https://bugzilla.redhat.com/show_bug.cgi?id=728742 や https://bugzilla.redhat.com/show_bug.cgi?id=730915 を見て下さい。
  +
  +
これを回避する方法は {{ic|/boot/grub/i386-pc/core.img}} に (上で説明しているように {{ic|chattr}} コマンドを使って) immutable フラグを設定することで、これによってディスク上の {{ic|core.img}} ファイルのセクタ位置が変化しなくなります。{{ic|/boot/grub/i386-pc/core.img}} に immutable フラグを設定するのは、GRUB をパーティションブートセクタやパーティションレスディスクにインストールするときだけ必要になることで、ブートセクタに埋め込まず MBR にインストールしたり {{ic|core.img}} だけを生成する時は必要ありません (上述)。
  +
  +
残念ながら、エラーが表示されなかったとしても、作成される {{ic|grub.cfg}} ファイルには起動するための正しい UUID が含まれません。https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604 を参照してください。
  +
この問題を修正するには以下のコマンドを実行してください:
  +
  +
# mount /dev/sdxY /mnt #ルートパーティション
  +
# mount /dev/sdxZ /mnt/boot #ブートパーティション(もしあれば)
  +
# arch-chroot /mnt
  +
  +
そして、{{Pkg|linux}} をインストールして、以下を実行してください:
   
変更を適用するには、次を実行してください:
 
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
   
  +
=== core.img だけを生成する ===
{{ic|gfxpayload}} プロパティによってカーネルに解像度を維持させます。
 
  +
  +
MBR や post-MBR 領域、パーティションブートセクタに GRUB のブートセクタコードを '''埋め込まずに'''、{{ic|/boot/grub}} ディレクトリを作成して {{ic|/boot/grub/i386-pc/core.img}} ファイルを生成するには、{{ic|1=--grub-setup=/bin/true}} オプションを {{ic|grub-install}} に追加して実行してください:
  +
  +
# grub-install --target=i386-pc --grub-setup=/bin/true --debug /dev/sda
   
 
{{Note|
 
{{Note|
  +
* {{ic|/dev/sda}} はインストール先に置き換えて下さい。
* 上記のサンプルで上手く行かないときは {{ic|1=gfxmode="1024x768x32"}} を {{ic|1=vbemode="0x105"}} に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい
 
  +
* {{ic|1=--target=i386-pc}} を使うと、{{ic|grub-install}} は BIOS システム専用にインストールします。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。
* {{ic|1=# hwinfo --framebuffer}} を使って利用できる全てのモードを表示することができます (hwinfo は [community] から利用可能です)、GRUB のプロンプトでは {{ic|1=vbeinfo}} コマンドが使用できます
 
 
}}
 
}}
   
  +
これで Linux カーネルやマルチブートカーネルとして GRUB Legacy や syslinux から GRUB の {{ic|core.img}} をチェインロードできます。([[Syslinux#チェインロード]] も参照)
この方法が使えない時は、昔の {{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}} になります。
 
   
  +
== GUI 設定ツール ==
以下の解像度のどれかを選ぶことができます: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}}
 
   
  +
* {{App|grub-customizer|GRUB や BURG のカスタマイザ|https://launchpad.net/grub-customizer|{{Pkg|grub-customizer}}}}
=== 915resolution hack ===
 
   
  +
== 外観の設定 ==
たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} と {{ic|1=vbeinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。
 
   
  +
GRUB ではデフォルトで、メニューの見た目を変更できます。GRUB のグラフィカルターミナルである gfxterm を {{ic|/etc/default/grub}} で初期化しておくことを忘れないでください:
まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です:
 
  +
{{hc|sh:grub> 915resolution -l|
 
  +
GRUB_TERMINAL_OUTPUT="gfxterm"
Intel 800/900 Series VBIOS Hack : version 0.5.3
 
  +
[...]
 
  +
=== フレームバッファの解像度を設定する ===
'''Mode 30''' : 640x480, 8 bits/pixel
 
  +
[...]
 
  +
GRUB は GRUB 自身 ({{ic|GFXMODE}}) とカーネル ({{ic|GFXPAYLOAD}}) の両方に対してフレームバッファを設定することができます。古い {{ic|1=vga=}} は非推奨になりました。以下のように {{ic|/etc/default/grub}} を編集して、幅(ピクセル) x 高さ(ピクセル) x [[Wikipedia:ja:色深度|色深度]] を設定する方法が推奨されています:
  +
  +
GRUB_GFXMODE=1024x768x32
  +
GRUB_GFXPAYLOAD_LINUX=keep
  +
  +
(デフォルトの {{ic|auto}} を含む)複数の解像度を指定できます。なので、次のように行を編集することを推奨します: {{ic|1=GRUB_GFXMODE=''望みの解像度'',''1024x768 などのフォールバック解像度'',auto}}。詳細は、[https://www.gnu.org/software/grub/manual/grub/html_node/gfxmode.html the GRUB gfxmode documentation] を参照してください。[https://www.gnu.org/software/grub/manual/html_node/gfxpayload.html#gfxpayload gfxpayload] プロパティはカーネルが解像度を保持することを保証します。
  +
  +
{{Note|
  +
* [[wikipedia:ja:VESA BIOS Extensions|VESA BIOS Extensions]] を通してグラフィックカードによりサポートされているモードのみを使用できます。サポートされているモードのリストを見るには、{{Pkg|hwinfo}} を[[インストール]]して、{{ic|hwinfo --framebuffer}} を root として実行してください。あるいは、GRUB コマンドラインに入り、{{ic|videoinfo}} というコマンドを実行してください。
  +
* [[NVIDIA]] プロプライエタリドライバの初期バージョンでは {{ic|''<width>''x''<height>''-''<depth>''}} という形式で {{ic|GRUB_GFXMODE}} が使えます(GeForce GTX 970 と nvidia 370 で検証済み) (例: {{ic|1920x1200x24}} ではなく {{ic|1920x1200-24}})。これは新しいカードとドライバでは使えないようです。最近のドライバと Pascal カードでは先の形式は機能せず、システムのクラッシュやハードロックなどの深刻な問題が発生します(GeForce GTX 1060 と nvidia 381.22 で検証済み)。現在のドライバとカードでは、標準的な {{ic|''width''x''height''x''depth''}} 形式で {{ic|GRUB_GFXMODE}} を設定することが最良の方法です。
  +
* 変更を加えた後に {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を実行することを忘れないでください。
 
}}
 
}}
  +
次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします:
 
  +
この方法がうまく行かない場合、非推奨の {{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}} になります。
{{hc|/etc/grub.d/00_header|
 
[...]
 
'''915resolution 30 1440 900 # Inserted line'''
 
set gfxmode&#61;${GRUB_GFXMODE}
 
[...]
 
}}
 
最後に、先に説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。
 
   
 
=== 背景画像とビットマップフォント ===
 
=== 背景画像とビットマップフォント ===
   
GRUB は背景画像と {{ic|pf2}} フォーマットのビットマップフォントをサポートしています。{{Pkg|grub}} パッケージに含まれている unifont フォントは {{ic|unicode.pf2}} というファイル名で置いてあり、同じく ASCII 文字は {{ic|ascii.pf2}} という名前です。
+
GRUB は背景画像と {{ic|pf2}} フォーマットのビットマップフォントをサポートしています。{{Pkg|grub}} パッケージに含まれている unifont フォントは {{ic|unicode.pf2}} というファイル名で置いてあり、同じく ASCII 文字は {{ic|ascii.pf2}} という名前です。ファイルのパスは {{ic|pacman -Ql grub {{!}} grep pf2}} を実行して得られます。
   
 
サポートされている画像フォーマットは tga, png, jpeg で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。
 
サポートされている画像フォーマットは tga, png, jpeg で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。
66行目: 124行目:
   
 
{{ic|/etc/default/grub}} を以下のように編集してください:
 
{{ic|/etc/default/grub}} を以下のように編集してください:
  +
 
GRUB_BACKGROUND="/boot/grub/myimage"
 
GRUB_BACKGROUND="/boot/grub/myimage"
 
#GRUB_THEME="/path/to/gfxtheme"
 
#GRUB_THEME="/path/to/gfxtheme"
 
GRUB_FONT="/path/to/font.pf2"
 
GRUB_FONT="/path/to/font.pf2"
   
{{Note|GRUB を分割して別のパーティションにインストールしている場合、{{ic|/boot/grub/myimage}} は {{ic|/grub/myimage}} になります。}}
+
{{Note|GRUB を分割して別のパーティションにインストールしている場合、{{ic|grub.cfg}} の {{ic|/boot/grub/myimage}} は自動的に {{ic|/grub/myimage}} になります。}}
  +
  +
変更を適用するには {{ic|grub.cfg}} を[[GRUB#メイン設定ファイルの生成|再生成]]してください。スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに {{ic|"Found background image..."}} と表示されるはずです。この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。
   
変更を適用するには {{ic|grub.cfg}} を[[GRUB#メイン設定ファイルの生成|再生成]]してください。スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに {{ic|"Found background image..."}} と表示されるはずです。
 
この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。
 
 
 
画像が表示されないときは、以下をチェックしてください:
 
画像が表示されないときは、以下をチェックしてください:
  +
 
* {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか
 
* {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか
 
* 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg)
 
* 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg)
81行目: 140行目:
 
* コンソールモードが {{ic|/etc/default/grub}} で無効になっているか
 
* コンソールモードが {{ic|/etc/default/grub}} で無効になっているか
 
* 背景画像を {{ic|/boot/grub/grub.cfg}} ファイルに入れるために {{ic|grub-mkconfig}} コマンドをちゃんと実行したか
 
* 背景画像を {{ic|/boot/grub/grub.cfg}} ファイルに入れるために {{ic|grub-mkconfig}} コマンドをちゃんと実行したか
  +
* {{ic|grub-mkconfig}} スクリプトは {{ic|grub.cfg}} の中のファイル名をクォートで囲まないためファイル名に空白は含めないこと
   
 
=== テーマ ===
 
=== テーマ ===
87行目: 147行目:
   
 
{{ic|/etc/default/grub}} を編集してください:
 
{{ic|/etc/default/grub}} を編集してください:
  +
 
GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"
 
GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"
   
 
変更を適用するには {{ic|grub.cfg}} を[[GRUB#メイン設定ファイルの生成|再生成]]してください。テーマの設定が成功すると、ターミナルに {{ic|Found theme: /usr/share/grub/themes/starfield/theme.txt}} と表示されます。
 
変更を適用するには {{ic|grub.cfg}} を[[GRUB#メイン設定ファイルの生成|再生成]]してください。テーマの設定が成功すると、ターミナルに {{ic|Found theme: /usr/share/grub/themes/starfield/theme.txt}} と表示されます。
  +
 
テーマを使っている時は基本的にスプラッシュイメージは表示されません。
 
テーマを使っている時は基本的にスプラッシュイメージは表示されません。
   
98行目: 160行目:
   
 
{{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"
106行目: 169行目:
   
 
{{ic|/etc/default/grub}} を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています:
 
{{ic|/etc/default/grub}} を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています:
  +
GRUB_TIMEOUT=0
 
  +
GRUB_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT=5
 
  +
GRUB_TIMEOUT_STYLE='countdown'
GRUB_HIDDEN_TIMEOUT_QUIET=false
 
  +
GRUB_HIDDEN_TIMEOUT がメニューの表示まで待機する秒数です。メニューを隠すには GRUB_TIMEOUT=0 も設定する必要があります。
 
  +
{{ic|GRUB_TIMEOUT}} がメニューの表示まで待機する秒数です。
   
 
=== フレームバッファの無効化 ===
 
=== フレームバッファの無効化 ===
   
バイナリドライバー問題が発生するので NVIDIA のプロプライエタリドライバーを使っているユーザーは GRUB のフレームバッファを無効化するべきです
+
バイナリドライバー問題が発生するのでNVIDIA のプロプライエタリドライバーを使っているユーザーはGRUB のフレームバッファを無効化するべきかもしれません
   
 
フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください:
 
フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください:
  +
 
GRUB_TERMINAL_OUTPUT=console
 
GRUB_TERMINAL_OUTPUT=console
   
 
他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、{{ic|/etc/default/grub}} 内の次の変数を変更してください:
 
他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、{{ic|/etc/default/grub}} 内の次の変数を変更してください:
  +
 
GRUB_GFXPAYLOAD_LINUX=text
 
GRUB_GFXPAYLOAD_LINUX=text
   
 
== GRUB で ISO9660 イメージファイルを直接起動 ==
 
== GRUB で ISO9660 イメージファイルを直接起動 ==
   
GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくは [[Multiboot USB drive#Using GRUB and loopback devices]] を参照。
+
GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくは [[マルチブート USB ドライブ#GRUB とループバックデバイスを使う]] を参照。
 
== 永続的なブロックデバイスの命名 ==
 
 
[[永続的なブロックデバイスの命名]]のひとつとして"古い" {{ic|/dev/sd*}} の代わりに世界でただひとつの UUID を使ってパーティションを識別する方法があります。利点については上のリンクされている記事で説明しています。
 
 
ファイルシステムの UUID の永続的命名はデフォルトで GRUB で使われています。
 
 
{{Note|関連するファイルシステムのサイズを変えたり再作成したときはいつでも {{ic|/etc/default/grub}} の新しい UUID を使って {{ic|/boot/grub.cfg}} ファイルを再生成する必要があります。ライブ CD でパーティションやファイルシステムを修正するときは、このことを覚えておいて下さい。}}
 
 
UUID を使うかどうかは {{ic|/etc/default/grub}} 内のオプションによって決めます:
 
 
# GRUB_DISABLE_LINUX_UUID=true
 
 
どちらにしても、変更を生成することを忘れないで下さい:
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
 
== ラベルを使う ==
 
 
{{ic|--label}} オプションを {{ic|search}} に使うことで、人間が読めるラベルをファイルシステムに付けることができます。まず最初に、既存のパーティションにラベリングしてください:
 
# tune2fs -L ''LABEL'' ''PARTITION''
 
 
次に、ラベルを使ってエントリを追加してください。例:
 
 
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 メニューのパスワード保護 ==
 
== GRUB メニューのパスワード保護 ==
   
  +
{{Warning|誰かがあなたのマシンに物理的にアクセスしてライブ USB やライブディスクを起動できる場合 (BIOS が外部ディスクからの起動を許可している場合)、{{ic|/boot}} が存在するパーティションが暗号化されてなければ GRUB の設定ファイルを編集してパスワード認証を迂回するのは至極簡単なことです。[[GRUB#暗号化]] や [[セキュリティ#ディスク暗号化]] を見てください。}}
ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名・パスワードの組み合わせを追加することができます。これをするには、{{ic|grub-mkpasswd-pbkdf2}} コマンドを実行してください。パスワードを入力して確認してください:
 
   
  +
ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名とパスワードを追加することができます。そうするには、{{ic|grub-mkpasswd-pbkdf2}} コマンドを実行し、パスワードを入力し、確認してください:
{{hc|grub-mkpasswd-pbkdf2|
 
  +
  +
{{hc|$ grub-mkpasswd-pbkdf2|
 
[...]
 
[...]
Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A
+
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A
 
}}
 
}}
  +
次に、以下を {{ic|/etc/grub.d/40_custom}} に追加して下さい:
 
  +
次に、{{ic|chmod o-r /etc/grub.d/40_custom}} を実行して、root 以外が読み出せないように {{ic|/etc/grub.d/40_custom}} のパーミッションを変更してください。そして、そのファイルを以下のように変更してください:
  +
 
{{hc|/etc/grub.d/40_custom|2=
 
{{hc|/etc/grub.d/40_custom|2=
set superusers="'''username'''"
+
set superusers="'''ユーザ名'''"
password_pbkdf2 '''username''' '''<password>'''
+
password_pbkdf2 '''ユーザ名 ''パスワードのハッシュ値'''''
 
}}
 
}}
{{ic|<password>}} は {{ic|grub-mkpasswd_pbkdf2}} によって生成された文字列に置き換えてください。
 
   
  +
{{ic|''パスワードのハッシュ値''}} の部分は、{{ic|grub-mkpasswd_pbkdf2}} によって生成された、''grub.pbkdf2'' で始まる文字列に置き換えてください。
設定ファイルを再生成すれば、GRUB コマンドライン、ブートパラメータ、そしてブートエントリには全てプロテクトがかけられます。
 
  +
  +
{{ic|grub-mkconfig}} で設定ファイルを再生成してください。GRUB コマンドラインや ''boot parameters'' にアクセスしようとしたり、'''エントリを起動'''しようとしたりすると、先の指定したユーザ名とパスワードを要求するようになります。後者は次のトピックに従うことで回避できることに注意してください。
   
 
この制限は [https://www.gnu.org/software/grub/manual/grub.html#Security GRUB manual] の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。
 
この制限は [https://www.gnu.org/software/grub/manual/grub.html#Security GRUB manual] の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。
174行目: 217行目:
 
=== GRUB の編集とコンソールオプションだけをパスワードで保護 ===
 
=== GRUB の編集とコンソールオプションだけをパスワードで保護 ===
   
{{ic|--unrestricted}} をメニューエントリに追加することでエントリの編集や GRUB のコマンドコンソールへのアクセスを制限しつつ誰でも OS を起動できるようになります。スーパーユーザーや {{ic|--user}} スイッチで指定したユーザーだけがメニューエントリを編集することが可能です。
+
{{ic|--unrestricted}} をメニューエントリに追加することでエントリの編集や GRUB のコマンドコンソールへのアクセスを制限しつつ誰でも OS を起動できるようになります。
  +
スーパーユーザーや {{ic|--user}} スイッチで指定したユーザーだけがメニューエントリを編集することが可能です。
   
 
{{hc|/boot/grub/grub.cfg|2=
 
{{hc|/boot/grub/grub.cfg|2=
 
menuentry 'Arch Linux' --unrestricted --class arch --class gnu-linux --class os ...
 
menuentry 'Arch Linux' --unrestricted --class arch --class gnu-linux --class os ...
  +
}}
  +
  +
{{Accuracy|{{ic|/etc/grub.d/10_linux}} を編集するべきではありません。{{pkg|grub}} がアップデートされた際に上書きされてしまいます。}}
  +
  +
Linux エントリを {{ic|--unrestricted}} にするには、{{ic|/etc/grub.d/10_linux}} の先頭の {{ic|CLASS}} 変数を変更することにより可能です。
  +
  +
{{hc|/etc/grub.d/10_linux|2=
  +
CLASS="--class gnu-linux --class gnu --class os --unrestricted"
 
}}
 
}}
   
 
== Shift キーが押されていない時は GRUB を隠す ==
 
== Shift キーが押されていない時は GRUB を隠す ==
  +
  +
{{Note|これは [https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/425979 UEFI システム]上では動作しません。修飾キーの状態を検出する方法をファームウェアが提供していないためです。}}
  +
 
起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に {{ic|Shift}} キーが押されていない限り、GRUB にメニューを隠させるということが可能です。
 
起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に {{ic|Shift}} キーが押されていない限り、GRUB にメニューを隠させるということが可能です。
   
187行目: 242行目:
 
GRUB_FORCE_HIDDEN_MENU="true"
 
GRUB_FORCE_HIDDEN_MENU="true"
   
そして [https://gist.githubusercontent.com/anonymous/8eb2019db2e278ba99be/raw/257f15100fd46aeeb8e33a7629b209d0a14b9975/gistfile1.sh] のファイルを作成して、実行可能属性を付与して grub の設定を再生成してください:
+
そして [https://gist.githubusercontent.com/anonymous/8eb2019db2e278ba99be/raw/257f15100fd46aeeb8e33a7629b209d0a14b9975/gistfile1.sh] の内容を含むファイル {{ic|/etc/grub.d/31_hold_shift}} を作成して、[[実行可能属性]]を付与して grub の設定を再生成してください:
   
# chmod a+x /etc/grub.d/31_hold_shift
 
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
   
195行目: 249行目:
   
 
== UUID の使用と基本的なスクリプトの混合 ==
 
== UUID の使用と基本的なスクリプトの混合 ==
  +
 
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります:
 
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります:
   
223行目: 278行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
== 複数のエントリ ==
== grub.cfg を手動で作成する ==
 
 
基本的な GRUB 設定ファイルは以下のオプションを使っています:
 
* {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上のパーティション ''Y'' を示します、パーティション番号は1から始まり、ディスク番号は0から始まります
 
* {{ic|1=set default=''N''}} はユーザーアクションのタイムアウト後に選択されるデフォルトブートエントリを指定します
 
* {{ic|1=set timeout=''M''}} はデフォルトのエントリが起動されるまでユーザーが選択するのを待つ時間 ''M'' 秒を表します
 
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} という名前のブートエントリになります
 
* {{ic|1=set root=(hd''X'',''Y'')}} はカーネルや GRUB モジュールが保存されている boot パーティションを指定します (boot パーティションを分割する必要はなく、"root" パーティション ({{ic|/}}) 下のただのディレクトリでもかまいません)
 
 
== エントリ ==
 
   
 
=== サブメニューの無効化 ===
 
=== サブメニューの無効化 ===
242行目: 288行目:
 
=== 以前のエントリを思い出させる ===
 
=== 以前のエントリを思い出させる ===
   
GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと fallback としての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
+
GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと、フォールバックとしての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
   
 
GRUB_DEFAULT=saved
 
GRUB_DEFAULT=saved
250行目: 296行目:
 
GRUB_SAVEDEFAULT=true
 
GRUB_SAVEDEFAULT=true
   
  +
grub は btrfs に書き込めないため、これは /boot が btrfs でない場合にのみ機能します。ただし、"sparse file not allowed. Press any key to continue." という誤解を招くエラーメッセージが生成されます。
{{Note|手動で追加したメニューアイテム (例: {{ic|/etc/grub.d/40_custom}} や {{ic|/boot/grub/custom.cfg}} の Windows) には {{ic|savedefault}} の追加が必要です。設定ファイルを[[GRUB#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}}
 
  +
  +
{{Note|手動で追加したメニューアイテム (例: {{ic|/etc/grub.d/40_custom}} や {{ic|/boot/grub/custom.cfg}} の Windows) には {{ic|savedefault}} の追加が必要です。}}
   
 
=== デフォルトのメニューエントリを変更する ===
 
=== デフォルトのメニューエントリを変更する ===
   
 
デフォルトで選択されるエントリを変更するには、{{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
 
デフォルトで選択されるエントリを変更するには、{{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください:
  +
  +
メニューのタイトルを使う:
  +
  +
GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux'
  +
  +
{{Note|英語以外のロケールを使用している場合、生成されたメニューのタイトルは上記のものとは異なっている場合があります。{{ic|GRUB_DEFAULT}} の前に {{ic|1=LANG=C}} を追加するか、ロケールに合った適切なタイトルを {{ic|GRUB_DEFAULT}} に設定すると良いかもしれません。}}
   
 
数字を使う:
 
数字を使う:
GRUB_DEFAULT=0
 
Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。
 
   
  +
GRUB_DEFAULT="1>2"
メニューのタイトルを使う:
 
GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
 
   
  +
Grub は[[GRUB#grub.cfg の生成|生成されたメニュー]] (例: {{ic|/boot/grub/grub.cfg}})を0からカウントします。つまり最初のエントリは {{ic|0}} で (デフォルト値)、次のエントリは {{ic|1}} と続きます。メインのエントリとサブメニュエントリは {{ic|>}} により区切られています。
{{Note|設定ファイルを[[GRUB#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}}
 
  +
  +
上記の例はメインメニュー 'Advanced options for Arch Linux' の3つめのエントリを起動します。
   
 
=== デフォルトでないエントリを一度だけ起動する ===
 
=== デフォルトでないエントリを一度だけ起動する ===
   
 
デフォルトエントリ以外のエントリを一度だけ起動するのに {{ic|grub-reboot}} はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。
 
デフォルトエントリ以外のエントリを一度だけ起動するのに {{ic|grub-reboot}} はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。
  +
 
{{Note|これをするには {{ic|/etc/default/grub}} に {{ic|1=GRUB_DEFAULT=saved}} を設定 (して {{ic|grub.cfg}} を再生成) する必要があります、{{ic|grub.cfg}} を手動で編集する場合は {{ic|1=set default="${saved_entry}"}} という行を設定します。}}
 
{{Note|これをするには {{ic|/etc/default/grub}} に {{ic|1=GRUB_DEFAULT=saved}} を設定 (して {{ic|grub.cfg}} を再生成) する必要があります、{{ic|grub.cfg}} を手動で編集する場合は {{ic|1=set default="${saved_entry}"}} という行を設定します。}}
  +
  +
== 曲の再生 ==
  +
  +
{{ic|GRUB_INIT_TUNE}} 変数を変更することで起動中 (メニューが表示される直前) に PC スピーカーを使って曲を流すことができます:
  +
  +
GRUB_INIT_TUNE="''テンポ'' [''音の高さ 音の長さ''] [''2つ目の音の高さ 2つ目の音の長さ''] ..."
  +
  +
{{Note|音楽が終わるまで、ブートメニューは '''表示されません'''。}}
  +
  +
一般的な {{ic|GRUB_INIT_TUNE}} のサンプルを再生する[https://gist.github.com/erus/d7f9f6f43744f94f0bd5b8487e057269 メニューエントリ]を追加してみることもできます。このリンク先の {{ic|/etc/grub.d/91_tune_demo}} を作成し、{{ic|grub-mkconfig}} をもう一度実行してください。
  +
  +
これに関する詳細は、{{ic|info grub -n play}} で見られます。また、いくつかの[https://gist.github.com/ArtBIT/cfb030c0791b42330381acce33f82ca0 コレクション]もあります。
  +
  +
== 初期ブートにおけるコアイメージの手動設定 ==
  +
  +
GRUB 環境から {{ic|/boot}} にアクセスできるようにするために GRUB で自動的に設定することができない特殊なキーマップなどの複雑な設定が必要な場合、コアイメージを自分で生成することができます。UEFI 環境では、コアイメージはファームウェアによって起動時にロードされる {{ic|grubx64.efi}} ファイルです。自分でコアイメージを作成することで起動に必要なあらゆるモジュールや GRUB をブートストラップする設定スクリプトを埋め込むことができます。
  +
  +
例として UEFI 環境で暗号化された {{ic|/boot}} のパスワードを入力するために初期ブート空間で {{ic|dvorak}} キーマップを埋め込む必要があるとします:
  +
  +
生成された {{ic|/boot/grub/grub.cfg}} ファイルから暗号化された {{ic|/boot}} をマウントするのに必要なモジュールを確認します。例えば {{ic|menuentry}} の下に以下のような行が存在するはずです:
  +
  +
{{bc|1=
  +
insmod diskfilter cryptodisk luks gcry_rijndael gcry_rijndael gcry_sha256
  +
insmod ext2
  +
cryptomount -u 1234abcdef1234abcdef1234abcdef
  +
set root='cryptouuid/1234abcdef1234abcdef1234abcdef'
  +
}}
  +
  +
上記のモジュールを全てメモしてください。コアイメージに含める必要があります。それから、キーマップを含んだ tarball を作成してください。memdisk としてコアイメージに同梱させます:
  +
  +
# grub-kbdcomp -o dvorak.gkb dvorak
  +
# tar cf memdisk.tar dvorak.gkb
  +
  +
そして GRUB コアイメージで使用する設定ファイルを作成してください。通常の GRUB の設定と同じフォーマットですが、{{ic|/boot}} パーティションのメインの設定ファイルを探してロードすることだけ記述します:
  +
  +
{{hc|early-grub.cfg|2=
  +
set root=(memdisk)
  +
set prefix=($root)/
  +
  +
terminal_input at_keyboard
  +
keymap /dvorak.gkb
  +
  +
cryptomount -u 1234abcdef1234abcdef1234abcdef
  +
set root='cryptouuid/1234abcdef1234abcdef1234abcdef'
  +
set prefix=($root)/grub
  +
  +
configfile grub.cfg
  +
}}
  +
  +
最後に、コアイメージを生成します。生成された {{ic|grub.cfg}} からメモしたモジュールと、{{ic|early-grub.cfg}} スクリプトで使用するモジュールを全て列記してください。上記の例では {{ic|memdisk}}, {{ic|tar}}, {{ic|at_keyboard}}, {{ic|keylayouts}}, {{ic|configfile}} が必要となります:
  +
  +
# grub-mkimage -c early-grub.cfg -o grubx64.efi -O x86_64-efi -m memdisk.tar diskfilter cryptodisk luks gcry_rijndael gcry_sha256 ext2 memdisk tar at_keyboard keylayouts configfile
  +
  +
生成した EFI コアイメージは {{ic|grub-install}} で自動的に生成されるイメージと同じように使うことができます。[[EFI システムパーティション]]に配置して {{ic|efibootmgr}} で有効化するか、システムファームウェアで適切に設定してください。
  +
  +
[https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html#using-a-custom-keyboard-layout Debian cryptsetup docs] も参照してください。
  +
  +
== UEFI の詳細情報 ==
  +
  +
{{Style|This could be made more concise, better organized.}}
  +
  +
以下は、UEFI を使って Arch をインストールすることに関する他の関連情報です。
  +
  +
=== 代替インストール方法 ===
  +
  +
通常、GRUB は EFI システムパーティションがどこにマウントされていても、設定ファイルを含むすべてのファイルを {{ic|/boot}} に保持します。
  +
  +
これらのファイルを EFI System Partition 自体の中に保持したい場合は、grub-install コマンドに {{ic|1=--boot-directory=''esp''}} を追加してください。
  +
  +
# grub-install --target=x86_64-efi --efi-directory=''esp'' --bootloader-id=grub --boot-directory=''esp'' --debug
  +
  +
これにより、すべての GRUB ファイルが {{ic|''esp''/grub}} に置かれ、代わりに {{ic|/boot/grub}} に置かれることになります。この方法を使うときは、''grub-mkconfig''が同じ場所に設定ファイルを置くことを確認してください。
  +
  +
# grub-mkconfig -o ''esp''/grub/grub.cfg
  +
  +
それ以外の構成は同じです。
  +
  +
=== UEFIファームウェアのワークアラウンド ===
  +
  +
こちらを参照 [[GRUB#デフォルト/フォールバックのブートパス]]
  +
  +
=== GRUBスタンドアロン ===
  +
  +
このセクションでは、x86_64 システム用のスタンドアロン GRUB(x86_64-efi)を作成することを想定しています。32 ビット (IA32) EFI システムでは、必要に応じて {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えてください。
  +
  +
UEFI アプリケーションの中に全てのモジュールを tar アーカイブで埋め込んだ {{ic|grubx64_standalone.efi}} アプリケーションを作ることができます、これにより GRUB UEFI モジュールやその他の関連ファイルを集めた別のディレクトリを用意する必要はありません。これは {{ic|grub-mkstandalone}} コマンド ({{Pkg|grub}} に含まれています) を使って以下のように行います。
  +
  +
# echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg
  +
# grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --locales="en@quot" --themes="" -o "''esp''/EFI/grub/grubx64_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v
  +
  +
それから GRUB 設定ファイルを {{ic|''esp''/EFI/grub/grub.cfg}} にコピーして、UEFI Boot Manager のエントリを [[UEFI#efibootmgr|efibootmgr]] を使って {{ic|''esp''/EFI/grub/grubx64_standalone.efi}} に作成します。
  +
  +
{{Note|オプション {{ic|1=--modules="part_gpt part_msdos"}} は必須です。(は、{{ic|${cmdpath}}を使用するために必要です(引用符で囲んでください)}} 機能が正常に動作するようになります。}}
  +
  +
{{Warning|{{ic|${cmdpath} }} にスラッシュがないため、{{ic|grub.cfg}} ファイルがロードされない場合があります(つまり、{{ic|(hd1,msdos2)/EFI/Boot}} ではなく {{ic|(hd1,msdos2)EFI/Boot}}) を実行すると、GRUB シェルにドロップされます。これが発生した場合は、{{ic|${cmdpath} }}が設定されているもの({{ic|echo ${cmdpath}}})を特定し、設定ファイルを手動でロードします(例:{{ic|configfile (hd1,msdos2)/EFI/Boot/grub.cfg}})}}
  +
  +
==== 技術情報 ====
  +
  +
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}} に設定ファイルがあることを期待して読み込んでいるのですが、その設定ファイルは、スタンドアロン GRUB EFI ファイルと同じ場所にあるため、スタンドアロン GRUB の設定ファイルを読み込むことができません。
  +
  +
したがって、スタンドアロンの GRUB EFI ファイルが EFI ファイルと同じディレクトリにある外部 grub.cfg を確実に読み取るように (GRUB 環境内では、${cmdpath} で示されます。) 単純な {{ic|/tmp/grub.cfg}} を作成して、その config として {{ic|${cmdpath}/grub.cfg}} を使用するように GRUB に指示します (configfile ${cmdpath}/grub.cfg コマンド そして、この {{ic|/tmp/grub.cfg}} ファイルを {{ic|${prefix}/grub.cfg}} にコピーするように grub-mkstandalone に指示を出します。(実際には {{ic|(memdisk)/boot/grub/grub.cfg}} である) オプション {{ic|1="boot/grub/grub.cfg=/tmp/grub.cfg"}} を使用しています。
  +
  +
こうすることで、スタンドアロンの GRUB EFI ファイルと実際の {{ic|grub.cfg}} は EFI システムパーティション内の任意のディレクトリに格納でき(同じディレクトリであれば)、移植が可能になります。
  +
  +
=== UEFI と BIOS 両方用のインストール ===
  +
  +
Arch インストールを UEFI システムと BIOS システムの両方でブート可能にするためには、両方の方法を使って [[GRUB]] をインストールする必要があります。ディスクのパーティションテーブルを GPT にし、[[EFI システムパーティション]]と BIOS ブートパーティションを両方作成してください。そして、{{ic|/efi}} に ESP をマウントし、GRUB を BIOS の方法と UEFI の方法の両方でインストールしてください。
  +
  +
# grub-install --target=i386-pc --recheck /dev/sdx
  +
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB --recheck
  +
  +
BIOS システムでは EFI 変数が存在しないため、UEFI NVRAM ブートエントリを設定することができず、以下の 2 つめのコマンドはエラーを吐きます。オプション {{ic|--no-nvram}} と {{ic|--removable}} を使うことで、UEFI モードでもブート可能になる可能性が高くなります:
  +
  +
# grub-install --target=i386-pc --recheck /dev/sdx
  +
# grub-install --target=x86_64-efi --efi-directory=/efi --recheck --removable --no-nvram
  +
  +
一部の BIOS 実装では、PMBR のブートフラグを設定する必要があるかもしれません。例えば、parted を使用する場合では:
  +
  +
(parted) disk_set pmbr_boot on
  +
  +
== GRUB で LUKS の復号を高速化する方法 ==
  +
  +
{{Warning|このセクションに進む前に、高エントロピーのパスワードの重要性を理解しておいてください。安全なパスワードを生成する方法についての情報は [[Wikipedia:Password strength]] で見ることができます。また、使用している暗号の基礎についても理解しておく必要があります。使用中の機能で利用できないパラメータを使用すると、システムが利用不能になってしまう危険性があります。}}
  +
  +
起動時に [[GRUB]] はパスワードの確認に長い時間を要することがあります。これは、[[Wikipedia:ja:鍵導出関数|鍵導出関数]]でコストパラメータに高い値を使用しているからである可能性があります。以下のコマンドで確認することができます:
  +
  +
# cryptsetup luksDump /dev/sda3
  +
  +
問題は、特定のキースロットのコストパラメータがキーが追加されたときに生成されるため、ブルートフォース攻撃から保護するのに十分な高さと、コンピュータの機能を推定してキーを高速に派生させるのに十分な低さのバランスが保たれることです。しかし、[[GRUB]] の起動時には、同じ計算資源が手元にないため、圧倒的に遅くなる可能性があります。
  +
  +
パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、このパラメータを低くすることができます。例えば、[[Wikipedia:PBKDF2|PBKDF2]] の反復回数を低くするには:
  +
  +
# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3
  +
  +
[[RFC:2898|RFC 2898]] によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです (攻撃者のコストと鍵の導出にかかる時間は比例して増加します)。
  +
  +
[[Wikipedia:Argon2|Argon2]] における推奨されるパラメータは [[RFC:9106|RFC 9106]] で議論されています。
  +
  +
{{Tip|[[GRUB]] は有効なキースロットを順次試行します。キーを追加するときは、{{ic|--key-slot}} オプションを使ってキースロットを明示的に指定することができます。}}
  +
  +
== 参照 ==
  +
  +
* [http://wiki.rosalab.ru/en/index.php/Grub2_theme_tutorial GRUB 2 テーマ チュートリアル]
  +
  +
{{TranslationStatus|GRUB/Tips and tricks|2024-01-11|796355}}

2024年1月11日 (木) 18:00時点における最新版

メインの記事は GRUB を見て下さい。

代替インストール方法

USB スティックにインストール

BIOS

USB の1番目のパーティションが FAT32 であり、そのパーティションが /dev/sdy1 であるとすると

# mount --mkdir /dev/sdy1 /mnt/usb
# grub-install --target=i386-pc --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg

任意で、grub.cfg の設定ファイルのバックアップを取ってください:

# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc
# sync; umount /mnt/usb

EFI

GRUB で EFI イメージを esp/EFI/BOOT/BOOTX64.efi に書き込むには、grub-install を使うときに --removable フラグを使用してください (このパスは、UEFI ブートエントリが無くとも、ファームウェアが見つけることができます)。

パーティションやパーティションレスディスクにインストールする

警告: GRUB では、GRUB Legacy や Syslinux と同じように、パーティションのブートセクタやパーティションレスディスクへのインストールを推奨していません。この種のセットアップは破損しやすく (特にアップデート中)、Arch の開発陣によるサポートはされていません

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

# chattr -i /boot/grub/i386-pc/core.img
# grub-install --target=i386-pc --debug --force /dev/sdaX
# chattr +i /boot/grub/i386-pc/core.img
ノート:
  • /dev/sdaX はインストール先に置き換えて下さい。
  • --target=i386-pc を使うと、grub-install は BIOS システム専用にインストールします。grub-install があいまいな動作をしないように常時使用することが推奨されています。

--force オプションを使ってブロックリストを利用する必要があります。--grub-setup=/bin/true を使うべきではありません (このオプションは、単に core.img を生成するのに似ています)。

grub-install は以下のような警告を表示し、この方法で何がうまく行かないのかについてヒントを与えます:

/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.

デフォルトで grub-setup がパーティションやパーティションレスディスクへのインストールをしないようになっている理由は、この場合に限って GRUB がパーティションのブートセクタにある埋め込みブロックリストを使って /boot/grub/i386-pc/core.img ファイルと prefix ディレクトリ /boot/grub を見つける必要があるからです。core.img のセクタ位置はパーティション上の (ファイルのコピーや削除など) ファイルシステムに変更が加えられた時に変化してしまうことがあります。詳細は https://bugzilla.redhat.com/show_bug.cgi?id=728742https://bugzilla.redhat.com/show_bug.cgi?id=730915 を見て下さい。

これを回避する方法は /boot/grub/i386-pc/core.img に (上で説明しているように chattr コマンドを使って) immutable フラグを設定することで、これによってディスク上の core.img ファイルのセクタ位置が変化しなくなります。/boot/grub/i386-pc/core.img に immutable フラグを設定するのは、GRUB をパーティションブートセクタやパーティションレスディスクにインストールするときだけ必要になることで、ブートセクタに埋め込まず MBR にインストールしたり core.img だけを生成する時は必要ありません (上述)。

残念ながら、エラーが表示されなかったとしても、作成される grub.cfg ファイルには起動するための正しい UUID が含まれません。https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604 を参照してください。 この問題を修正するには以下のコマンドを実行してください:

# mount /dev/sdxY /mnt        #ルートパーティション
# mount /dev/sdxZ /mnt/boot   #ブートパーティション(もしあれば)
# arch-chroot /mnt

そして、linux をインストールして、以下を実行してください:

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

core.img だけを生成する

MBR や post-MBR 領域、パーティションブートセクタに GRUB のブートセクタコードを 埋め込まずに/boot/grub ディレクトリを作成して /boot/grub/i386-pc/core.img ファイルを生成するには、--grub-setup=/bin/true オプションを grub-install に追加して実行してください:

# grub-install --target=i386-pc --grub-setup=/bin/true --debug /dev/sda
ノート:
  • /dev/sda はインストール先に置き換えて下さい。
  • --target=i386-pc を使うと、grub-install は BIOS システム専用にインストールします。grub-install があいまいな動作をしないように常時使用することが推奨されています。

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

GUI 設定ツール

  • grub-customizer — GRUB や BURG のカスタマイザ
https://launchpad.net/grub-customizer || grub-customizer

外観の設定

GRUB ではデフォルトで、メニューの見た目を変更できます。GRUB のグラフィカルターミナルである gfxterm を /etc/default/grub で初期化しておくことを忘れないでください:

GRUB_TERMINAL_OUTPUT="gfxterm"

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

GRUB は GRUB 自身 (GFXMODE) とカーネル (GFXPAYLOAD) の両方に対してフレームバッファを設定することができます。古い vga= は非推奨になりました。以下のように /etc/default/grub を編集して、幅(ピクセル) x 高さ(ピクセル) x 色深度 を設定する方法が推奨されています:

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

(デフォルトの auto を含む)複数の解像度を指定できます。なので、次のように行を編集することを推奨します: GRUB_GFXMODE=望みの解像度,1024x768 などのフォールバック解像度,auto。詳細は、the GRUB gfxmode documentation を参照してください。gfxpayload プロパティはカーネルが解像度を保持することを保証します。

ノート:
  • VESA BIOS Extensions を通してグラフィックカードによりサポートされているモードのみを使用できます。サポートされているモードのリストを見るには、hwinfoインストールして、hwinfo --framebuffer を root として実行してください。あるいは、GRUB コマンドラインに入り、videoinfo というコマンドを実行してください。
  • NVIDIA プロプライエタリドライバの初期バージョンでは <width>x<height>-<depth> という形式で GRUB_GFXMODE が使えます(GeForce GTX 970 と nvidia 370 で検証済み) (例: 1920x1200x24 ではなく 1920x1200-24)。これは新しいカードとドライバでは使えないようです。最近のドライバと Pascal カードでは先の形式は機能せず、システムのクラッシュやハードロックなどの深刻な問題が発生します(GeForce GTX 1060 と nvidia 381.22 で検証済み)。現在のドライバとカードでは、標準的な widthxheightxdepth 形式で GRUB_GFXMODE を設定することが最良の方法です。
  • 変更を加えた後に grub-mkconfig -o /boot/grub/grub.cfg を実行することを忘れないでください。

この方法がうまく行かない場合、非推奨の vga= の方法はまだ使えます。/etc/default/grub"GRUB_CMDLINE_LINUX_DEFAULT=" という行に追加するだけです。例えば、"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792" は解像度が 1024x768 になります。

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

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

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

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

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

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

変更を適用するには 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-mkconfig スクリプトは grub.cfg の中のファイル名をクォートで囲まないためファイル名に空白は含めないこと

テーマ

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

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

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

変更を適用するには grub.cfg再生成してください。テーマの設定が成功すると、ターミナルに Found theme: /usr/share/grub/themes/starfield/theme.txt と表示されます。

テーマを使っている時は基本的にスプラッシュイメージは表示されません。

メニューの色

GRUB のメニューの色を設定することができます。GRUB で利用できる色は GRUB のマニュアルに書かれています。 以下サンプルです:

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

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

メニューを隠す

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

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

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE='countdown'

GRUB_TIMEOUT がメニューの表示まで待機する秒数です。

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

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

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

GRUB_TERMINAL_OUTPUT=console

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

GRUB_GFXPAYLOAD_LINUX=text

GRUB で ISO9660 イメージファイルを直接起動

GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくは マルチブート USB ドライブ#GRUB とループバックデバイスを使う を参照。

GRUB メニューのパスワード保護

警告: 誰かがあなたのマシンに物理的にアクセスしてライブ USB やライブディスクを起動できる場合 (BIOS が外部ディスクからの起動を許可している場合)、/boot が存在するパーティションが暗号化されてなければ GRUB の設定ファイルを編集してパスワード認証を迂回するのは至極簡単なことです。GRUB#暗号化セキュリティ#ディスク暗号化 を見てください。

ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名とパスワードを追加することができます。そうするには、grub-mkpasswd-pbkdf2 コマンドを実行し、パスワードを入力し、確認してください:

$ grub-mkpasswd-pbkdf2
[...]
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A

次に、chmod o-r /etc/grub.d/40_custom を実行して、root 以外が読み出せないように /etc/grub.d/40_custom のパーミッションを変更してください。そして、そのファイルを以下のように変更してください:

/etc/grub.d/40_custom
set superusers="ユーザ名"
password_pbkdf2 ユーザ名 パスワードのハッシュ値

パスワードのハッシュ値 の部分は、grub-mkpasswd_pbkdf2 によって生成された、grub.pbkdf2 で始まる文字列に置き換えてください。

grub-mkconfig で設定ファイルを再生成してください。GRUB コマンドラインや boot parameters にアクセスしようとしたり、エントリを起動しようとしたりすると、先の指定したユーザ名とパスワードを要求するようになります。後者は次のトピックに従うことで回避できることに注意してください。

この制限は GRUB manual の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。

GRUB の編集とコンソールオプションだけをパスワードで保護

--unrestricted をメニューエントリに追加することでエントリの編集や GRUB のコマンドコンソールへのアクセスを制限しつつ誰でも OS を起動できるようになります。 スーパーユーザーや --user スイッチで指定したユーザーだけがメニューエントリを編集することが可能です。

/boot/grub/grub.cfg
menuentry 'Arch Linux' --unrestricted --class arch --class gnu-linux --class os ...
この記事またはセクションの正確性には問題があります。
理由: /etc/grub.d/10_linux を編集するべきではありません。grub がアップデートされた際に上書きされてしまいます。 (議論: トーク:GRUB/ヒントとテクニック#)

Linux エントリを --unrestricted にするには、/etc/grub.d/10_linux の先頭の CLASS 変数を変更することにより可能です。

/etc/grub.d/10_linux
CLASS="--class gnu-linux --class gnu --class os --unrestricted"

Shift キーが押されていない時は GRUB を隠す

ノート: これは UEFI システム上では動作しません。修飾キーの状態を検出する方法をファームウェアが提供していないためです。

起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に Shift キーが押されていない限り、GRUB にメニューを隠させるということが可能です。

これをするためには、次の行を /etc/default/grub に追加する必要があります:

 GRUB_FORCE_HIDDEN_MENU="true"

そして [1] の内容を含むファイル /etc/grub.d/31_hold_shift を作成して、実行可能属性を付与して grub の設定を再生成してください:

# grub-mkconfig -o /boot/grub/grub.cfg
ノート: keystatus を使ってキーの押下を検出するのでマシンによっては動作しないことがあります。

UUID の使用と基本的なスクリプトの混合

信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります:

menuentry "Arch Linux 64" {
    # Set the UUIDs for your boot and root partition respectively
    set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07
    set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a

    # (Note: This may be the same as your boot partition)

    # Get the boot/root devices and set them in the root and grub_boot variables
    search --fs-uuid $the_root_uuid --set=root
    search --fs-uuid $the_boot_uuid --set=grub_boot

    # Check to see if boot and root are equal.
    # If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)
    if [ $the_boot_uuid == $the_root_uuid ] ; then
        set grub_boot=($grub_boot)/boot
    else
        set grub_boot=($grub_boot)
    fi

    # $grub_boot now points to the correct location, so the following will properly find the kernel and initrd
    linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro
    initrd $grub_boot/initramfs-linux.img
}

複数のエントリ

サブメニューの無効化

複数のカーネルをインストールしている場合 (例えば linux と linux-lts)、デフォルトで grub-mkconfig はカーネルをサブメニューにグループ化します。サブメニューにまとめて欲しくない場合、以下の行を /etc/default/grub に追加することでシングルメニューに戻すことができます:

GRUB_DISABLE_SUBMENU=y

以前のエントリを思い出させる

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

GRUB_DEFAULT=saved

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

GRUB_SAVEDEFAULT=true

grub は btrfs に書き込めないため、これは /boot が btrfs でない場合にのみ機能します。ただし、"sparse file not allowed. Press any key to continue." という誤解を招くエラーメッセージが生成されます。

ノート: 手動で追加したメニューアイテム (例: /etc/grub.d/40_custom/boot/grub/custom.cfg の Windows) には savedefault の追加が必要です。

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

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

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

GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux'
ノート: 英語以外のロケールを使用している場合、生成されたメニューのタイトルは上記のものとは異なっている場合があります。GRUB_DEFAULT の前に LANG=C を追加するか、ロケールに合った適切なタイトルを GRUB_DEFAULT に設定すると良いかもしれません。

数字を使う:

GRUB_DEFAULT="1>2"

Grub は生成されたメニュー (例: /boot/grub/grub.cfg)を0からカウントします。つまり最初のエントリは 0 で (デフォルト値)、次のエントリは 1 と続きます。メインのエントリとサブメニュエントリは > により区切られています。

上記の例はメインメニュー 'Advanced options for Arch Linux' の3つめのエントリを起動します。

デフォルトでないエントリを一度だけ起動する

デフォルトエントリ以外のエントリを一度だけ起動するのに grub-reboot はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。

ノート: これをするには /etc/default/grubGRUB_DEFAULT=saved を設定 (して grub.cfg を再生成) する必要があります、grub.cfg を手動で編集する場合は set default="${saved_entry}" という行を設定します。

曲の再生

GRUB_INIT_TUNE 変数を変更することで起動中 (メニューが表示される直前) に PC スピーカーを使って曲を流すことができます:

GRUB_INIT_TUNE="テンポ [音の高さ 音の長さ] [2つ目の音の高さ 2つ目の音の長さ] ..."
ノート: 音楽が終わるまで、ブートメニューは 表示されません

一般的な GRUB_INIT_TUNE のサンプルを再生するメニューエントリを追加してみることもできます。このリンク先の /etc/grub.d/91_tune_demo を作成し、grub-mkconfig をもう一度実行してください。

これに関する詳細は、info grub -n play で見られます。また、いくつかのコレクションもあります。

初期ブートにおけるコアイメージの手動設定

GRUB 環境から /boot にアクセスできるようにするために GRUB で自動的に設定することができない特殊なキーマップなどの複雑な設定が必要な場合、コアイメージを自分で生成することができます。UEFI 環境では、コアイメージはファームウェアによって起動時にロードされる grubx64.efi ファイルです。自分でコアイメージを作成することで起動に必要なあらゆるモジュールや GRUB をブートストラップする設定スクリプトを埋め込むことができます。

例として UEFI 環境で暗号化された /boot のパスワードを入力するために初期ブート空間で dvorak キーマップを埋め込む必要があるとします:

生成された /boot/grub/grub.cfg ファイルから暗号化された /boot をマウントするのに必要なモジュールを確認します。例えば menuentry の下に以下のような行が存在するはずです:

insmod diskfilter cryptodisk luks gcry_rijndael gcry_rijndael gcry_sha256
insmod ext2
cryptomount -u 1234abcdef1234abcdef1234abcdef
set root='cryptouuid/1234abcdef1234abcdef1234abcdef'

上記のモジュールを全てメモしてください。コアイメージに含める必要があります。それから、キーマップを含んだ tarball を作成してください。memdisk としてコアイメージに同梱させます:

# grub-kbdcomp -o dvorak.gkb dvorak
# tar cf memdisk.tar dvorak.gkb

そして GRUB コアイメージで使用する設定ファイルを作成してください。通常の GRUB の設定と同じフォーマットですが、/boot パーティションのメインの設定ファイルを探してロードすることだけ記述します:

early-grub.cfg
set root=(memdisk)
set prefix=($root)/

terminal_input at_keyboard
keymap /dvorak.gkb

cryptomount -u 1234abcdef1234abcdef1234abcdef
set root='cryptouuid/1234abcdef1234abcdef1234abcdef'
set prefix=($root)/grub

configfile grub.cfg

最後に、コアイメージを生成します。生成された grub.cfg からメモしたモジュールと、early-grub.cfg スクリプトで使用するモジュールを全て列記してください。上記の例では memdisk, tar, at_keyboard, keylayouts, configfile が必要となります:

# grub-mkimage -c early-grub.cfg -o grubx64.efi -O x86_64-efi -m memdisk.tar diskfilter cryptodisk luks gcry_rijndael gcry_sha256 ext2 memdisk tar at_keyboard keylayouts configfile

生成した EFI コアイメージは grub-install で自動的に生成されるイメージと同じように使うことができます。EFI システムパーティションに配置して efibootmgr で有効化するか、システムファームウェアで適切に設定してください。

Debian cryptsetup docs も参照してください。

UEFI の詳細情報

この記事あるいはセクションで使われている用語や表現には問題が存在します。
議論: This could be made more concise, better organized. (議論: トーク:GRUB/ヒントとテクニック#)

以下は、UEFI を使って Arch をインストールすることに関する他の関連情報です。

代替インストール方法

通常、GRUB は EFI システムパーティションがどこにマウントされていても、設定ファイルを含むすべてのファイルを /boot に保持します。

これらのファイルを EFI System Partition 自体の中に保持したい場合は、grub-install コマンドに --boot-directory=esp を追加してください。

# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=grub --boot-directory=esp --debug

これにより、すべての GRUB ファイルが esp/grub に置かれ、代わりに /boot/grub に置かれることになります。この方法を使うときは、grub-mkconfigが同じ場所に設定ファイルを置くことを確認してください。

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

それ以外の構成は同じです。

UEFIファームウェアのワークアラウンド

こちらを参照 GRUB#デフォルト/フォールバックのブートパス

GRUBスタンドアロン

このセクションでは、x86_64 システム用のスタンドアロン GRUB(x86_64-efi)を作成することを想定しています。32 ビット (IA32) EFI システムでは、必要に応じて x86_64-efii386-efi に置き換えてください。

UEFI アプリケーションの中に全てのモジュールを tar アーカイブで埋め込んだ grubx64_standalone.efi アプリケーションを作ることができます、これにより GRUB UEFI モジュールやその他の関連ファイルを集めた別のディレクトリを用意する必要はありません。これは grub-mkstandalone コマンド (grub に含まれています) を使って以下のように行います。

# echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg
# grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --locales="en@quot" --themes="" -o "esp/EFI/grub/grubx64_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v

それから GRUB 設定ファイルを esp/EFI/grub/grub.cfg にコピーして、UEFI Boot Manager のエントリを efibootmgr を使って esp/EFI/grub/grubx64_standalone.efi に作成します。

ノート: オプション --modules="part_gpt part_msdos" は必須です。(は、${cmdpathを使用するために必要です(引用符で囲んでください)

機能が正常に動作するようになります。}}

警告: ${cmdpath} にスラッシュがないため、grub.cfg ファイルがロードされない場合があります(つまり、(hd1,msdos2)/EFI/Boot ではなく (hd1,msdos2)EFI/Boot) を実行すると、GRUB シェルにドロップされます。これが発生した場合は、${cmdpath} が設定されているもの(echo ${cmdpath})を特定し、設定ファイルを手動でロードします(例:configfile (hd1,msdos2)/EFI/Boot/grub.cfg)

技術情報

GRUB EFI ファイルは、常にその設定ファイルが ${prefix}/grub.cfg にあることを期待します。しかし、スタンドアロンの GRUB EFI ファイルでは、${prefix にあります}}は tar アーカイブの中にあり、スタンドアロン GRUB EFI ファイル自体の中に組み込まれています(GRUB 環境内では、引用符なしで"(memdisk)" で表記されます)この tar アーカイブには、通常の GRUB EFI インストールの場合に /boot/grub に格納されるすべてのファイルが含まれています。

このように /boot/grub の内容をスタンドアロンイメージ自体に埋め込んでいるため、実際の(外部の) /boot/grub には何も依存していません。従って、スタンドアロン GRUB EFI ファイル ${prefix}==(memdisk)/boot/grub の場合、スタンドアロン GRUB EFI ファイルは ${prefix}/grub.cfg==(memdisk)/boot/grub/grub.cfg に設定ファイルがあることを期待して読み込んでいるのですが、その設定ファイルは、スタンドアロン GRUB EFI ファイルと同じ場所にあるため、スタンドアロン GRUB の設定ファイルを読み込むことができません。

したがって、スタンドアロンの GRUB EFI ファイルが EFI ファイルと同じディレクトリにある外部 grub.cfg を確実に読み取るように (GRUB 環境内では、${cmdpath} で示されます。) 単純な /tmp/grub.cfg を作成して、その config として ${cmdpath}/grub.cfg を使用するように GRUB に指示します (configfile ${cmdpath}/grub.cfg コマンド そして、この /tmp/grub.cfg ファイルを ${prefix}/grub.cfg にコピーするように grub-mkstandalone に指示を出します。(実際には (memdisk)/boot/grub/grub.cfg である) オプション "boot/grub/grub.cfg=/tmp/grub.cfg" を使用しています。

こうすることで、スタンドアロンの GRUB EFI ファイルと実際の grub.cfg は EFI システムパーティション内の任意のディレクトリに格納でき(同じディレクトリであれば)、移植が可能になります。

UEFI と BIOS 両方用のインストール

Arch インストールを UEFI システムと BIOS システムの両方でブート可能にするためには、両方の方法を使って GRUB をインストールする必要があります。ディスクのパーティションテーブルを GPT にし、EFI システムパーティションと BIOS ブートパーティションを両方作成してください。そして、/efi に ESP をマウントし、GRUB を BIOS の方法と UEFI の方法の両方でインストールしてください。

# grub-install --target=i386-pc --recheck /dev/sdx
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB --recheck

BIOS システムでは EFI 変数が存在しないため、UEFI NVRAM ブートエントリを設定することができず、以下の 2 つめのコマンドはエラーを吐きます。オプション --no-nvram--removable を使うことで、UEFI モードでもブート可能になる可能性が高くなります:

# grub-install --target=i386-pc --recheck /dev/sdx
# grub-install --target=x86_64-efi --efi-directory=/efi --recheck --removable --no-nvram

一部の BIOS 実装では、PMBR のブートフラグを設定する必要があるかもしれません。例えば、parted を使用する場合では:

(parted) disk_set pmbr_boot on

GRUB で LUKS の復号を高速化する方法

警告: このセクションに進む前に、高エントロピーのパスワードの重要性を理解しておいてください。安全なパスワードを生成する方法についての情報は Wikipedia:Password strength で見ることができます。また、使用している暗号の基礎についても理解しておく必要があります。使用中の機能で利用できないパラメータを使用すると、システムが利用不能になってしまう危険性があります。

起動時に GRUB はパスワードの確認に長い時間を要することがあります。これは、鍵導出関数でコストパラメータに高い値を使用しているからである可能性があります。以下のコマンドで確認することができます:

# cryptsetup luksDump /dev/sda3

問題は、特定のキースロットのコストパラメータがキーが追加されたときに生成されるため、ブルートフォース攻撃から保護するのに十分な高さと、コンピュータの機能を推定してキーを高速に派生させるのに十分な低さのバランスが保たれることです。しかし、GRUB の起動時には、同じ計算資源が手元にないため、圧倒的に遅くなる可能性があります。

パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、このパラメータを低くすることができます。例えば、PBKDF2 の反復回数を低くするには:

# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3

RFC 2898 によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです (攻撃者のコストと鍵の導出にかかる時間は比例して増加します)。

Argon2 における推奨されるパラメータは RFC 9106 で議論されています。

ヒント: GRUB は有効なキースロットを順次試行します。キーを追加するときは、--key-slot オプションを使ってキースロットを明示的に指定することができます。

参照

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