「GRUB/ヒントとテクニック」の版間の差分
(同期) |
(同期) |
||
(6人の利用者による、間の32版が非表示) | |||
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- |
+ | [[zh-hans:GRUB/Tips and tricks]] |
メインの記事は [[GRUB]] を見て下さい。 |
メインの記事は [[GRUB]] を見て下さい。 |
||
− | == |
+ | == 代替インストール方法 == |
− | + | === 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|grub2-editor-frameworks|grub2-editor の非公式 KF5 ポート|https://github.com/maz-1/grub2-editor|{{AUR|grub2-editor-frameworks}}}} |
||
− | * {{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=videoinfo}} コマンドが使用できます |
||
− | * [[NVIDIA]] のプロプライエタリドライバーは {{ic|''<width>''x''<height>''-''<depth>''}} という形式で {{ic|GRUB_GFXMODE}} が使えます (例: {{ic|1920x1200-24}})。GeForce GTX 970 と nvidia 370 ドライバーでテスト済み。 |
||
}} |
}} |
||
+ | これで 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=videoinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。AUR には {{AUR|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=${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 で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。 |
||
68行目: | 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" |
||
74行目: | 131行目: | ||
{{Note|GRUB を分割して別のパーティションにインストールしている場合、{{ic|grub.cfg}} の {{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}} を[[GRUB#メイン設定ファイルの生成|再生成]]してください。スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに {{ic|"Found background image..."}} と表示されるはずです。この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。 |
+ | |||
− | この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。 |
||
− | |||
画像が表示されないときは、以下をチェックしてください: |
画像が表示されないときは、以下をチェックしてください: |
||
+ | |||
* {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか |
* {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか |
||
* 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg) |
* 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg) |
||
90行目: | 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}} と表示されます。 |
||
+ | |||
テーマを使っている時は基本的にスプラッシュイメージは表示されません。 |
テーマを使っている時は基本的にスプラッシュイメージは表示されません。 |
||
101行目: | 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" |
||
109行目: | 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 のフレームバッファを無効化するべきかもしれません。 |
フレームバッファを無効にするには、{{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 イメージの直接起動をサポートしています。詳しくは[[マルチブート USB ドライブ#GRUB とループバックデバイスを使う]]を参照。 |
+ | 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#暗号化]]や[[セキュリティ#ディスク暗号化]]を見てください。}} |
+ | {{Warning|誰かがあなたのマシンに物理的にアクセスしてライブ USB やライブディスクを起動できる場合 (BIOS が外部ディスクからの起動を許可している場合)、{{ic|/boot}} が存在するパーティションが暗号化されてなければ GRUB の設定ファイルを編集してパスワード認証を迂回するのは至極簡単なことです。[[GRUB#暗号化]] や [[セキュリティ#ディスク暗号化]] を見てください。}} |
− | ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名 |
+ | ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名とパスワードを追加することができます。そうするには、{{ic|grub-mkpasswd-pbkdf2}} コマンドを実行し、パスワードを入力し、確認してください: |
− | {{hc|grub-mkpasswd-pbkdf2| |
+ | {{hc|$ grub-mkpasswd-pbkdf2| |
[...] |
[...] |
||
− | + | 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="''' |
+ | set superusers="'''ユーザ名'''" |
− | password_pbkdf2 ''' |
+ | 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" パートに書かれている方法によって緩めたりカスタマイズすることができます。 |
||
179行目: | 217行目: | ||
=== GRUB の編集とコンソールオプションだけをパスワードで保護 === |
=== GRUB の編集とコンソールオプションだけをパスワードで保護 === |
||
− | {{ic|--unrestricted}} をメニューエントリに追加することでエントリの編集や GRUB のコマンドコンソールへのアクセスを制限しつつ誰でも OS を起動できるようになりま |
+ | {{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 にメニューを隠させるということが可能です。 |
||
192行目: | 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 |
||
200行目: | 249行目: | ||
== UUID の使用と基本的なスクリプトの混合 == |
== UUID の使用と基本的なスクリプトの混合 == |
||
+ | |||
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります: |
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります: |
||
228行目: | 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|/}}) 下のただのディレクトリでもかまいません) |
||
− | |||
− | == エントリ == |
||
=== サブメニューの無効化 === |
=== サブメニューの無効化 === |
||
247行目: | 288行目: | ||
=== 以前のエントリを思い出させる === |
=== 以前のエントリを思い出させる === |
||
− | GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと |
+ | GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと、フォールバックとしての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください: |
GRUB_DEFAULT=saved |
GRUB_DEFAULT=saved |
||
255行目: | 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=0 |
||
− | Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。 |
||
メニューのタイトルを使う: |
メニューのタイトルを使う: |
||
+ | |||
GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux' |
GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux' |
||
+ | {{Note|英語以外のロケールを使用している場合、生成されたメニューのタイトルは上記のものとは異なっている場合があります。{{ic|GRUB_DEFAULT}} の前に {{ic|1=LANG=C}} を追加するか、ロケールに合った適切なタイトルを {{ic|GRUB_DEFAULT}} に設定すると良いかもしれません。}} |
||
− | {{Note|設定ファイルを[[GRUB#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}} |
||
+ | |||
+ | 数字を使う: |
||
+ | |||
+ | GRUB_DEFAULT="1>2" |
||
+ | |||
+ | Grub は[[GRUB#grub.cfg の生成|生成されたメニュー]] (例: {{ic|/boot/grub/grub.cfg}})を0からカウントします。つまり最初のエントリは {{ic|0}} で (デフォルト値)、次のエントリは {{ic|1}} と続きます。メインのエントリとサブメニュエントリは {{ic|>}} により区切られています。 |
||
+ | |||
+ | 上記の例はメインメニュー '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}} 変数を変更することで起動 |
+ | {{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}} をもう一度実行してください。 |
||
− | GRUB_INIT_TUNE="312 262 3 247 3 262 3 220 3 247 3 196 3 220 3 220 3 262 3 262 3 294 3 262 3 247 3 220 3 196 3 247 3 262 3 247 5 220 1 220 5" |
||
+ | これに関する詳細は、{{ic|info grub -n play}} で見られます。また、いくつかの[https://gist.github.com/ArtBIT/cfb030c0791b42330381acce33f82ca0 コレクション]もあります。 |
||
− | 詳しくは {{ic|info grub -n play}} を見てください。 |
||
== 初期ブートにおけるコアイメージの手動設定 == |
== 初期ブートにおけるコアイメージの手動設定 == |
||
289行目: | 342行目: | ||
例として UEFI 環境で暗号化された {{ic|/boot}} のパスワードを入力するために初期ブート空間で {{ic|dvorak}} キーマップを埋め込む必要があるとします: |
例として UEFI 環境で暗号化された {{ic|/boot}} のパスワードを入力するために初期ブート空間で {{ic|dvorak}} キーマップを埋め込む必要があるとします: |
||
− | 生成された {{ic|/boot/grub/grub.cfg}} ファイルから暗号化された {{ic|/boot} をマウントするのに必要なモジュールを確認します。例えば {{ic|menuentry}} の下に以下のような行が存在するはずです: |
+ | 生成された {{ic|/boot/grub/grub.cfg}} ファイルから暗号化された {{ic|/boot}} をマウントするのに必要なモジュールを確認します。例えば {{ic|menuentry}} の下に以下のような行が存在するはずです: |
{{bc|1= |
{{bc|1= |
||
300行目: | 353行目: | ||
上記のモジュールを全てメモしてください。コアイメージに含める必要があります。それから、キーマップを含んだ tarball を作成してください。memdisk としてコアイメージに同梱させます: |
上記のモジュールを全てメモしてください。コアイメージに含める必要があります。それから、キーマップを含んだ tarball を作成してください。memdisk としてコアイメージに同梱させます: |
||
+ | # grub-kbdcomp -o dvorak.gkb dvorak |
||
− | {{bc|<nowiki> |
||
− | # |
+ | # tar cf memdisk.tar dvorak.gkb |
− | # tar cf memdisk.tar dvorak.gkb |
||
− | </nowiki>}} |
||
そして GRUB コアイメージで使用する設定ファイルを作成してください。通常の GRUB の設定と同じフォーマットですが、{{ic|/boot}} パーティションのメインの設定ファイルを探してロードすることだけ記述します: |
そして GRUB コアイメージで使用する設定ファイルを作成してください。通常の GRUB の設定と同じフォーマットですが、{{ic|/boot}} パーティションのメインの設定ファイルを探してロードすることだけ記述します: |
||
{{hc|early-grub.cfg|2= |
{{hc|early-grub.cfg|2= |
||
− | root=(memdisk) |
+ | set root=(memdisk) |
− | prefix=($root)/ |
+ | set prefix=($root)/ |
terminal_input at_keyboard |
terminal_input at_keyboard |
||
325行目: | 376行目: | ||
# 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 |
# 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}} で有効化するか、システムファームウェアで適切に設定してください。 |
+ | 生成した 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 ブートエントリが無くとも、ファームウェアが見つけることができます)。
パーティションやパーティションレスディスクにインストールする
パーティションブートセクタやパーティションレスディスク (別名 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
--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=728742 や https://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
これで Linux カーネルやマルチブートカーネルとして GRUB Legacy や syslinux から GRUB の core.img
をチェインロードできます。(Syslinux#チェインロード も参照)
GUI 設定ツール
- grub-customizer — GRUB や BURG のカスタマイザ
外観の設定
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 プロパティはカーネルが解像度を保持することを保証します。
この方法がうまく行かない場合、非推奨の 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.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 メニューのパスワード保護
ブートパラメータを変えたりコマンドラインを使えないようにして 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 ...
Linux エントリを --unrestricted
にするには、/etc/grub.d/10_linux
の先頭の CLASS
変数を変更することにより可能です。
/etc/grub.d/10_linux
CLASS="--class gnu-linux --class gnu --class os --unrestricted"
Shift キーが押されていない時は GRUB を隠す
起動を高速化するために、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
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/default/grub
を編集して GRUB_DEFAULT
の値を変更してください:
メニューのタイトルを使う:
GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux'
数字を使う:
GRUB_DEFAULT="1>2"
Grub は生成されたメニュー (例: /boot/grub/grub.cfg
)を0からカウントします。つまり最初のエントリは 0
で (デフォルト値)、次のエントリは 1
と続きます。メインのエントリとサブメニュエントリは >
により区切られています。
上記の例はメインメニュー 'Advanced options for Arch Linux' の3つめのエントリを起動します。
デフォルトでないエントリを一度だけ起動する
デフォルトエントリ以外のエントリを一度だけ起動するのに grub-reboot
はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。
曲の再生
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 の詳細情報
以下は、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-efi
を i386-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
に作成します。
機能が正常に動作するようになります。}}
技術情報
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 の復号を高速化する方法
起動時に GRUB はパスワードの確認に長い時間を要することがあります。これは、鍵導出関数でコストパラメータに高い値を使用しているからである可能性があります。以下のコマンドで確認することができます:
# cryptsetup luksDump /dev/sda3
問題は、特定のキースロットのコストパラメータがキーが追加されたときに生成されるため、ブルートフォース攻撃から保護するのに十分な高さと、コンピュータの機能を推定してキーを高速に派生させるのに十分な低さのバランスが保たれることです。しかし、GRUB の起動時には、同じ計算資源が手元にないため、圧倒的に遅くなる可能性があります。
パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、このパラメータを低くすることができます。例えば、PBKDF2 の反復回数を低くするには:
# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3
RFC 2898 によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです (攻撃者のコストと鍵の導出にかかる時間は比例して増加します)。
Argon2 における推奨されるパラメータは RFC 9106 で議論されています。