October 30, 2010

Ubuntu と GRUB2

Ubuntuの最新バージョン Ubuntu 10.10 が10月上旬にリリースされました。 このバージョンを私はまだ触ったことがありませんが、どうやら Ubuntu 10.04 LTS から採用されているブートローダGRUB2を使用しているとのこと。従来のGRUBでは boot/grub/menu.lst の修正でブートメニューを自由に変更でき, インターネットで検索すれば多く情報を得られます。ただし, このGRUB2に関してはなかなかありません。Ubuntuに限定するとなお顕著です。GRUB2の場合, ブートメニューは /boot/grub/grub.cfg を参照しています。 このファイルを開くと従来のGRUBで使用していた /boot/grub/menu.lst と似た役割を担っています。実際、 grub.cfg を編集するとブートメニューで表示する項目が変わります。これがもっとも簡単な方法です。(修正をする場合, 一旦書き込み権限を与えます。)

$ sudo chmod u+w /boot/grub/grub.cfg$ sudo gedit /boot/grub/grub.cfg$ sudo chmod u-w /boot/grub/grub.cfg
しかしながら、 この方法だと grub.cfgファイル自体は自動生成されたものなのでカーネルの更新などを行うと書き換えられてしまい、再度修正をかけなければならないといった問題がでてきます。GRUB2でブートメニューを変更するときは /etc/default/grub と /etc/grub.d について把握しておくと便利になると思います。この2ヶ所を調整することで同じような手間を省けます。

etc/default/grubを編集する

例えば、ブートメニュー内のUbuntuリカバリーモードという項目を消したい場合は次のようにして /etc/default/grubのある行のコメントを外します。#GRUB_DISABLE_LINUX_RECOVERY="true"に注目して下さい。
$ sudo vi /etc/default/grub#Uncomment to disable generation of recovery mode menu entries#GRUB_DISABLE_LINUX_RECOVERY="true"GRUB_DISABLE_LINUX_RECOVERY="true"

/etc/grub.d にある権限を変更する

etc/grub.d の中で実行権限がないものは boot/grub/grub.cfg の中に盛り込まれません。したがって memtest86+ をブートメニューに表示させたくない場合は、実行権限を取り上げます。
$ sudo chmod -x /etc/grub.d/20_memtest86+
最後に以下のコマンドを実行して, /boot/grub/grub.cfgを再生成します。このコマンドを実行すると /etc/grub.d
や /etc/default/grub に則って自動的に書き換えるため、手動で/boot/grub/grub.cfg を編集していたファイルは上書きされます。
$ sudo update-grub
以上で終了です。