GNU GRUB

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`に、FedoraGentoo 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、ZFSBtrfsなどのファイルシステムがサポートされています。

起動トラブルについて



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 の親密な関係 - 当講演で使用した資料

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。