GNU GRUB (GRand Unified Bootloader) について
GNU GRUBは、
GNUプロジェクトで開発されている高機能な
ブートローダです。一般的には「グラブ」と読まれます。主に、バージョン0.9x系のGRUB Legacyと、1.9x系のGRUB 2の2種類が存在します。
GRUBは、複数の
オペレーティングシステムがインストールされた環境で、どのOSを起動するかを選択する際に用いられます。また、OS起動時に
カーネルのオプションを設定する機能も提供します。
GRUBの歴史
GRUBは、もともとエーリヒ・シュテファン・ブーリン氏によって開発され、
GNU Hurdオペレーティングシステムを起動させるために利用されていました。その後、主要貢献者であるゴルドン・マッツィヒカイト氏と奥地秀則氏の働きかけにより、
1999年に公式な
GNUプロジェクトとなりました。
現在は、
GNU Hurdだけでなく、
Linux、FreeBSDなどの
Unix系OSや、
Solaris x86など、幅広いOSで利用されています。
GRUBの特徴
GRUBは、柔軟な設定変更が可能です。コンピュータの起動時に異なる
カーネルや初期RAMディスクを選択できます。
Bashライクなコマンドラインインターフェースを備えており、ユーザーは
ブートメニューに新たな
ブートシーケンスをその場で追加することもできます。
GRUBは、
移植性が高く、様々な実行可能フォーマットをサポートしています。ディスクのジオメトリ変換に依存せず、LBAモードをサポートしています。また、主要なUNIXファイルシステムに加え、VFATやNTFSといったWindowsで使用されるファイルシステムもサポートしています。GRUBを使用することで、サポートされている任意のファイルシステム上のファイルの中身を確認することができます。
GRUBの設定には、グラフィカルなツールやテキストインターフェースを利用できます。多くの
Linuxディストリビューションでは、
ブートメニューの背景画像をカスタマイズするツールが提供されています。テキストインターフェースでは、リモートターミナルから
シリアルポート経由で接続することも可能です。
GRUBはネットワーク経由でのOSイメージのダウンロードも可能で、ディスクレスシステムもサポートしています。また、ローカルからの起動だけでなく、起動前のOSイメージの自動伸長も行えます。
GRUBはスクロール可能なOS
ブート選択画面を表示します。設定ファイルにエントリを追加することで、多数の
ブート選択肢を容易に管理できます。また、矢印キーで起動するOSを選択できます。
GRUBはマルチ
ブートに対応しており、チェーンロードを利用することで、マルチ
ブート非対応のOSもサポートします。設定ファイルに数行のコマンドを記述するか、GRUB
シェルでコマンドを実行することで、
MS-DOS、Windows、
Linux、BSD、
SolarisなどのOSを起動できます。
GRUBには
Bashライクなターミナルコマンドプロンプトが用意されており、
ブートプロセスをチェックしたり変更したりするための豊富なコマンドセットが利用可能です。これにより、OSの事前知識がなくても、
フロッピーディスク、USB、
CD-ROMデバイスからGRUBを起動して、インストールされているOSを起動させることができます。
GRUBは、
Unix系OSにインストール可能ですが、DOSやWindowsからのインストールも可能です。
以下はx86システムにおける
ブートプロセスの説明です。
コンピュータの電源を入れると、BIOSはプライマリ
ブートデバイス(通常はハードディスク)から、先頭512バイトに位置するマスター
ブートレコード(MBR)の初期
ブートストラッププログラムをロードします。
GRUB バージョン1 (GRUB Legacy)
GRUBがインストールされている場合、MBRにはGRUBの初期
ブートプログラムであるStage 1ローダがインストールされています。ただし、別の
ブートローダがインストールされている場合は、GRUBのStage 1ローダを
パーティションのボリューム
ブートレコード(VBR)にインストールし、MBR上の
ブートローダからチェーン
ブートする必要があります。
Stage 1ローダは、ディスクの先頭1024シリンダー以内の固定領域から2、3のディスクセクタを読み込み、GRUBの次のStageローダをロードします。
通常、Stage 1ローダはStage 1.5ローダをロードします。Stage 1.5ローダは、MBR直後の30KB以内の領域に位置し、ファイルシステム固有のドライバを含みます。これにより、Stage 2ローダをファイルシステム上の任意の場所からロードできます。
Stage 2ローダは、デフォルトの設定ファイルや必要なモジュールを読み込みます。
GRUB バージョン2
GRUB 2の構造は、GRUB バージョン1に似ています。MBRまたはVBRには、boot.imgと呼ばれるコードが保存されます。このコードは、core.imgの最初のセクタをロードし、core.imgファイルの残りをロードします。
core.imgは、GRUB LegacyのStage 1.5ローダと同様の領域に保存されますが、別のファイルシステムや「空の
パーティション」に移動しても問題が少なくなっています。core.imgは、GRUB LegacyのStage 2ローダから主要なコードを取り出したもので、MBRやVBRへのインストールが可能なサイズになっています。
core.imgがロードされると、デフォルトの設定ファイルと必要なモジュールがロードされます。
GRUBのロード以降
GRUBのロードが完了すると、OSを選択するインターフェースが表示されます。通常はグラフィカルなメニューが使われますが、コマンドプロンプトも利用可能です。GRUBは、設定された時間が経過すると、自動的に特定の
カーネルをロードするように設定できます。
メニュー上でOSを選択した状態で'e'キーを押すと、そのOSの起動パラメータを編集できます。これにより、
カーネルパラメータの変更や、LKMの無効化などが可能です。
'c'キーを押すと、
BashライクなGRUBコマンドラインが表示されます。このコマンドラインでは、GRUB固有のコマンドを実行できます。
ブートオプションが選択されると、GRUBは選択した
カーネルをメモリにロードし、制御を
カーネルに委ねます。また、チェーンロードを利用して、別の
ブートローダに制御を渡すことも可能です。
GRUBのインストール
GRUBのインストールには、
Linuxのイメージコピーが必要です。GRUBはスタンドアローンシステムとして動作し、チェーンロードを用いて、インストールされたすべてのOSを起動できます。
LILOのような
ブートローダとは異なり、設定ファイルの変更ごとにGRUBを再インストールする必要はありません。
Linuxでは、`grub-install`コマンドを使用して、Stage 1ローダをMBRまたは
パーティションにインストールします。設定ファイル、Stage 2ローダ、その他のファイルは、有効な
パーティション上に存在する必要があります。
GRUBの設定ファイルは、システムによって異なります。例えば、openSUSEやGRUB Legacyを使用するDebian GNU/
Linuxでは`/boot/grub/menu.lst`に、
Fedoraや
Gentoo Linuxでは`/boot/grub/grub.conf`に存在します。GRUB 2をインストールしたDebian、
Ubuntuでは`/boot/grub/grub.cfg`が設定ファイルです。
GRUBは、BIOSアクセス可能な
光学ドライブ、
フロッピーディスク、USBフラッシュドライブなどの
リムーバブルメディアにもインストールできます。
GRUBの開発
最も広く使用されているGRUBのバージョンはGRUB Legacyですが、現在はバグ修正のみが行われています。
GRUB開発者は、GRUB 2の開発に注力しており、GRUB 2は、
移植性、機能性の向上を目的とした全面的な書き換えが行われています。
GRUB 2の開発は、当初PUPAという名前で始まり、
独立行政法人情報処理推進機構の援助を受けていました。
GRUB 2では、
PowerPCなどの非x86プラットフォームのサポート、国際化、動的なモジュールローディング、
メモリ管理、簡易な
スクリプト言語、
オブジェクト指向フレームワークなどの機能が追加されています。
Ubuntu 9.10以降、
Fedora 14、Debian 6.0など、多くのディストリビューションでGRUB 2がデフォルトの
ブートローダとして採用されています。
GRUBの派生
GRUB Legacyのコードをフォークして、独自の改善を加えた非公式プロジェクトがいくつか存在します。Super Grub DiskやGRUB4DOSなどがその例です。特にGRUB4DOSは、DOS/LINUXからの起動、Windows
ブートマネージャ、SYSLINUX、
LILO経由での起動、MBR/CDからの起動をサポートしています。
OpenSolarisでは、GRUB Legacyにディスクラベル、自動的な
64ビットカーネル選択、
ZFSからの
ブートをサポートするための改良が加えられています。
Syllable OSプロジェクトでは、AtheOS File Systemからのシステム起動をサポートするための改変版GRUBが作成されています。
GRUBの設定ツール
多くのディストリビューションでは、GRUBのセットアップツールが提供されています。SUSE
Linux/openSUSEのYaST2、
Fedora/RHELのAnacondaインストーラ、
UbuntuのStartUp-Managerなどがその例です。
ユーティリティ
GRUB Utilitiesは、GRUB Legacy、GRUB 2、GRUB4DOS用のマルチプラットフォームユーティリティのコレクションです。
GRUB 2が対応しているファイルシステム
GRUB 2では、FFS、UFS2、FAT16/32、ext2/ext3/ext4、NTFS、
ReiserFS、JFS、XFS、MINIX FS、
ZFS、
Btrfsなどのファイルシステムがサポートされています。
起動トラブルについて
GRUBは、MBRに格納される本体と、
パーティションに格納される設定ファイルから構成されます。
Linux用
パーティションを削除すると、GRUBが起動できなくなることがあります。
GRUBの起動不能の原因は多岐にわたります。BIOSからのHDD認識、ストレージデバイスコントローラーの認識状態、USBストレージ機器の接続状況などが影響することがあります。
GRUBは、処理段階ごとに停止時の表示から状況を判断できるように設計されています。GRUBコンソールやGRUB rescueコンソールが表示される場合は、他の起動ディスクを使用せずに復旧できる場合があります。
参考文献
Brady, Pádraig. “Details of GRUB on the PC”. pixelbeat.org.
Okuji, Yoshinori. “GNU GRUB”. gnu.org.
関連リンク
GNU GRUBプロジェクト公式サイト
GNU GRUB公式マニュアル
公式のhelp-grubメーリングリスト
PUPA
LILO and GRUB: Boot Loaders Made Simple by Judith Myerson
Booting Linux on x86 using Grub2
Boot with GRUB、Linux Journal
YLUG 第92回カーネル読書会 - GRUB主要開発者、奥地秀則(Yoshinori K. Okuji)によるプレゼンテーション
*
ブートローダと OS の親密な関係 - 当講演で使用した資料