「GRUB/ヒントとテクニック」の版間の差分
(→外観の設定: 同期) |
(同期) |
||
(2人の利用者による、間の10版が非表示) | |||
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-hans:GRUB/Tips and tricks]] |
[[zh-hans:GRUB/Tips and tricks]] |
||
メインの記事は [[GRUB]] を見て下さい。 |
メインの記事は [[GRUB]] を見て下さい。 |
||
11行目: | 11行目: | ||
==== BIOS ==== |
==== BIOS ==== |
||
− | USB |
+ | USB の1番目のパーティションが FAT32 であり、そのパーティションが /dev/sdy1 であるとすると |
− | # |
+ | # mount --mkdir /dev/sdy1 /mnt/usb |
− | # mount /dev/sdy1 /mnt/usb |
||
# grub-install --target=i386-pc --debug --boot-directory=/mnt/usb/boot /dev/sdy |
# grub-install --target=i386-pc --debug --boot-directory=/mnt/usb/boot /dev/sdy |
||
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg |
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg |
||
− | {{ic|grub.cfg}} の設定のバックアップを |
+ | 任意で、{{ic|grub.cfg}} の設定ファイルのバックアップを取ってください: |
# mkdir -p /mnt/usb/etc/default |
# mkdir -p /mnt/usb/etc/default |
||
# cp /etc/default/grub /mnt/usb/etc/default |
# cp /etc/default/grub /mnt/usb/etc/default |
||
# cp -a /etc/grub.d /mnt/usb/etc |
# cp -a /etc/grub.d /mnt/usb/etc |
||
− | |||
− | アンマウント: |
||
# sync; umount /mnt/usb |
# sync; umount /mnt/usb |
||
30行目: | 27行目: | ||
==== EFI ==== |
==== EFI ==== |
||
− | GRUB で EFI イメージを {{ic|''esp''/EFI/BOOT/BOOTX64.efi}} |
+ | GRUB で EFI イメージを {{ic|''esp''/EFI/BOOT/BOOTX64.efi}} に書き込むには、{{ic|grub-install}} を使うときに {{ic|--removable}} フラグを使用してください (このパスは、UEFI ブートエントリが無くとも、ファームウェアが見つけることができます)。 |
=== パーティションやパーティションレスディスクにインストールする === |
=== パーティションやパーティションレスディスクにインストールする === |
||
− | {{Warning|GRUB は |
+ | {{Warning|GRUB では、GRUB Legacy や Syslinux と同じように、パーティションのブートセクタやパーティションレスディスクへのインストールを'''推奨していません'''。この種のセットアップは破損しやすく (特にアップデート中)、Arch の開発陣によるサポートは'''されていません'''。}} |
− | パーティションブートセクタや |
+ | パーティションブートセクタやパーティションレスディスク (別名 superfloppy)、フロッピーディスクに grub をセットアップするには、以下を実行してください ({{ic|/boot}} パーティションを {{ic|/dev/sdaX}} として例にしています): |
# chattr -i /boot/grub/i386-pc/core.img |
# chattr -i /boot/grub/i386-pc/core.img |
||
43行目: | 40行目: | ||
{{Note| |
{{Note| |
||
− | * {{ic|/dev/ |
+ | * {{ic|/dev/sdaX}} はインストール先に置き換えて下さい。 |
− | * {{ic|1=--target=i386-pc}} |
+ | * {{ic|1=--target=i386-pc}} を使うと、{{ic|grub-install}} は BIOS システム専用にインストールします。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。 |
}} |
}} |
||
− | {{ic|--force}} オプションを使ってブロックリストを利用する必要があります |
+ | {{ic|--force}} オプションを使ってブロックリストを利用する必要があります。{{ic|1=--grub-setup=/bin/true}} を使うべきではありません (このオプションは、単に {{ic|core.img}} を生成するのに似ています)。 |
− | {{ic|grub-install}} は以下のような警告を表示し、この方法で |
+ | {{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: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea. |
||
55行目: | 52行目: | ||
However, blocklists are UNRELIABLE and their use is discouraged. |
However, blocklists are UNRELIABLE and their use is discouraged. |
||
− | {{ic|--force}} が |
+ | {{ic|--force}} が無いと、以下のエラーが表示され、{{ic|grub-setup}} はパーティションブートセクタのブートコードのセットアップを中止します: |
/sbin/grub-setup: error: will not proceed with blocklists |
/sbin/grub-setup: error: will not proceed with blocklists |
||
− | {{ic|--force}} を |
+ | {{ic|--force}} を付ければ、次のように表示されるはずです: |
Installation finished. No error reported. |
Installation finished. No error reported. |
||
67行目: | 64行目: | ||
これを回避する方法は {{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|/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 を参照してください。 |
+ | 残念ながら、エラーが表示されなかったとしても、作成される {{ic|grub.cfg}} ファイルには起動するための正しい UUID が含まれません。https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604 を参照してください。 |
+ | この問題を修正するには以下のコマンドを実行してください: |
||
− | # mount /dev/sdxY /mnt # |
+ | # mount /dev/sdxY /mnt #ルートパーティション |
− | # mount /dev/sdxZ /mnt/boot # |
+ | # mount /dev/sdxZ /mnt/boot #ブートパーティション(もしあれば) |
# arch-chroot /mnt |
# arch-chroot /mnt |
||
79行目: | 77行目: | ||
=== core.img だけを生成する === |
=== core.img だけを生成する === |
||
− | + | 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 |
# grub-install --target=i386-pc --grub-setup=/bin/true --debug /dev/sda |
||
85行目: | 83行目: | ||
{{Note| |
{{Note| |
||
* {{ic|/dev/sda}} はインストール先に置き換えて下さい。 |
* {{ic|/dev/sda}} はインストール先に置き換えて下さい。 |
||
− | * {{ic|1=--target=i386-pc}} |
+ | * {{ic|1=--target=i386-pc}} を使うと、{{ic|grub-install}} は BIOS システム専用にインストールします。{{ic|grub-install}} があいまいな動作をしないように常時使用することが推奨されています。 |
}} |
}} |
||
102行目: | 100行目: | ||
=== フレームバッファの解像度を設定する === |
=== フレームバッファの解像度を設定する === |
||
− | GRUB は GRUB 自身({{ic|GFXMODE}})とカーネル({{ic|GFXPAYLOAD}})両方 |
+ | GRUB は GRUB 自身 ({{ic|GFXMODE}}) とカーネル ({{ic|GFXPAYLOAD}}) の両方に対してフレームバッファを設定することができます。古い {{ic|1=vga=}} は非推奨になりました。以下のように {{ic|/etc/default/grub}} を編集して、幅(ピクセル) x 高さ(ピクセル) x [[Wikipedia:ja:色深度|色深度]] を設定する方法が推奨されています: |
GRUB_GFXMODE=1024x768x32 |
GRUB_GFXMODE=1024x768x32 |
||
GRUB_GFXPAYLOAD_LINUX=keep |
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] プロパティはカーネルが解像度を保持することを保証します。 |
+ | (デフォルトの {{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| |
{{Note| |
||
116行目: | 114行目: | ||
この方法がうまく行かない場合、非推奨の {{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}} になります。 |
この方法がうまく行かない場合、非推奨の {{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}} になります。 |
||
− | |||
− | === 915resolution ハック === |
||
− | |||
− | たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} と {{ic|1=videoinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} ハックを使うことができます。このハックは一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。AUR には {{AUR|915resolution}} パッケージが存在します。 |
||
− | |||
− | まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です: |
||
− | |||
− | {{hc|sh:grub> 915resolution -l| |
||
− | Intel 800/900 Series VBIOS Hack : version 0.5.3 |
||
− | [...] |
||
− | '''Mode 30''' : 640x480, 8 bits/pixel |
||
− | [...] |
||
− | }} |
||
− | |||
− | 次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします: |
||
− | |||
− | {{hc|/etc/grub.d/00_header|2= |
||
− | [...] |
||
− | '''915resolution 30 1440 900 # Inserted line''' |
||
− | set gfxmode=${GRUB_GFXMODE} |
||
− | [...] |
||
− | }} |
||
− | |||
− | 最後に、先に説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。 |
||
=== 背景画像とビットマップフォント === |
=== 背景画像とビットマップフォント === |
||
203行目: | 177行目: | ||
=== フレームバッファの無効化 === |
=== フレームバッファの無効化 === |
||
− | バイナリドライバー |
+ | バイナリドライバーで問題が発生するので、NVIDIA のプロプライエタリドライバーを使っているユーザーは、GRUB のフレームバッファを無効化するべきかもしれません。 |
フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください: |
フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください: |
||
215行目: | 189行目: | ||
== GRUB で ISO9660 イメージファイルを直接起動 == |
== GRUB で ISO9660 イメージファイルを直接起動 == |
||
− | GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくは[[マルチブート USB ドライブ#GRUB とループバックデバイスを使う]]を参照。 |
+ | GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくは [[マルチブート USB ドライブ#GRUB とループバックデバイスを使う]] を参照。 |
== 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" パートに書かれている方法によって緩めたりカスタマイズすることができます。 |
||
240行目: | 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 にメニューを隠させるということが可能です。 |
||
253行目: | 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 |
||
261行目: | 249行目: | ||
== UUID の使用と基本的なスクリプトの混合 == |
== UUID の使用と基本的なスクリプトの混合 == |
||
+ | |||
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります: |
信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります: |
||
299行目: | 288行目: | ||
=== 以前のエントリを思い出させる === |
=== 以前のエントリを思い出させる === |
||
− | GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと |
+ | GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと、フォールバックとしての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください: |
GRUB_DEFAULT=saved |
GRUB_DEFAULT=saved |
||
307行目: | 296行目: | ||
GRUB_SAVEDEFAULT=true |
GRUB_SAVEDEFAULT=true |
||
− | grub は btrfs に書き込めないため、これは |
+ | 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}} の追加が必要です |
+ | {{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}} を見てください。 |
||
== 初期ブートにおけるコアイメージの手動設定 == |
== 初期ブートにおけるコアイメージの手動設定 == |
||
354行目: | 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 |
||
379行目: | 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 の詳細情報 == |
== UEFI の詳細情報 == |
||
388行目: | 387行目: | ||
=== 代替インストール方法 === |
=== 代替インストール方法 === |
||
− | |||
− | {{Expansion|What would be the reason to place all of GRUB's files in the ESP?|section=UEFI further reading/Alternative install method}} |
||
通常、GRUB は EFI システムパーティションがどこにマウントされていても、設定ファイルを含むすべてのファイルを {{ic|/boot}} に保持します。 |
通常、GRUB は EFI システムパーティションがどこにマウントされていても、設定ファイルを含むすべてのファイルを {{ic|/boot}} に保持します。 |
||
405行目: | 402行目: | ||
=== UEFIファームウェアのワークアラウンド === |
=== UEFIファームウェアのワークアラウンド === |
||
− | こちらを参照 [[GRUB# |
+ | こちらを参照 [[GRUB#デフォルト/フォールバックのブートパス]] |
=== GRUBスタンドアロン === |
=== GRUBスタンドアロン === |
||
420行目: | 417行目: | ||
{{Note|オプション {{ic|1=--modules="part_gpt part_msdos"}} は必須です。(は、{{ic|${cmdpath}}を使用するために必要です(引用符で囲んでください)}} 機能が正常に動作するようになります。}} |
{{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}}})を特定し、 |
+ | {{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}})}} |
==== 技術情報 ==== |
==== 技術情報 ==== |
||
431行目: | 428行目: | ||
こうすることで、スタンドアロンの GRUB EFI ファイルと実際の {{ic|grub.cfg}} は EFI システムパーティション内の任意のディレクトリに格納でき(同じディレクトリであれば)、移植が可能になります。 |
こうすることで、スタンドアロンの 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 の復号を高速化する方法 == |
== GRUB で LUKS の復号を高速化する方法 == |
||
− | {{Warning|このセクションに進む前に、高エントロピーのパスワードの重要性を理解しておいてください。安全なパスワードを生成する方法についての情報は [ |
+ | {{Warning|このセクションに進む前に、高エントロピーのパスワードの重要性を理解しておいてください。安全なパスワードを生成する方法についての情報は [[Wikipedia:Password strength]] で見ることができます。また、使用している暗号の基礎についても理解しておく必要があります。使用中の機能で利用できないパラメータを使用すると、システムが利用不能になってしまう危険性があります。}} |
− | 起動時に [[GRUB]] はパスワードの確認に長い時間を要することがあります。これは |
+ | 起動時に [[GRUB]] はパスワードの確認に長い時間を要することがあります。これは、[[Wikipedia:ja:鍵導出関数|鍵導出関数]]でコストパラメータに高い値を使用しているからである可能性があります。以下のコマンドで確認することができます: |
# cryptsetup luksDump /dev/sda3 |
# cryptsetup luksDump /dev/sda3 |
||
− | 問題は、特定のキースロットの |
+ | 問題は、特定のキースロットのコストパラメータがキーが追加されたときに生成されるため、ブルートフォース攻撃から保護するのに十分な高さと、コンピュータの機能を推定してキーを高速に派生させるのに十分な低さのバランスが保たれることです。しかし、[[GRUB]] の起動時には、同じ計算資源が手元にないため、圧倒的に遅くなる可能性があります。 |
− | パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、この |
+ | パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、このパラメータを低くすることができます。例えば、[[Wikipedia:PBKDF2|PBKDF2]] の反復回数を低くするには: |
# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3 |
# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3 |
||
− | [[RFC:2898|RFC 2898]] によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです |
+ | [[RFC:2898|RFC 2898]] によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです (攻撃者のコストと鍵の導出にかかる時間は比例して増加します)。 |
+ | |||
+ | [[Wikipedia:Argon2|Argon2]] における推奨されるパラメータは [[RFC:9106|RFC 9106]] で議論されています。 |
||
{{Tip|[[GRUB]] は有効なキースロットを順次試行します。キーを追加するときは、{{ic|--key-slot}} オプションを使ってキースロットを明示的に指定することができます。}} |
{{Tip|[[GRUB]] は有効なキースロットを順次試行します。キーを追加するときは、{{ic|--key-slot}} オプションを使ってキースロットを明示的に指定することができます。}} |
||
453行目: | 468行目: | ||
* [http://wiki.rosalab.ru/en/index.php/Grub2_theme_tutorial GRUB 2 テーマ チュートリアル] |
* [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 で議論されています。