06 December 2009

(Ubuntu 9.10) Grub2の設定

Ubuntu 9.10のGrub2ブートローダの設定メモ

■ /boot/grub/grub.cfg を直接編集しない
旧来のGrubでは、このファイルを編集したが、Grub2では、このファイルはupdate-grubコマンドで自動作成されるので編集してはいけない。

■ 設定ファイル一覧
/etc/default/grub :全般的な設定(タイムアウトやデフォルトの設定値など)
/etc/grub.d/ディレクトリ :メニュー項目やインターフェースの設定ファイル

■ 実行ファイル一覧
grub-install : Grub2をMBRやPBRに書き込む
update-grub : 設定ファイルを用いて/boot/grub/grub.cfgを作成する
update-grub2 : update-grubと同じ

■ Grub2ブートローダをMBR(またはPBR)にインストールする

インストールしたい場所(/dev/sdaや/dev/sda2 などのデバイス名)を引数に指定して grub-install コマンドを実行する。

grub-install /dev/sda

■ memtest+86や他のOSのエントリを消去する

/etc/grub.d/ディレクトリの設定スクリプトの実行権限を削除すればよい。
・Ubuntu Forums The Grub 2 Guide 『Adding Entries to Grub 2』の”Omitting memtest86+”に書かれている方法を用いる。

memtest+86 : chmod -x /etc/grub.d/20_memtest86+
他のOS : chmod -x /etc/grub.d/30_os-prober

■ (自動的に追加される)特定のエントリを消去する
/etc/grub.d/30_os-prober で自動的に加えられるエントリに不必要なものがある場合 (例えば、リカバリ用のパーティション)の対処方法。
・Ubuntu Forums Grub 2 Title Tweaks の『F. Hiding Windows (Vista) Recovery Partition Entry』セクションに書かれている方法を用いる。

まず、/boot/grub/grub.cfgで消したいエントリを検索し、たとえばそのエントリ名が『menuentry "Windows NT/2000/XP (on /dev/sda3)"』となっている場合は次のようなスクリプトを付け加える。

/etc/grub.d/30_os-prober
for OS in ${OSPROBED} ; do DEVICE="`echo ${OS} | cut -d ':' -f 1`" LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`" LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`" BOOT="`echo ${OS} | cut -d ':' -f 4`" if [ -z "${LONGNAME}" ] ; then LONGNAME="${LABEL}" fi # Added to remove Windows Recovery if [ "$LONGNAME" = "Windows NT/2000/XP" ] && [ "${DEVICE}" = "/dev/sda3" ] ; then continue fi # End Added

■ 任意のエントリを加える
/etc/grub.d/40_custom にgrub.cfgに追記したい内容を”そのまま”記述する。

/etc/grub.d/40_custom
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "Windows XP Service Pack 3 (on /dev/sda1)" { insmod ntfs set root=(hd0,1) drivemap -s (hd0) ${root} chainloader +1 }

■ ブートメニューのタイムアウトやデフォルトの選択項目を設定する
/etc/default/grub に記述する。
・Ubuntu Forums The Grub 2 Guide 『Grub 2 Files & Options』の”/etc/default/grub”セクションに書かれている方法を用いる。

GRUB_DEFAULTに設定する文字列は、/boot/grub/grub.cfg の menuentry の値をそのまま書けばよい。

/etc/default/grub
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. #GRUB_DEFAULT=0 GRUB_DEFAULT="Windows NT/2000/XP (loader) (on /dev/sda1)" #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="5" GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="splash" GRUB_CMDLINE_LINUX="" # Uncomment to disable generation of recovery mode menu entrys GRUB_DISABLE_LINUX_RECOVERY="true"

■ ブートローダの背景画像を変更(設定)する
・Ubuntu Forums The Grub 2 Guide 『Grub 2 Splash Images 』セクションに書かれている方法を用いる。

/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub と指定されているディレクトリのどれかに、my-images.png か my-images.tga というファイルを保存すればよい。(grub2-splashimagesパッケージでは640x480のフルカラーtga画像がインストールされる)

画像はフルカラーでないと表示されない。PNGで256色等に減色しないこと。

/etc/grub.d/05_debian_theme
# check for usable backgrounds use_bg=false if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/my-image.{png,tga} ; do if is_path_readable_by_grub $i ; then bg=$i case ${bg} in *.png) reader=png ;; *.tga) reader=tga ;; *.jpg|*.jpeg) reader=jpeg ;; esac if test -e /boot/grub/${reader}.mod ; then echo "Found Debian background: `basename ${bg}`" >&2 use_bg=true break fi fi done fi

※ 指定した画像ファイルを表示する場合(Ubuntu 10.04LTS版)

/etc/grub.d/05_debian_theme
#!/bin/bash -e source /usr/lib/grub/grub-mkconfig_lib # this allows desktop-base to override our settings f=/usr/share/desktop-base/grub_background.sh if test -e ${f} ; then source ${f} else WALLPAPER="/usr/share/images/grub/MyImage.png" COLOR_NORMAL="white/black" COLOR_HIGHLIGHT="black/light-gray" fi set_mono_theme() { 〜 以下省略 〜

※ 指定した画像ファイルを表示する場合(Ubuntu 11.10版)

/etc/grub.d/05_debian_theme
#!/bin/sh set -e # grub-mkconfig helper script. 〜 中略 〜 # Include the configuration of desktop-base if available. if [ -f "/usr/share/desktop-base/grub_background.sh" ]; then . "/usr/share/desktop-base/grub_background.sh" fi WALLPAPER="/usr/share/images/grub/MyImage.png" COLOR_NORMAL="white/black" COLOR_HIGHLIGHT="black/light-gray" # First check whether the user has specified a background image explicitly. # If so, try to use it. Don't try the other possibilities in that case # (#608263). if [ -n "${GRUB_BACKGROUND+x}" ]; then set_background_image "${GRUB_BACKGROUND}" || set_default_theme exit 0 fi 〜 以下省略 〜


■ 参考資料
Ubuntu日本語フォーラム Grub 2 入門 (本家版の日本語訳)
・Ubuntu Forums The Grub 2 Guide