「GRUB/ヒントとテクニック」の版間の差分
(→GUI 設定ツール: 同期) |
(→外観の設定: 同期) |
||
96行目: | 96行目: | ||
== 外観の設定 == |
== 外観の設定 == |
||
+ | GRUB ではデフォルトで、メニューの見た目を変更できます。GRUB のグラフィカルターミナルである gfxterm を {{ic|/etc/default/grub}} で初期化しておくことを忘れないでください: |
||
− | GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては [[GRUB#"No suitable mode found" エラー]] のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。 |
||
+ | |||
+ | GRUB_TERMINAL_OUTPUT="gfxterm" |
||
=== フレームバッファの解像度を設定する === |
=== フレームバッファの解像度を設定する === |
||
− | GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い {{ic|1=vga=}} は |
+ | 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] プロパティはカーネルが解像度を保持することを保証します。 |
||
− | 変更を適用するには、次を実行してください: |
||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | {{ic|gfxpayload}} プロパティによってカーネルに解像度を維持させます。 |
||
{{Note| |
{{Note| |
||
+ | * [[wikipedia:ja:VESA BIOS Extensions|VESA BIOS Extensions]] を通してグラフィックカードによりサポートされているモードのみを使用できます。サポートされているモードのリストを見るには、{{Pkg|hwinfo}} を[[インストール]]して、{{ic|hwinfo --framebuffer}} を root として実行してください。あるいは、GRUB コマンドラインに入り、{{ic|videoinfo}} というコマンドを実行してください。 |
||
− | * 上記のサンプルで上手く行かないときは {{ic|1=gfxmode="1024x768x32"}} を {{ic|1=vbemode="0x105"}} に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい |
||
+ | * [[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|1=# hwinfo --framebuffer}} を使って利用できる全てのモードを表示することができます (hwinfo は [community] から利用可能です)、GRUB のプロンプトでは {{ic|1=videoinfo}} コマンドが使用できます |
||
+ | * 変更を加えた後に {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を実行することを忘れないでください。 |
||
− | * [[NVIDIA]] のプロプライエタリドライバーは {{ic|''<width>''x''<height>''-''<depth>''}} という形式で {{ic|GRUB_GFXMODE}} が使えます (例: {{ic|1920x1200-24}})。GeForce GTX 970 と nvidia 370 ドライバーでテスト済み。 |
||
}} |
}} |
||
− | この方法が |
+ | この方法がうまく行かない場合、非推奨の {{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 ハック === |
||
− | 以下の解像度のどれかを選ぶことができます: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}} |
||
+ | たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} と {{ic|1=videoinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} ハックを使うことができます。このハックは一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。AUR には {{AUR|915resolution}} パッケージが存在します。 |
||
− | === 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 のコマンドシェルが必要です: |
||
+ | |||
{{hc|sh:grub> 915resolution -l| |
{{hc|sh:grub> 915resolution -l| |
||
Intel 800/900 Series VBIOS Hack : version 0.5.3 |
Intel 800/900 Series VBIOS Hack : version 0.5.3 |
||
131行目: | 129行目: | ||
[...] |
[...] |
||
}} |
}} |
||
+ | |||
次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします: |
次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします: |
||
+ | |||
− | {{hc|/etc/grub.d/00_header| |
||
+ | {{hc|/etc/grub.d/00_header|2= |
||
[...] |
[...] |
||
'''915resolution 30 1440 900 # Inserted line''' |
'''915resolution 30 1440 900 # Inserted line''' |
||
− | set gfxmode |
+ | set gfxmode=${GRUB_GFXMODE} |
[...] |
[...] |
||
}} |
}} |
||
+ | |||
最後に、先に説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。 |
最後に、先に説明したように {{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 で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。 |
||
149行目: | 150行目: | ||
{{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" |
||
155行目: | 157行目: | ||
{{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) |
||
171行目: | 173行目: | ||
{{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}} と表示されます。 |
||
+ | |||
テーマを使っている時は基本的にスプラッシュイメージは表示されません。 |
テーマを使っている時は基本的にスプラッシュイメージは表示されません。 |
||
182行目: | 186行目: | ||
{{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" |
||
190行目: | 195行目: | ||
{{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}} がメニューの表示まで待機する秒数です。 |
||
=== フレームバッファの無効化 === |
=== フレームバッファの無効化 === |
||
200行目: | 206行目: | ||
フレームバッファを無効にするには、{{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 |
||
2022年7月10日 (日) 21:10時点における版
メインの記事は GRUB を見て下さい。
目次
代替インストール方法
USB スティックにインストール
BIOS
USB スティックの一番目のパーティションが /dev/sdy1
で FAT32 である場合:
# mkdir -p /mnt/usb # mount /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
(このパスは、UEFI ブートエントリ無しでファームウェアが見つけることができます) に書き込むには、grub-install
を使うときに --removable
フラグを使用してください。
パーティションやパーティションレスディスクにインストールする
パーティションブートセクタや、パーティションレスディスク (別名 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 #Your root partition. # mount /dev/sdxZ /mnt/boot #Your boot partition (if you have one). # arch-chroot /mnt
そして、linux をインストールして、以下を実行してください:
# grub-mkconfig -o /boot/grub/grub.cfg
core.img だけを生成する
GRUB のブートセクタコードを MBR, MBR の後の隙間またはパーティションのブートセクタに埋め込まずに /boot/grub
ディレクトリを作成して /boot/grub/i386-pc/core.img
ファイルを生成するには、grub-install
に --grub-setup=/bin/true
を加えて下さい:
# 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
になります。
915resolution ハック
たまに Intel のグラフィックドライバーで # hwinfo --framebuffer
と videoinfo
のどちらも希望する解像度を表示しないことがあります。この場合、915resolution
ハックを使うことができます。このハックは一時的にビデオ BIOS を修正して必要な解像度を追加します。915resolution のホームページ を見て下さい。AUR には 915resolutionAUR パッケージが存在します。
まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です:
sh:grub> 915resolution -l
Intel 800/900 Series VBIOS Hack : version 0.5.3 [...] Mode 30 : 640x480, 8 bits/pixel [...]
次に、Mode 30
を 1440x900
解像度で上書きします:
/etc/grub.d/00_header
[...] 915resolution 30 1440 900 # Inserted line set gfxmode=${GRUB_GFXMODE} [...]
最後に、先に説明したように GRUB_GFXMODE
を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。
背景画像とビットマップフォント
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
[...] Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A
次に、以下を /etc/grub.d/40_custom
に追加して下さい:
/etc/grub.d/40_custom
set superusers="username" password_pbkdf2 username <password>
<password>
は grub-mkpasswd_pbkdf2
によって生成された文字列に置き換えてください。
設定ファイルを再生成すれば、GRUB コマンドライン、ブートパラメータ、そしてブートエントリには全てプロテクトがかけられます。
この制限は GRUB manual の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。
GRUB の編集とコンソールオプションだけをパスワードで保護
--unrestricted
をメニューエントリに追加することでエントリの編集や GRUB のコマンドコンソールへのアクセスを制限しつつ誰でも OS を起動できるようになります。スーパーユーザーや --user
スイッチで指定したユーザーだけがメニューエントリを編集することが可能です。
/boot/grub/grub.cfg
menuentry 'Arch Linux' --unrestricted --class arch --class gnu-linux --class os ...
Shift キーが押されていない時は GRUB を隠す
起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に Shift
キーが押されていない限り、GRUB にメニューを隠させるということが可能です。
これをするためには、次の行を /etc/default/grub
に追加する必要があります:
GRUB_FORCE_HIDDEN_MENU="true"
そして [1] のファイルを作成して、実行可能属性を付与して grub の設定を再生成してください:
# chmod a+x /etc/grub.d/31_hold_shift # 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 カーネルと fallback としての 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=0
Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。
メニューのタイトルを使う:
GRUB_DEFAULT='Advanced options for Arch Linux>Arch Linux, with Linux linux'
デフォルトでないエントリを一度だけ起動する
デフォルトエントリ以外のエントリを一度だけ起動するのに grub-reboot
はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。
曲の再生
GRUB_INIT_TUNE
変数を変更することで起動時に PC スピーカーを使って曲を流すことができます。例えば、ベルリオーズの幻想交響曲 (ファゴットパート) を演奏するには以下のように設定します:
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"
詳しくは 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 としてコアイメージに同梱させます:
# ckbcomp dvorak | grub-mklayout > dvorak.gkb # tar cf memdisk.tar dvorak.gkb
そして GRUB コアイメージで使用する設定ファイルを作成してください。通常の GRUB の設定と同じフォーマットですが、/boot
パーティションのメインの設定ファイルを探してロードすることだけ記述します:
early-grub.cfg
root=(memdisk) 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
で有効化するか、システムファームウェアで適切に設定してください。
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#Default/fallback boot path
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 システムパーティション内の任意のディレクトリに格納でき(同じディレクトリであれば)、移植が可能になります。
GRUB で LUKS の復号を高速化する方法
起動時に GRUB はパスワードの確認に長い時間を要することがあります。これは PBKDF の反復回数が多いことが原因である可能性があり、以下のように確認することができます。
# cryptsetup luksDump /dev/sda3
問題は、特定のキースロットの反復カウントがキーが追加されたときに生成されるため、ブルートフォース攻撃から保護するのに十分な高さと、コンピュータの機能を推定してキーを高速に派生させるのに十分な低さのバランスが保たれることです。しかし、GRUB の起動時には、同じ計算資源が手元にないため、圧倒的に遅くなる可能性があります。
パスワードがそれ自体で一般的な攻撃に対抗するのに十分なエントロピーを提供する場合は、この数値を低くすることができます。
# cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/sda3
RFC 2898 によると、最低1000回の反復が推奨されていますが、可能であればより高い値を目指すべきです(攻撃者のコストと鍵の導出にかかる時間は、リニアに増加します)