GRUB/ヒントとテクニック
メインの記事は GRUB を見て下さい。
目次
GUI 設定ツール
以下のパッケージがインストール可能です:
- grub-customizer — ブートローダー (GRUB や BURG) のカスタマイズ
- grub2-editor — GRUB ブートローダー設定の KDE4 コントロールモジュール
- grub2-editor-frameworks — grub2-editor の非公式 KF5 ポート
- https://github.com/maz-1/grub2-editor || grub2-editor-frameworksAUR[リンク切れ: パッケージが存在しません]
- startupmanager — GRUB Legacy, GRUB, Usplash, Splashy の設定を変更できる GUI アプリ (開発停止)
- https://sourceforge.net/projects/startup-manager/ || startupmanagerAUR[リンク切れ: パッケージが存在しません]
外観の設定
GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては GRUB#"No suitable mode found" エラー のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。
フレームバッファの解像度を設定する
GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い vga=
は deprecated になりました。以下のように /etc/default/grub
を編集する方法が推奨されています:
GRUB_GFXMODE=1024x768x32 GRUB_GFXPAYLOAD_LINUX=keep
変更を適用するには、次を実行してください:
# grub-mkconfig -o /boot/grub/grub.cfg
gfxpayload
プロパティによってカーネルに解像度を維持させます。
この方法が使えない時は、昔の vga=
を使って下さい。/etc/default/grub
の "GRUB_CMDLINE_LINUX_DEFAULT="
という行に追加するだけです、例えば: "GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"
は解像度が 1024x768
になります。
以下の解像度のどれかを選ぶことができます: 640×480
, 800×600
, 1024×768
, 1280×1024
, 1600×1200
, 1920×1200
915resolution hack
たまに Intel のグラフィックドライバーで # hwinfo --framebuffer
と videoinfo
のどちらも希望する解像度を表示しないことがあります。この場合、915resolution
を使うことができます。この hack は一時的にビデオ 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
という名前です。
サポートされている画像フォーマットは 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=0 GRUB_HIDDEN_TIMEOUT=5 GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_HIDDEN_TIMEOUT がメニューの表示まで待機する秒数です。メニューを隠すには GRUB_TIMEOUT=0 も設定する必要があります。
フレームバッファの無効化
バイナリドライバーに問題が発生するので NVIDIA のプロプライエタリドライバーを使っているユーザーは GRUB のフレームバッファを無効化するべきです。
フレームバッファを無効にするには、/etc/default/grub
を編集して次の行をアンコメントしてください:
GRUB_TERMINAL_OUTPUT=console
他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、/etc/default/grub
内の次の変数を変更してください:
GRUB_GFXPAYLOAD_LINUX=text
GRUB で ISO9660 イメージファイルを直接起動
GRUB はループバックデバイスによる ISO イメージの直接起動をサポートしています。詳しくはマルチブート USB ドライブ#GRUB とループバックデバイスを使うを参照。
永続的なブロックデバイスの命名
永続的なブロックデバイスの命名のひとつとして"古い" /dev/sd*
の代わりに世界でただひとつの UUID を使ってパーティションを識別する方法があります。利点については上のリンクされている記事で説明しています。
ファイルシステムの UUID の永続的命名はデフォルトで GRUB で使われています。
UUID を使うかどうかは /etc/default/grub
内のオプションによって決めます:
# GRUB_DISABLE_LINUX_UUID=true
どちらにしても、変更を生成することを忘れないで下さい:
# grub-mkconfig -o /boot/grub/grub.cfg
ラベルを使う
--label
オプションを 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 をセキュアにしたい場合、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 }
grub.cfg を手動で作成する
基本的な GRUB 設定ファイルは以下のオプションを使っています:
(hdX,Y)
はディスク X 上のパーティション Y を示します、パーティション番号は1から始まり、ディスク番号は0から始まりますset default=N
はユーザーアクションのタイムアウト後に選択されるデフォルトブートエントリを指定しますset timeout=M
はデフォルトのエントリが起動されるまでユーザーが選択するのを待つ時間 M 秒を表しますmenuentry "title" {entry options}
はtitle
という名前のブートエントリになりますset root=(hdX,Y)
はカーネルや GRUB モジュールが保存されている boot パーティションを指定します (boot パーティションを分割する必要はなく、"root" パーティション (/
) 下のただのディレクトリでもかまいません)
エントリ
サブメニューの無効化
複数のカーネルをインストールしている場合 (例えば 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
デフォルトのメニューエントリを変更する
デフォルトで選択されるエントリを変更するには、/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
で有効化するか、システムファームウェアで適切に設定してください。