GRUB 2 への移行

新しいブート・ローダーに移行する

Linux® をブートするためのツールは変化しています。具体的には、GRUB (Grand Unified Bootloader) は今や正式には保守が行われているのみとなり、GRUB の開発者達は既に最初にリリースされた GRUB から離れ、まったく新たに作成された GRUB 2 というパッケージに移行しています。GRUB 2 の新機能と使い方を学びましょう。

Roderick W. Smith, Consultant and author

Roderick Smith author photoRoderick W. Smith はコンサルタントであり、『The Definitive Guide to Samba 3』、『Linux in a Windows World』、『Linux Professional Institute Certification Study Guide』など、UNIX や Linux に関する数々の著作もあります。彼は現在、ロードアイランドのウーンソケットに住んでいます。



2010年 4月 14日

ほとんどの人にとって、ブート・ローダーはオペレーティング・システムの中で最も興味深い部分とは言えません。しかしブート・ローダーは非常に重要です。適切に動作するブート・ローダーがない限り、他のものは動作することができません。現在、昔ながらの GRUB (Grand Unified Bootloader) Legacy ツールから新しい GRUB 2 への移行が行われています。GRUB 2 は Ubuntu 9.10 ではデフォルトのブート・ローダーであり、他のほとんどの主要な Linux ディストリビューションでは 1 つの選択肢として提供されています。遅かれ早かれ、他のディストリビューションもデフォルトのブート・ローダーとして GRUB 2 を採用することになるはずです。

ブート・ローダーを解剖する

図 1 は、GRUB Legacy と GRUB 2 の両方に実装されているブート・プロセスを示しています。BIOS (Basic Input/Output System) はコンピューター上で最初に実行されるコードであり、コンピューターのファームウェアの中に保存されています。BIOS はブート・デバイスの最初のセクターをロードし、そのセクターに含まれるコードを実行します。ハード・ディスクの場合、この最初のセクターは MBR (Master Boot Record) とも呼ばれ、ブート・ローダーの最初のステージと MBR のパーティション・テーブルの両方を含んでいます。ほとんどのディスク・デバイスが使用するセクター・サイズは 512 バイトであるため、最初のステージのブート・ローダー・コードは非常に簡単なものでなければなりません。GRUB Legacy と GRUB 2 を含め、ほとんどのブート・ローダーは、ディスク上の他の場所に追加のコードを配置します。GRUB Legacy の場合、この追加コードはステージ 1.5 として知られ、多くの場合は MBR の直後の未割り当て領域に配置されます。さらに追加のコード (ステージ 2 として知られています) が、Linux のブート・パーティションの中 (通常は /boot ディレクトリーの中) にあるファイルに保存されます。ただし図 1 では、これらのファイルは簡単にするために省略してあります。同様に、オペレーティング・システムが複数の構成では、さらに追加の構成ファイルが 2 番目のブート・ローダーによって他の場所に保存されます。

図 1. GRUB と GRUB 2 はいくつかのサブコンポーネントで構成され、それらのサブコンポーネントが順にロードされ、実行される
GRUB と GRUB 2 で使用されるブート・プロセスのブロック図。いくつかのサブコンポーネントが順にロードされ、実行されます。

全体的な形式としては GRUB 2 は GRUB Legacy と似ていますが、ステージ 1.5 はなく、モジュール構成になっており、さまざまなパーティション・システムやファイルシステム、その他の拡張機能を処理するコードは (通常は /boot/grub の中にある) ディスク・ファイルに保存されています。

GRUB Legacy の場合も GRUB 2 の場合も、上で説明した構成のバリエーションが可能です。例えば、GRUB のステージ 1 のコードを、MBR ではなく Linux ブート・パーティションの最初のセクターにインストールすることができます。このようにすると、MBR には別のブート・ローダーが存在することになり、そのブート・ローダーによって GRUB がチェーン・ロードされた場合にのみ GRUB のメニューが現れます。EFI (Extensible Firmware Interface) にはブート・ローダーが組み込まれているため、EFI ベースのシステムの GRUB 2 では、そうした構成が可能です (EFI はやがて標準的な PC ファームウェアとして BIOS に取って代わる見通しです)。

実際のシステムで GRUB Legacy を GRUB 2 で置き換える場合には、新しい GRUB 2 パッケージをインストールし、そのパッケージのファイルを構成します。そして特別なコマンドを実行して GRUB 2を操作し、既存の GRUB Legacy の MBR と特殊な隠しコードを GRUB 2 の対応するものに置き換えます。デフォルトのブート・ローダーとして GRUB 2 を使用する新しいディストリビューションをインストールするために GRUB 2 に切り換える場合には、そうしたステップを行う必要はありません。いずれにせよ、GRUB 2 の新しい構成ファイル・フォーマットと、新しいブート・ローダーの全体的な機能を理解する必要があります。


GRUB 2 で改善された点

Linux のみのシステムの場合、GRUB Legacy はブート・ローダーとしての仕事を完全に処理することができます。GRUB 2 に移行する 1 つの理由はブート・ローダーの発展と関係しています。GRUB Legacy には、開発者にとって乱雑で保守不能と思えるコードが含まれています。新しい機能を追加するために、彼らはそうしたベースの上に構築するよりもゼロの状態からブート・ローダーを作り直すことを選択したのです。GRUB 2 は、システム管理者が実際に使用する上で、現在既に重要な、または将来重要となり得る、以下のような機能をサポートしています。

  • プラットフォームのサポート。GRUB Legacy は x86 システムと x86-64 システムでしか動作しません。GRUB 2 はさらに広範な種類のアーキテクチャーで動作することを目標としていますが、ドキュメントには x86 または x86-64 以外での使い方はほとんど説明されていません。ただし GRUB 2 は PowerPC® システムや SPARC (Scalable Process Architecture) システムでは動作します。
  • ファームウェアのサポート。GRUB 2 は他のファームウェア・タイプもサポートしています (BIOS、EFI、OpenFirmware など)。一般的ではない CPU がサポートされているのと同様、一般的ではないファームウェアも多少はサポートされていますが、そうしたサポートは非常に実験的なものと考える必要があります。
  • パーティション・テーブル。正式には、GRUB Legacy は古い MBR パーティション方式しかサポートしていません。しかしほとんどの Linux ディストリビューションには、GPT (GUID Partition Table) を非公式にサポートしたバージョンの GRUB Legacy が付属しています。GRUB 2 は正式に GPT をサポートしています。
  • RAID と LVM。GRUB Legacy はソフトウェア・ベースの RAID (Redundant Array of Independent Disks) 構成や LVM (Logical Volume Manager) 構成をサポートしていません。これはつまり、標準パーティション (または RAID 1 構成) の中に少なくとも 1 つのファイルシステムを持つ必要があり、そうしないと GRUB Legacy は自分自身の構成ファイルを読み込むことができない、ということです。GRUB 2 は RAID と LVM の Linux での形式をサポートしています。そのため、RAID パーティションまたは LVM パーティションのみでシステムを構成することができます。
  • ファイルシステムのサポート。構成ファイルを読み込むためには、GRUB は構成ファイルが保存されたファイルシステムを読み込める必要があります。GRUB Legacy がサポートしているファイルシステムは、ext2fs (Second Extended Filesystem)、FAT (File Allocation Table)、JSF (Journaling File System)、ReiserFS、XFS (Extents File System) など、10 種類もありません。Linux のみのシステムの場合、GRUB 2 でのファイルシステムのサポートは GRUB Legacy と同程度ですが、GRUB 2 には Linux 以外のファイルシステムのサポートも追加されています (Apple の HFS+ (Hierarchical File System Plus)、Microsoft の NTFS ファイルシステム、Sun の ZFS など)。
  • カーネルのサポート。GRUB Legacy によって直接ブートできるカーネルには、Linux、FreeBSD、NetBSD、OpenBSD、そしてマルチブート仕様準拠のすべてのオペレーティング・システム (GNU HURD カーネルや OpenSolaris、その他数種類) などがあります。GRUB 2 は GRUB Legacy と同様にこれらのカーネルをすべて直接ブートできる他、XNU (Mac OS X と Darwin カーネル) も直接ブートすることができます。他のオペレーティング・システム (Windows® など) をブートするためには、GRUB Legacy の場合も GRUB 2 の場合も、別のブート・ローダーをチェーン・ロードする必要があります。

GRUB 2 を構成する

既に GRUB Legacy をよく理解している人であれば、GRUB 2 の構成ファイルは大まかに言えば GRUB Legacy に似ているけれども、多くの詳細部分が異なることに気付くと思います。このため GRUB 2 を構成する方法についても理解しておく必要があります。

構成ファイルの例

GRUB 2 の構成ファイルのデフォルトの場所は /boot/grub/grub.cfg です。一部の Linux ディストリビューションでは、その場所の代わりに /boot/grub2/grub.cfg を使用することで GRUB Legacy と GRUB 2 を並列にインストールできるようになっています。リスト 1 は GRUB 2 の構成ファイルの例を示しています。

リスト 1. GRUB 2 の構成ファイルの例
set timeout=10
set default=0

menuentry "Linux (2.6.32.2 kernel)" {
        set root=(hd1,8)
        linux /bzImage-2.6.32.2 ro root=/dev/sdb4
        initrd /initramfs-x86_64-2.6.32.2
}

menuentry "Windows 7" {
        set root=(hd1,2)
        parttool (hd0,1) hidden+
        parttool (hd1,5) hidden-
        chainloader +1
}

GRUB Legacy を理解している人であれば、この基本的な GRUB 2 の構成ファイルが GRUB Legacy の場合と似ていることに気付くと思います。GRUB Legacy の構成ファイルの場合と同様、GRUB 2 の構成ファイルは各種のグローバル・オプションを設定する部分から始まります。この場合にはグローバル・オプションとしてタイムアウト値を 10 秒に設定し、またデフォルトのメニュー・エントリーを設定しています。

構成ファイルには、さらに一連のメニュー・エントリーが続きます。これらのメニュー・エントリーの形式は GRUB Legacy の場合とは異なりますが、目的は同じであり、各エントリーは 1 つのオペレーティング・システムまたはブート変数 (各種の Linux カーネルなど) を定義しています。各メニュー・エントリーは menuentry というキーワードで始まり、それに続いて引用符で囲まれた名前があり、この名前が GRUB 2 のメニューに現れます。そのメニュー・エントリーに関連付けされるオプションは中括弧 ({}) の間に現れます。

構成ファイルの変更点

GRUB Legacy と GRUB 2 では構成ファイルのフォーマットがいくつか変更されており、以下の点に注意する必要があります。

  • GRUB 2 では set キーワードを使用し、またオプションの名前と値の間に等号 (=) を使います。GRUB 2 と同じオプションを指定する場合、GRUB Legacy では set キーワードも等号もありません。
  • GRUB Legacy では、メニュー・エントリーは title というキーワードで始まり、その行の最後までのテキストがタイトルです。メニュー・エントリーの定義のうち、タイトル以外はタイトル行に続く行として現れ、定義のための波括弧はありません。メニュー・エントリーは次のメニュー定義が始まることで終了します。
  • GRUB Legacy は kernel キーワードを使用して Linux カーネルを指定します。GRUB 2 では kernel ではなく linux を使います。
  • それ以外にも特定のオプション名が変更されています。例えばリスト 1 では、簡単なパーティション操作を行える新しい parttool コマンドを Windows 7 の定義の中で使っています。リスト 1 はこの機能を利用して特定のパーティションを隠したり表示したりすることで、Windows 7 によってマウントされるパーティションを制御しています。このコマンドと等価な GRUB Legacy のコマンドは、hideunhide です。

もう 1 つの変更は非常に重要ですが、リスト 1 では明白にはわかりません。つまり GRUB 2 ではパーティションの番号は 1 から始まりますが、GRUB Legacy では 0 から始まります。ディスクの場合、同様の番号付けの変更は行われていません。従って、最初のディスクの最初のパーティションは GRUB Legacy では (hd0,0) ですが、GRUB 2 の場合は同じパーティションが (hd0,1) です。この細かい違いに十分注意する必要があります。この違いは問題の主要な原因となる可能性があるからです。

GRUB 2 の新機能を使う

当然ですが、GRUB 2 は多くの新機能を実装しています。これらの新機能には、標準的な Linux のインストールにはほとんど影響せず、構成ファイルに直接影響することもないものもあれば、以下のように重要な内容で慣れる必要があるものもあります。

  • GRUB 2 はモジュールで構成されているため、明示的にモジュールをロードすることで多様な機能をサポートすることができます。insmod キーワードを使うと、指定した名前のモジュールをロードすることができます。例えば insmod lvm と指定すると、LVM のサポートがロードされます。モジュール群は /boot/grub に保存されており、モジュールのファイル名は .mod で終わります。多くの場合、明示的に insmod を使う必要はありません。大部分のモジュールは GRUB 2 によって自動的にロードされるからです。しかし場合によると手動でモジュールをロードする必要があるかもしれません。
  • GRUB 2 は新しいスクリプト機能を実装しており、データを保存したり、条件付きでアクションを実行したりすることができます。これらの機能のドキュメントも十分ではありませんが、構文は bash のスクリプト機能に似ています。

GRUB 2 を再構成するための別の方法

Ubuntu 9.10 は grub-mkconfig ユーティリティーと、/etc/grub.d の中にあるこのユーティリティーに対応したスクリプトを使うことで、システムをインストールする際に /boot/grub/grub.cfg ファイルを自動的に書き換えています。このスクリプトはカーネルのアップグレード後、あるいは他の特定アクションの後などに、ユーザーが気付かないうちに実行されます。そのため、grub.cfg ファイルを手動で変更する場合には、grub.cfg ファイルをバックアップしておく必要があります。

場合によると、意図的に grub-mkconfig を実行するのが望ましいことがあります。例えばデフォルトの構成を使用しているシステムに新しいカーネルを追加した場合、grub-mkconfig を実行すれば、新しいカーネルが検出され、そのカーネルが GRUB 2 構成ファイルに追加されます。

より具体的な変更が必要な場合には、/etc/grub.d の中にある構成ファイルを直接編集することもできます。これらのファイルは実際には bash スクリプトです。各ファイルはシステムに対し、特定タイプのカーネルやオペレーティング・システムを検索して /boot/grub/grub.cfg に適切なエントリーを追加する方法を指示します。

grub-mkconfig によって参照される、もう 1 つのファイルが /etc/default/grub です。このファイルは最終的な /boot/grub/grub.cfg ファイルのグローバルなデフォルトを保持しています。

GRUB 2 のインストールの管理を支援するためのツールやスクリプトがサードパーティーによって作成されています。その一例が StartUp Manager です。この GUI (Graphical User Interface) ツールは Ubuntu に付属しており、ポイント・アンド・クリック・インターフェースを使って GRUB Legacy と GRUB 2 の両方のインストールを管理することができます。


GRUB 2 をインストールし、使用する

GRUB 2 は GRUB Legacy と同様、1 度だけインストールする必要があります。その後はブート・ローダーが自分自身の /boot/grub/grub.cfg ファイルを読み取り、ブート・メニューを表示します。ただしインストールの前に、パーティションの配置を考慮する必要があります。GRUB 2 をインストールした後は、ブート時の操作の基本的な機能について理解しておく必要があります。

GRUB 2 のパーティションの準備

MBR のパーティション方式を使用するディスクに GRUB 2 をインストールする場合には、特別な準備は必要ありません。GPT の場合も技術的には同じです。ただし GPT ディスクに BIOS ブート・パーティションが含まれている場合には、GRUB 2 はそのパーティションに追加のコードを保存します。BIOS ブート・パーティションがない場合には、GRUB 2 は /boot ディレクトリーの中のファイルに対応するディスク・セクターのリストを利用します。そのファイルシステムを何らかの理由で調整すると、セクター・リストが無効になり、GRUB のブート機能が使えなくなる可能性があります。そのため、GPT ディスクの場合は BIOS ブート・パーティションを使うことを強く推奨します。

BIOS ブート・パーティションのサイズは少なくとも 31KB 必要です。このサイズを大きくしても問題はなく、将来 GRUB の要求が変更になった場合にも有用です。最新バージョンの GNU Parted では、パーティションに bios_grub オプションを設定して BIOS ブート・パーティションにすることができます。GPT の fdisk では、パーティション・タイプのコードを EF02 に変更します。

GRUB 2 のインストール

ディスクの MBR に GRUB 2 をインストールする場合には、GRUB の場合と同じく grub-install コマンドを使います。(一部のディストリビューションはこのコマンドを grub2-install とリネームしています)。このコマンドにインストール先のディスク・デバイスの名前を渡します (通常は /dev/sda または /dev/hda です)。

通常はパーティションのブート・セクター (/dev/sda4 など) に GRUB Legacy をインストールします。その場合には以下のコマンドを入力します。

grub-install /dev/sda4

(必要に応じてパーティション・デバイスのファイル名を変更します。) GRUB 2 の場合には、この方法は使えませんが、以下のコマンドを入力することで GRUB 2 をブート・セクターにインストールできる場合があります。

grub-setup --force /dev/sda4

(必要に応じてデバイス・ファイル名を変更します。) ただし、この方法が必ず使えるとは限りません。

GRUB 2 を使用してブートを実行する

通常の使い方であれば、GRUB 2 の動作は GRUB Legacy とほとんど同じです。コンピューターがブートされると、BIOS によるチェックの直後にオペレーティング・システムとカーネルを選択するためのメニューが表示されます。ブート対象を矢印キーで選択し、Enter を押します。何も選択しない場合には、構成ファイルの設定に応じてデフォルトがブートされます。

あるエントリーがうまくブートできない場合には、GRUB 2 の編集モードを使って 1 度限りの変更をすることができます。それには Enter キーを押してエントリーをブートする代わりに、E キーを押してそのエントリーを編集します。すると、Emacs のような編集方法を受け付ける簡単なエディターが表示されます。編集を終えたら、Ctrl-X を押し、変更されたエントリーをブートします。

GRUB 2 が自分自身の構成ファイルを見つけられない場合、grub> プロンプトが表示されます。その場合には、構成ファイルのメニュー・エントリーに使用するコマンドを含め、GRUB 2 のコマンドを入力することができます。GRUB 2 を十分理解している人であれば、そのコンピューターをブートすることができるかもしれません。残念ながら、GRUB 2 のコマンドライン・モードを使ったトラブルシューティングを完全に説明するためには、この記事の数倍の長さが必要です。


GRUB 2 を使うべきか

ディストリビューションに GRUB 2 がデフォルトでインストールされている場合や、少し変わった機能を利用する必要がある場合 (例えば XNU カーネルを直接ブートできることなど) には、大いに GRUB 2 を使う理由があります。それ以外のほとんどの場合には、GRUB 2 は GRUB Legacy に比べ、ほとんど、あるいはまったくメリットがありません。その中間にあたるケースとして、BIOS ベースのコンピューターで GPT を使用している場合があります。この構成は GRUB 2 ではサポートされていますが、標準の GRUB Legacy ではサポートされていません。GPT をサポートするパッチを当てたバージョンの GRUB Legacy が提供されており、最近のほとんどのディストリビューションにはそれが付属していますが、正式に GPT をサポートしたブート・ローダーを使う方が適切かもしれません。

結論としては、次のように言うことができます。既にインストールしてあるものが適切に動作しているのであれば、それを使い続けるのがベストです。ブート・ローダーを変更するとシステムがブート不能になる可能性があり、その修復は非常に面倒です。

とは言え、おそらく GRUB 2 は GRUB Legacy に取って代わりつつあります。そのため、たとえテスト・システムや仮想マシン上だけであっても、GRUB 2 に慣れておく必要があります。遅かれ早かれ、ディストリビューションのブート・ローダーが変更され、GRUB の構成ファイルのフォーマットが変更されたことに気付くことになるかもしれません。少し先行して調べておくことで、この変更を最小限のトラブルで切り抜けることができるはずです。

参考文献

学ぶために

製品や技術を入手するために

  • StartUp Manager は GRUB 2 のための構成ツールです。
  • GRUB のメイン・サイトには、GRUB Legacy と GRUB 2 の両方のためのドキュメントとダウンロードのリンクが豊富に用意されています。
  • 皆さんの目的に最適な方法で IBM 製品を評価してください。製品の試用版をダウンロードする方法、オンラインで製品を試す方法、クラウド環境で製品を使う方法、あるいは SOA Sandbox で数時間を費やし、サービス指向アーキテクチャーの効率的な実装方法を学ぶ方法などがあります。

議論するために

  • My developerWorks コミュニティーに加わってください。開発者向けのブログ、フォーラム、グループ、ウィキなど利用しながら、他の developerWorks ユーザーとやり取りしてください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=490036
ArticleTitle=GRUB 2 への移行
publish-date=04142010