BigAdmin System Administration Portal
特集記事: GRUB と Solaris 10 1/06 OS: x86 プラットフォーム用の新しいブートローダー
Print-friendly VersionPrint-friendly Version

GRUB と Solaris 10 1/06 OS: x86 プラットフォーム用の新しいブートローダー

執筆者: Shudong Zhou および Jan Setje-Eiler (2005 年 12 月)

この記事では、x86 プラットフォームの Solaris 10 1/06 オペレーティングシステムのブートアーキテクチャーだけでなく、ユーザーの経験についても説明します。 注: この記事の詳細事項の一部は、通知なく変更される場合があります。 サポートされるインタフェースについては、マニュアルページと Solaris OS 管理マニュアルを参照してください。

この記事で説明されている新しいブートローダーは、Solaris 10 1/06 OS の正式リリースの前に、OpenSolaris Project または Solaris Express program から入手できます。


1. ブートプロセスの概要

x86 ベースのシステムの電源投入時に、BIOS は、CPU、メモリー、およびプラットフォームハードウェアを初期化します。 初期化が完了すると、BIOS は構成済みのブートデバイスからブートストラップソフトウェア (つまりブートローダー) をロードし、制御をブートローダーに渡します。 Solaris 10 3/05 OS およびそれ以前のリリースは、Sun が開発したブートローダーを使用します。このブートローダーには、リアルモードドライバに基づく、対話型シェルとメニュー駆動型デバイス構成アシスタントが含まれます。

Solaris 10 1/06 リリースから、オープンソースの GRUB、つまり GNU GRand Unified Bootloader (参照 1 を参照) がブートローダーとして使用されます。 初期版は GRUB バージョン 0.95 に基づき、新しいバージョンが使用可能になった時点で更新される予定です。 Solaris カーネルは、Multiboot Specification (参照 2) に完全準拠であるため、Multiboot Specification を実装する任意のブートローダーを介して Solaris OS をブートすることができます。

GRUB への移行により、Solaris のお客様は次のような利点が得られます。

  • GRUB を使用すると、ブートメニューでカーネルおよびブートオプションを指定することが非常に容易になる。

  • エンドユーザーにとっては、USB DVD ドライブからのブートとインストールがサポートされることになります。

  • Solaris OS が同一マシン上でほかのオペレーティングシステムと共存することが、より容易になる。 特に、Solaris OS が Linux と同じ GRUB ブートローダーを共有することが可能である。

  • 特に DHCP サーバー設定で、ネットワーク経由の Solaris OS の配備も簡素化される。 DHCP サーバー設定ではベンダー固有のオプションが不要になる。

  • 開発者は、以前の Solaris リリースに必要だった、ブートローダーの一部のリアルモードドライバを 扱う必要がなくなった。

  • 独立系ハードウェアベンダーは、フロッピー以外にも CD/DVD を介してインストール時にドライバを供給することが可能になった。

つまり、オープンソースコミュニティーにより開発されたブートローダーを採用することで、Sun のお客様は、GRUB についてコミュニティー内で得られた多くの経験を活用できます。


2. GRUB を使用した Solaris OS のブート

GRUB が制御を取得すると、コンソール上にメニューを表示し、ブートする OS インスタンスを選択するようユーザーに求めます。 ユーザーは、メニュー項目を選択したり、内蔵エディタを使用してメニュー項目を変更したり、コマンドモードで手動により OS カーネルをロードしたりすることができます。 Solaris OS をブートするために、GRUB では、boot_archive ファイルと「マルチブート」プログラムをロードする必要があります。 boot_archive は、Solaris カーネルモジュールおよびデータが含まれる RAM ディスクイメージです。 GRUB は、このブートアーカイブに解釈を加えることなく、そのままメモリー内に配置します。 マルチブートプログラムは、Multiboot Specification 準拠のヘッダーを持つ ELF 実行可能形式です。 ロードが完了すると、GRUB は制御をマルチブートプログラムに渡します。 続いて GRUB 自体は非アクティブ状態になり、そのメモリーが解放されます。

マルチブートプログラムは、boot_archive を読み取り、(Multiboot Specification で指定されているように) ブート関連の情報をカーネルに渡すことにより、メモリー内でコアカーネルモジュールをアセンブルする役割があります。 マルチブートプログラムは boot_archive ファイルと連携することに注意してください。 異なるリリースまたは OS インスタンスから、マルチブートおよび boot_archive 情報を混合および一致させることはできません。

カーネルが制御を取得すると、CPU、メモリー、および入出力デバイスを初期化し、プロパティー fstype により指定されるファイルシステムタイプを使用して、bootpath プロパティーにより指定されるデバイス上に、ルートファイルシステムをマウントします。 プロパティーは、eeprom(1M) コマンドを介して /boot/solaris/bootenv.rc で設定したり、GRUB メニューまたはシェルを介して GRUB コマンド行で設定できます。 プロパティーが指定されていない場合、ルートファイルシステムのデフォルトは、インストール miniroot をブートする際に該当する /devices/ramdisk:a 上の UFS になります。


3. インストール

Solaris OS は、CD、DVD、およびネットインストールサーバーからインストールできます。 Solaris 10 1/06 リリースは、次の点において、Solaris 10 3/05 リリースとは異なります。

  • 最小メモリー要件: インストール miniroot をブートするためには、システムには 256M バイトのメインメモリーが必要です。 システムのメモリーが不十分な場合は、GRUB から「Selected item can not fit in memory」というメッセージが表示されます。

  • USB ドライブのサポート: USB インタフェースを介して接続された CD/DVD ドライブからのインストールが完全にサポートされています。

  • ネットインストール: ネットインストールイメージを設定するための標準的な手順は同じです。 クライアントは、Preboot eXecution Environment (PXE) メカニズムを介してブートすると想定されています。 PXE ブートの機能がないクライアントは、GRUB フロッピーを使用できます (付録 B を参照)。

インストール miniroot をブートする場合、GRUB メニューが表示されます。 ユーザーは対話形式でブートオプションを編集できます (節 4.2 を参照)。 GRUB が Solaris OS をロードしたあと、次のインストールメニューが表示されます。

  1. Solaris Interactive (default)
  2. Custom JumpStart
  3. Solaris Interactive Text (Desktop session)
  4. Solaris Interactive Text (Console session)
  5. Apply driver updates
  6. Single user shell

ユーザーにはおなじみの、Solaris 10 3/05 OS およびそれ以前からある、Device Configuration Assistant および関連する対話型シェルがなくなりました。 インストール時に必要なドライバ (ホストアダプタドライバなど) を追加したいユーザーは、オプション 5 を選択して ITU (Install Time Update) フロッピーまたは CD/DVD を挿入する必要があります。

オプション 6 はシステム回復に使用できます。 このオプションからは、システム識別を行うことなく、root プロンプトにすばやくアクセスできます。 このオプションは、Solaris フェイルセーフセッションをブートするのと同じです (節 4.4 を参照)。


4. ブートサブシステムの管理

4.1 BIOS

通常は、Solaris OS をインストールする前に、BIOS ファームウェアを最新リビジョンに更新することをお勧めします。 通常この操作を行うには、コンピュータの製造元であるベンダーのサポートページにアクセスします。

Solaris 10 3/05 リリースと比較すると、Solaris 10 1/06 OS は BIOS 機能の異なるサブセットを使用します。 特にカーネルは、Intel の ACPI CA ソフトウェアのパーサーを使用して、Advanced Configuration and Power Management Interface (ACPI) テーブルの情報をより多く利用します。

BIOS 2.0 仕様に準拠しないシステムでは、次に示すように、ACPI テーブルの解析に関連するメッセージが syslog に含まれている場合があります。

ACPI-0725: *** Warning:
Type override - [4s] had invalid type (DEB_[\200IODB

このようなメッセージは無害で、通常のシステム運用には影響しません。 ACPI エラーにより通常のシステムブートができない場合、次のように、ユーザーは GRUB メニューのカーネル行で acpi-user-options を 2 に設定することにより (eeprom(1M) を参照)、ACPI パーサーを無効にすることができます。

kernel .. -B ...,acpi-user-options=2

この場合システムは、キーボード、マウス、シリアルポート x 2、パラレルポートを含む標準的な ISA デバイスのセットが存在すると想定しています。

4.2 ブートオプション

Solaris OS をブートするため、ユーザーは、ロードするカーネル、カーネルに渡すオプション (kernel(1M) を参照)、およびプロパティーの名前と値のリストを指定して、システム動作をカスタマイズすることができます (eeprom(1M) を参照)。 Solaris のインストール時に、システムに対して一連のデフォルト値が選択され、/boot/solaris/bootenv.rc に格納されます。 ユーザーは、GRUB メニューを編集して、または eeprom(1M) コマンドを介して間接的に bootenv.rc ファイルを変更することにより、設定を変更できます。

eeprom を介してカーネル名とカーネルオプションを指定するには、boot-file プロパティーを設定する必要があります。 冗長モードで 32 ビットカーネルをブートするには、次のコマンドを実行します。

# eeprom boot-file="kernel/unix -v"

GRUB メニューで同じ内容を指定するには、GRUB メニューの kernel コマンドを、

kernel /platform/i86pc/multiboot

次のように変更します。

kernel /platform/i86pc/multiboot kernel/unix -v

Solaris カーネルが受け入れるそのほかのブート引数については、kernel(1M) を参照してください。

boot-file 以外のプロパティーは、次の構文を使用して、GRUB カーネルコマンド行で指定できます。

kernel /platform/i86pc/multiboot -B prop1=val1[,prop2=val2...]

ttya (com1) 上のシリアルコンソールを構成するには、次のように、console プロパティーを ttya に設定します。

kernel /platform/i86pc/multiboot -B console=ttya        

プロパティー値にコンマが含まれる場合、値を引用符で囲む必要があります。 次の GRUB コマンドは、高速モードで Solaris コンソールを ttya に設定します。

kernel /platform/i86pc/multiboot -B console=ttya,ttya-mode="115200,8,n,1,-"

要するに、GRUB メニューで "-B foo=bar" を指定することは、"eeprom foo=bar" を実行することと同じです。 GRUB における -B オプションの主な目的は、一時的な優先指定です。 永続的な設定は、Solaris アップグレードプロセスにより保持されるように、eeprom(1M) を介して指定する必要があります。

4.3 ブートアーカイブ

ブートアーカイブは、ファイル platform/i86pc/boot_archive を参照します。 これは、UFS または ISOFS のいずれかの形式で圧縮されたコアカーネルモジュールと構成ファイルの集合体です。 ブート時に、GRUB はブートアーカイブをシステムメモリーにロードします。 カーネルは、ルートデバイスへの入出力を実行することなく、ブートアーカイブ内のデータとテキストから自分自身を初期化できるようになりました。 カーネルが十分な入出力機能を取得すると、カーネルは、bootpath プロパティーにより指定される実際のルートデバイス上にルートファイルシステムをマウントします。 この時点で、GRUB によりロードされたブートアーカイブはメモリーから破棄されます。

ブートアーカイブの内容は /boot/solaris/filelist.ramdisk で指定されています。 システムの停止時に、システムはルートファイルシステムに対する更新をチェックし、必要に応じてブートアーカイブを更新します。 システムは、bootadm(1M) コマンドを実行することにより、システム停止の前にブートアーカイブを手動で更新する場合があります。

4.4 フェイルセーフメニューエントリ

Solaris 10 1/06 OS の新しいファイルとして、ブート可能なスタンドアロン Solaris イメージを含む、/boot/x86.miniroot-safe ファイルがあります。 GRUB メニューから Solaris failsafe エントリを選択することにより、このファイルをロードできます。 これは、通常のエントリがブートに失敗した場合の、システム管理者に対する利便性のために用意されています。

障害のあるドライバを含む新しいパッケージを追加し、ブート時にシステムがパニック状態になったとします。 リブート時に、ユーザーは Solaris フェイルセーフメニューエントリを選択できます。 フェイルセーフセッション中に、/a 上にルートファイルシステムをマウントし、pkgrm -R を実行して障害のあるパッケージを削除します。 この処理が完了すれば、通常の Solaris エントリをリブートし、システム運用を再開できます。

また、ファイル /boot/x86.miniroot-safe は、復旧ツールとして、USB スティックなどのポータブルメディアにコピーすることもできます。

4.5 システムのブート可能状態の維持

システムがブート可能であることを確保するには、GRUB ブートブロック、GRUB メニュー、およびブートアーカイブが最新である必要があります。

GRUB ブートブロックは Solaris パーティション内に存在します。 ブートブロックが破損した場合は、installgrub(1M) コマンドを使用して再インストールする必要があります。 installboot(1M) および fmthard(1M) を使用して GRUB ブートブロックを書き込むことはできないことに注意してください。

GRUB メニューは /boot/grub/menu.lst 内に存在します (あるいは、Solaris ブートパーティションが使用されている場合は /stubboot/boot/grub/menu.lst 内に存在します)。 メニューは、bootadm(1M) update-menu サブコマンドを使用して維持されます。 GRUB は BIOS ディスク番号によりディスクに名前を付けるため、BIOS ブートデバイス構成を変更すると、場合によっては GRUB メニューエントリが無効になります。 このような場合、bootadm update-menu を実行すると、正しいメニューエントリが作成されます。

ブートアーカイブは、ルートファイルシステムの変更時に更新される必要があります。 カーネルファイルの更新直後にシステム障害 (電源障害やカーネルパニック) が発生した場合、ブートアーカイブはルートファイルシステムと同期がとれなくなる場合があります。 このような場合、Solaris Service Manager を介して管理される system/boot-archive サービス (例は svcadm(1M) を参照) には、次のリブート時に障害が発生します。 Solaris は、ブートすることと、エラーのトリガーとなったイベントをクリアすることが依然として可能であることをユーザーに通知するメッセージを出力しますが、システムをリブートし、フェイルセーフセッションを選択し、フェイルセーフセッション中にブートアーカイブを更新する方が安全です。


5. マルチブートの設定

ブート可能パーティションがほかに存在する場合、Solaris インストールプログラムはそれらに対する GRUB エントリを追加しようとします。 この記事の執筆時点では、Microsoft Windows パーティションと診断パーティションが認識されます。 ユーザーは、GRUB メニューを直接編集することにより、ほかのオペレーティングシステムを追加できます。

次のように、Solaris OS、Linux、および Windows が同一ディスク上にレイアウトされているシステムがあるとします。

        fdisk partition 0:      Windows
        fdisk partition 1:      Linux
        fdisk partition 2:
                slice 0         Solaris 9
                slice 3         Solaris 10 1/06

GRUB メニューは次のようになります。

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris 10 1/06
        root (hd0,2,d)
        kernel /platform/i86pc/multiboot
        module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
title Solaris 9
        root (hd0,2,a)
        chainloader +1
        makeactive
title Linux
        root (hd0,1)
        kernel <from Linux's GRUB menu...>
        initrd <from Linux's GRUB menu...>
title Windows
        root (hd0,0)
        chainloader +1

Solaris fdisk partition がアクティブなパーティションである必要があることに注意してください。 "makeactive" は、Windows メニューの下には配置しないでください。 Windows メニューの下に配置すると、システムは常に Windows をブートします。

Sun 以外のソースから取得された GRUB は、現時点では、Solaris on-disk VTOC および UFS 形式を認識しません。 Sun はこれをサポートするため GRUB プロジェクトに変更内容を提出しています。これらが統合されるまで、Solaris GRUB のみが正常に動作します。 Linux がマスターブートブロック上に GRUB をインストールした場合、Solaris パーティションをアクティブなパーティションにしても、Solaris OS を起動することはできません。 この場合、Linux 上でメニューを変更することにより、Linux GRUB からチェーンロードすることができます。 または、上記の例では、次のように installgrub(1M) コマンドを使用することで、マスターブートセクターを Solaris GRUB に置き換えることができます。

installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t2d0s3

Solaris VTOC および UFS 実装が標準 GRUB リリースに反映されるまでは、Solaris バージョンの GRUB のみが正常に動作します。


6. ネットブートおよびディスクレスクライアント

ネットワークからブートするには、通常、PXE クライアント用に構成された DHCP サーバーと、TFTP サービスを提供するブートサーバーが必要です。 PXE/DHCP サーバーが使用できない (または BIOS に PXE コードが含まれていない) 場合、フロッピー、CD-ROM、またはローカルディスクから GRUB をロードし、GRUB メニューでネットワークを手動で構成し、ファイルサーバーから Solaris OS をブートすることが可能です。 詳細については、付録 B を参照してください。

DHCP サーバーの設定はサイト固有の作業で、ローカルネットワークの管理者が担当します。 Sun BluePrints ドキュメント『Configuring JumpStart Servers to Provision Sun x86-64 Systems』(http://www.sun.com/blueprints/0205/819-1692.pdf) を参照してください。

Solaris OS をブートするには、DHCP サーバーはファイルサーバーの IP アドレスとブートファイル (pxegrub) の名前を使用して BIOS PXE 要求に応答する必要があります。 ブートサーバーは、pxegrub バイナリ、GRUB メニュー、マルチブートプログラム、およびブートアーカイブを提供する役割があります。 ブートサーバーを設定するために、標準的なツールが用意されています。

6.1 ネットインストールサーバー

add_install_client(1M) コマンドは、インストールクライアントのネットインストールを設定するために使用されます。 Solaris 10 1/06 およびそれ以降のリリースでは、ネットワークのブートストラップに GRUB フロッピーが使用される場合であっても、add_install_client(1M) は常に、PXE/DHCP ブート用の -d オプションを付けて呼び出される必要があります。

add_install_client を実行したあとは、/tftpboot/01<eth_addr> が、GRUB メニューエントリを含む pxegrub および /tftpboot/menu.lst.01<eth_addr> へのリンクとして表示されるはずです。 <eth_addr> は、クライアントネットワークインタフェースの Ethernet アドレス (大文字) です。 また、tftp を介して multibootx86.miniroot にアクセスできるようにするために、ネットイメージの /boot ディレクトリは /tftpboot の下にループバックマウントされます。

6.2. ディスクレスクライアント

smdiskless(1M) コマンドは、ディスクレスクライアントの設定に使用されます。 以前のリリースでは、smdiskless(1M)root および usr ファイルシステムを設定し、NFS 経由でクライアントへのエクスポートを行います。 ただし、クライアントをブートするには、ユーザーは手動で /tftpboot 領域を構成する必要があります。 この手動による手順は、Solaris 10 1/06 OS では削除されています。 smdiskless(1M) コマンドが自動的に /usr/sadm/lib/wbem/config_tftp のスクリプトを起動し、PXE ブート用の /tftpboot 領域を設定します。

smdiskless を実行したあとは、/tftpboot/01<eth_addr> が、GRUB メニューエントリを含む pxegrub および /tftpboot/menu.lst.01<eth_addr> へのリンクとして表示されるはずです。 <eth_addr> は、クライアントネットワークインタフェースの Ethernet アドレス (大文字) です。 また、tftp を介してクライアントのマルチブートおよびブートアーカイブにアクセスできるようにするため、/export/root/<hostname>/boot/tftpboot の下にループバックマウントされます。

ディスクレスクライアントのブートアーカイブは、クライアントの停止時に自動的に更新されます。 クライアントのダウン時にクライアントのブートアーカイブが最新ではない場合、次の形式を使用して、サーバー側からアーカイブを更新できます。

# bootadm update-archive -R /export/root/<hostname>

これは SPARC と x86 両方のプラットフォームベースのサーバーで動作し、x86 クライアントにサービスを提供します。


7. レガシー問題

7.1 Solaris x86 ブートパーティション

x86 システムの場合、Solaris ブートパーティションは非常に小さな (約 10M バイト)、PCFS (FAT) 形式のプライマリ fdisk パーティションです。 このパーティションは Solaris 2.6 リリースで導入されましたが、これは、その時点の BIOS ファームウェアは 1024 シリンダを超えるディスクブロックにアクセスできなかったことが主な理由です。 ディスクの先頭付近の小さな領域には、ブートコードを配置する必要がありました。 ブートパーティションにより、ブートディスク上にある最低限の容量の要件を備えた非ブートディスク上に、Solaris OS をインストールすることが可能でした。

最近のシステムでは、ブートパーティションの必要性はなくなりました。 Solaris 10 1/06 OS 以降から、ユーザーにはブートパーティションを作成するオプションがありません。 古いリリースからアップグレードする場合、手動による介入なしでシステムをブート可能にするため、既存の x86 ブートパーティションが保持される場合があります。 このような場合、x86 ブートパーティションは /stubboot にマウントされ、GRUB ブートブロックとメニューファイル /stubboot/boot/grub/menu.lst を含みます。 ユーザーは、/etc/vfstab から /stubboot エントリを削除し、/boot/grub/menu.lst を修復し、Solaris ディスクパーティションからブートするよう BIOS を再構成することにより、x86 ブートパーティションを除去することができます。

7.2 リアルモードドライバ

Solaris 10 1/06 OS より前は、ブートプロセスの一部としてリアルモードドライバが実行されていました。 ハードウェアを特定の状態にするために、一部の既存のカーネルドライバが、対応するリアルモードドライバに暗黙的に依存することは可能です。 リアルモードドライバは GRUB ベースのブートの一部ではなくなったため、このようなカーネルドライバは正しく動作しない場合があります。 カーネルドライバが正しく動作しない場合、カーネルドライバが修正されるよう、問題をドライバのベンダーに報告してください。


付録 A. GRUB の基本事項

この付録では、GRUB の基本的な概念を説明します。 この付録の詳細事項の一部は、通知なく変更される場合があります。 詳細については、GRUB のマニュアルを参照してください。

A.1 デバイスの命名

ブートローダーの主な目的は、ストレージデバイスからシステムメモリーにデータをロードすることです。 GRUB を使用して作業するためには、GRUB がデバイスをどのように命名するかを理解する必要があります。

フロッピーディスクは次のように命名されます。

(fd0) -- first, second floppy

GRUB は、1 つのネットワークインタフェースのみを参照できます。

(nd) -- network interface

そしてこれはほとんどの場合、DHCP を介して BIOS が検索および構成するインタフェースです。 また、フロッピーまたはそのほかのローカルメディアから GRUB をブートすることにより、ネットワークインタフェースを構成することも可能です (付録 B を参照)。

ハードディスクの名前は hd と番号から始まり、番号 0 が BIOS ディスク 0x80 (BIOS により列挙された最初のディスク) に対応し、1 が 0x81 に対応し、以下同様となります。

(hd0) -- first bios disk (also the BIOS boot disk 0x81)
(hd1) -- second bios disk (BIOS disk 0x81)
(hd0,1) -- first bios disk, second primary partition
(hd0,0,a) -- first bios disk, first fdisk partition, Solaris/BSD slice 0 and 1

BIOS ディスクの番号付けは、BIOS 構成が変更されると、変更される場合があることに注意してください。 そのため、ユーザーが BIOS ブートディスクの順序を変更したり、ディスク構成を変更したりすると、GRUB メニューが無効になる場合があります。 BIOS におけるディスクの再番号付けに関連するブートの問題を扱うには、ディスクの命名規則を認識することが非常に重要です。

A.2 機能コンポーネント

GRUB の機能コンポーネントには stage1stage2、および menu.lst が含まれます。 stage1 は Solaris fdisk パーティションの最初のセクターにインストールされ、またオプションでマスターブートセクターにインストールできます。 stage2 は Solaris パーティションの予約領域にインストールされます。 menu.lst の位置は /boot/grub で、GRUB stage2 により読み取られます。

stage2 がディスク上のどの位置に存在するかを stage1 に通知する必要があるため、dd(1M) を使用して stage1 および stage2 をディスクに書き込むことはできない点に注意してください。 installgrub(1M) コマンドは、GRUB ブートブロックをインストールするためにサポートされる手段です。

GRUB シェルは /boot/grub/bin/grub に存在しますが、まだサポートされていません。また、BIOS 呼び出しにおけるオペレーティングシステムの制限により、コマンドの一部は Solaris OS では機能しません。

A.3 GRUB メニュー

デフォルトのメニューファイルは /boot/grub/menu.lst です。 menu.lst に対する手動による編集は、次のリブート時に有効になります。 典型的な GRUB メニューは次のようになります。

default 0
timeout 10
serial --unit=0 --speed=9600
terminal serial
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris
  root (hd0,0,a)
  kernel /platform/i86pc/multiboot -B console=ttya
  module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
  root (hd0,0,a)
  kernel /boot/multiboot -B console=ttya -s
  module /boot/x86.miniroot.safe
#---------------------END BOOTADM--------------------

"default" 行は、タイマーが時間切れになった場合にブートする項目を指定します。 "timeout" 行は、デフォルトエントリをブートする前にユーザーの入力を待機する秒数を指定します。 timeout-1 である場合、ユーザーの入力は必須になります。 serial コマンドと terminal コマンドは、共同で、「serial --unit tip」行で指定されているシリアルポートに GRUB 出力を切り替えます。 root コマンドは、どのディスク、パーティション、およびスライスからファイルをロードするかを指定します。 GRUB は自動的にファイルシステムタイプを検出します。 kernel コマンドのあとにはマルチブートプログラムが続く必要があります。 「multiboot」のあとの文字列が、解釈されることなく、Solaris OS に渡されます。

明示的に 64 ビットカーネルを指定するには、GRUB カーネルコマンドを次のように変更します。

kernel /platform/i86pc/multiboot kernel/amd64/unix

同様に、次のコマンドは 32 ビットカーネルをブートします。

kernel /platform/i86pc/multiboot kernel/unix

A.4 GRUB コマンドモード

GRUB プロンプトでコマンドを入力することで、OS をブートすることができます。 GRUB プロンプトに入るには、GRUB メニューで C キーを押します。 「help」と入力すると、使用可能なコマンドのリストが表示されます。 Esc キーを押すとメニューに戻ります。 また、E キーを押すと既存のメニュー項目を編集できます。 編集が完了したら、B キーを押して、変更された GRUB エントリを使用してシステムをブートします。


付録 B. ネットワーク配備

この付録では、ネットワーク経由で x86 プラットフォームに Solaris OS を配備するベストプラクティスについて説明します。 この付録の詳細事項の一部は、通知なく変更される場合があります。 サポートされるインタフェースのマニュアルページと Solaris 管理マニュアルを参照してください。

B.1 Solaris ネットワーク配備の概要

ネットワーク経由で Solaris OS を配備するには、集中管理される場所に Solaris OS のイメージを配置します。 ネットワークに接続された任意のマシンは、管理者がほとんどあるいはまったく関与することなく、選択したリリースをブートおよびインストールできます。 Solaris JumpStart ソフトウェアを介して、インストールプロセスを自動で行うこともできます。

ネットワークからブートするには、通常、PXE クライアント用に構成された DHCP サーバーと、tftp サービスを提供するファイルサーバーが必要です。 DHCP サーバーには、クライアントがネットワークインタフェースを構成するために必要な情報を供給する役割があります。 また DHCP 応答には、ファイルサーバーの IP アドレスとブートファイル名 (pxegrub) が含まれます。 ファイルサーバーには、pxegrub バイナリ、GRUB メニュー、マルチブートプログラム、およびブートアーカイブを提供する役割があります。 デフォルトでは、GRUB メニューファイルは menu.lst.01<eth_addr> です。 このファイルが存在しない場合、pxegrub は DHCP オプション 150 (指定されている場合) または /tftpboot/boot/grub/menu.lst に代替されます。

PXE を使用した Solaris OS のブートは次のように機能します。

  1. ユーザーはネットワークインタフェースからブートするよう BIOS を構成する。
  2. BIOS は DHCP 要求を送信する。
  3. DHCP サーバーはサーバーアドレスとブートファイル名を使用して応答する。
  4. BIOS は tftp を介してサーバーから pxegrub をダウンロードし、pxegrub を実行する。
  5. システムは tftp を介して GRUB メニューファイルをダウンロードし、メニューエントリを表示する。
  6. ユーザーがメニューエントリを選択し、Solaris OS のロードを開始する。

典型的な配備シナリオでは、pxegrub がマルチブートプログラムと x86.miniroot ファイルをダウンロードし、このファイルはメモリー内 miniroot に展開されます。 miniroot が動作するようになれば、miniroot は (GRUB メニューの install_media プロパティーで指定されている) Solaris イメージを /cdrom にマウントし、インストールプロセスが始まります。

以降の節では、DHCP サーバーの設定、クライアントの要件、およびいくつかのさまざまな配備シナリオを詳しく説明します。

B.2 DHCP サービス

クライアントが DHCP 要求を送信すると、サーバーには、クライアントの ID (通常は Ethernet アドレス)、要求の「クラス」、およびクライアントが存在するサブネットが通知されます。 Solaris DHCP サーバーは、クライアント要求に一致する応答ベースのマクロを形成します。

  • クラスマクロ

  • ネットワークマクロ

  • IP マクロ

  • クライアントマクロ

クラスマクロは、DHCP 要求に埋め込まれている「クラス文字列」により命名されます。 x86 プラットフォームでは、BIOS は常にクラス PXEClient:Arch:00000:UNDI:002001 を使用して DHCP 要求を行います。 この名前のマクロが DHCP サーバー構成で定義されている場合、マクロの内容が節 B.1 の手順 (c) で x86 クライアントに送信されます。

ネットワークマクロは、サブネットの IP アドレスにより命名されます。 マクロ 129.146.87.0 が DHCP サーバー上で定義されている場合、要求のクラスに関係なく、マクロの内容はそのサブネット上のすべてのクライアントに送信されます。 クラスマクロとネットワークマクロの両方でオプションが定義されている場合、ネットワークマクロが優先されます。

IP マクロは IP アドレスにより命名されます。 これは x86 プラットフォームでの Solaris OS のブートのコンテキストではほとんど使用されません。

クライアントマクロは、大文字で、クライアントのタイプ (ether の場合は 01) および MAC アドレスにより命名されます。 Ethernet アドレス 0:0:39:fc:f2:ef を持つクライアントの場合、対応するマクロ名は 01000039FCF2EF です。

サブネット 129.146.87.0 に、Ethernet アドレス 0:0:39:fc:f2:ef を持ち、クラス PXEClient の DHCP 要求を行うクライアントがあるとします。

DHCP サーバーには一致する次のマクロがあります。

- PXEClient
BootSrvA:  129.146.87.194
BootFile:  pxegrub
- 129.146.87.0
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com
- 01000039FCF2EF
BootFile:  01000039FCF2EF

実際の DHCP 応答は次のようになります。

BootSrvA:  129.146.87.194
BootFile:  01000039FCF2EF
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com

クライアントマクロの BootFile が、クラスマクロの BootFile よりも優先されることに注意してください。

B.3. もっとも単純なネットブート設定

最低限、1 台のサーバーと 1 台のクライアントが必要です。 サーバーには、稼働中の DHCP サーバーと使用可能な Solaris ディストリビューションイメージが必要です。 クライアントマシンは、PXE ブート要求をサポートできるサーバーと同じサブネットに接続します。 次にサーバー設定の手順を示します。サーバーの IP アドレスは 192.168.0.123 で、クライアントの Ethernet アドレスは 0:0:39:fc:f2:ef であると仮定されています。

a. Solaris ディストリビューションイメージの Tools ディレクトリに移動し、次のように実行します。

# add_install_client -d -e 0:0:39:fc:f2:ef i86pc

b. 次のように、DHCP サービス用のクライアントマクロ名 01000039FCF2EF を作成します。

BootSrvA:  192.168.0.123
BootFile:  01000039FCF2EF

この操作は、dhcpmgr GUI から、またはコマンド行インタフェースから実行できます。

これでクライアントをブートし、Solaris OS をインストールすることができます。

B.4. PXE/DHCP を使用しないネットインストール

フロッピー、CD-ROM、またはローカルディスクから GRUB をロードし、GRUB で手動によりネットワークを構成し、ファイルサーバーから multibootboot_archive をダウンロードすることができます。 次のようないくつかの理由により、この作業が必要になる場合があります。

  • クライアントの BIOS が PXE をサポートしていない。
  • ネットワークカードに UNDI ROM がない。
  • ネットワーク上に DHCP サービスがない。
  • BIOS でブートデバイスの順序を再構成することなく、インストール/リブートのシーケンスを自動化することができます。

Solaris OS を使用してインストールされた標準的な GRUB stage2 には、ネットブートのサポートが含まれます。 GRUB メニューで C キーを押すことにより、この機能を使用し、コマンドモードに入ることができます。 実用的な例を次に示します。

grub> ifconfig --address=192.168.0.02 --gateway=192.168.0.1 
   --mask=255.255.255.0 --server=192.168.123.110
grub> root (nd)
grub> kernel /multiboot.I86PC.Solaris_10-1 kernel/unix -B
   install_media=192.168.123.110:/export/setje/boot_74L2
grub> module /x86.miniroot
grub> boot

当然ながら、使用するローカルネットワーク環境に適した値を使用して ifconfig コマンドを指定する必要があります。 また、上記のコマンドを持つメニューエントリを、ディスクまたはフロッピー上の menu.lst ファイルに追加することもできます。

フロッピー上の /boot/grub/menu.lst は、使用する前に必ず編集してください。 ネットワークカードに UNDI ROM が搭載されている場合、単に UNDI ベースのフロッピーイメージを選択します。 それ以外の場合は、一致する Solaris ドライバ名 (bgee1000g など) を持つフロッピーイメージを選択する必要があります。 特別な GRUB stage2 があり、独自のフロッピーを作成する場合、手順は次のとおりです。

<format floppy>
# mount -F pcfs /dev/diskette /mnt (you may have to disable vold prior to doing this)
# cd /boot/grub
# /sbin/installgrub stage1 stage2 /dev/rdiskette
stage1 written to boot sector on floppy
first 2 sectors of stage2 written on floppy

/mnt/boot/grub/menu.lst を編集して、次のエントリを含めます。

title Solaris
  ifconfig --address=192.168.0.2 --gateway=192.168.0.1 
     --mask=255.255.255.0 --server=192.168.123.110
  root (nd)
  kernel /multiboot.I86PC.Solaris_11-1 kernel/unix -B
     install_media=192.168.123.110:/export/setje/boot_74L2
  module /x86.miniroot

B.5. 複数の Solaris イメージの管理

複数の Solaris イメージが存在する場合、各クライアントに対してどのリリースまたはビルドをインストールするかを選択する手段が必要です。 これには、次のようにいくつかの可能な手段があります。

  1. DHCP サーバーを変わらないよう維持し、ブートサーバー上で add_install_client を実行する。
  2. ブートサーバーを変わらないよう維持し、リリース/ビルドを選択するよう (Web インタフェースを介して) DHCP クライアントマクロを変更する。
  3. ブートサーバーと DHCP サーバーの両方を変わらないよう維持し、またクライアントが GRUB メニューからリリース/ビルドを選択する。

ケース (a) は、ブートサーバーを管理する標準的な手段です。 ネットワーク管理者は、各クライアントに対して DHCP サービスを一度だけ設定します。 そのあと、クライアントユーザーはブートサーバーにログインし、add_install_client を実行します。 Solaris 10 FCS クライアントに対して動作中の DHCP 設定がある場合、同じ設定は pxegrub ベースのブートで動作します。

ケース (b) では、DHCP オプション 150 を使用して GRUB メニューファイルを供給する必要があります。 ユーザーがクライアント用のリリース/ビルドを選択した時点で、オプション 150 を、選択されたリリース/ビルドを含むメニューファイルに設定するよう DHCP 構成が変更されます。 各リリース/ビルド用のメニューファイルは、ブートサーバー上で先に作成される必要があることに注意してください。 選択されたリリース/ビルドがブートに pxegrub を使用しない場合、古い Solaris 設定が構成されます。

ケース (c) は、pxegrub に基づくリリースまたはビルドに対してのみ有効です。 サーバー側で新しいイメージが追加された時点で、メニューエントリが追加されます。 クライアントがブートした時点で、その新しいメニューエントリは選択に使用できるようになります。 残念ながら、pxegrub は、(nbp と呼ばれる) 古い Solaris ネットブートプログラムを「チェーンロード」することができません。 クライアントの選択が nbppxegrub にまたがって有効になるようにするために、nbp または pxegrub のいずれかをロードできるサーバー上で pxelinux を構成することができます。 pxelinux の詳細な説明は、この記事の範囲を超えています。

B.6. 自動配備のシーケンス

多くの場合、自動配備は次のシーケンスを実行します。

  • ネットブートを実行し、Solaris JumpStart ソフトウェアを介してディスク上に Solaris OS をインストールする。
  • ディスク上の OS をリブートし、事前構成済みのタスクのセットを実行する。

配備の最後で、マシンはアイドル状態になり、ユーザーの操作を待機します。

多くの場合、最初のネットブートは F12 (またはプラットフォームに応じたほかのキーシーケンス) を押すことで手動で開始できます。 ただし、一部のシステムは BIOS シリアルコンソールの切り替えをサポート していませんし、また物理コンソールにユーザーが常駐するよう要求することは現実的ではありません。 また、BIOS の中にはネットブートを要求するための期間が非常に短く、ネットブートが操作しづらくなるものもあります。 1 つの回避策として、フロッピーからネットワークブートし、フロッピーを書き換えてディスクをブートする方法があります。 新しいプラットフォームにはフロッピードライブが付属していないため、この方法はもはや実用的ではありません。

Sun は、ディスクから GRUB をロードすることをお勧めします。 JumpStart 用にネットワークブートをするよう、次のメニューエントリを /boot/grub/menu.lst に追加し、このコマンドを介してそれをデフォルトのブートエントリにします。

 # bootadm set-menu default=<menu_entry_number>

上記の <menu_entry_number> は、次のように追加するオプションのメニュー項目 (0 から始まる番号) です。

title Solaris Jumpstart
        dhcp
        root (nd)
        kernel .../multiboot kernel/unix - install -B console=...
        module ../x86.miniroot

システムがインストールされると、デフォルトの boot =. エントリは自動的に変更され、ディスクからブートするようになります。 このように、電源の再投入によって配備シーケンス全体を開始することができます。

B.7. 障害追跡

さて、正しく動作しない場合は、どのような問題が発生するでしょうか。 障害追跡のためのヒントを次に示します。

a. ネットブートを試みることなく、クライアントが直接ディスクでブートする。

この状態は、通常、クライアント PXE ROM が無効であるか、ネットワークよりも前にディスクからブートするよう BIOS が構成されていることを意味します。 修正方法としては、BIOS にアクセスし、構成を変更します。 詳細はマシンごとに異なります。

b. クライアントがネットブートを試みるが、応答がない。

ネットワークケーブル、(存在する場合は) インタフェースカード上の LED ライトなどについて、通常のチェックを実行します。 次のようにサーバー上で snoop を実行します。

# snoop -v [-d <interface>] 0:0:39:fc:f2:ef

上記の <interface>bge0 のような形式です。 -d オプションが必要であるのは、サーバーに複数のネットワークインタフェースカードがある場合のみです。 次のように表示されます。

  • DHCPDISCOVER (client -> server)
  • DHCPOFFER (server -> client)
  • DHCPREQUEST (client -> server)
  • DHCPACK (server -> client)

DHCPDISCOVER メッセージが表示されない場合、通常はケーブルやインタフェースカードの不良により、クライアントが送信を行なっていません。

DHCPDISCOVER パケットが確認されていても、DHCPOFFER メッセージが表示されない場合は、サーバーが応答していないことを意味します。 DHCPDISCOVER メッセージを調べ、Ethernet アドレスが DHCP サーバー内のマクロ名と一致することを確認します。 サーバーがクラスマクロを使用する場合は、クラス文字列が一致することを確認します。 BIOS DHCP 要求のクラス文字列は、常に次の形式です。

PXEClient:Arch:00000:UNDI:002001

c. クライアントが TFTP タイムアウトメッセージを表示する。

これは、tftp サービスが正しく設定されていない場合に生じる可能性があります。 サーバーをチェックし、tftp が有効である (in.tftpd が実行中である) ことと、ファイル /tftpboot/01000039FCF2EF が存在し、このファイルが pxegrub バイナリにリンクされていることを確認します。 add_install_client ステップは、tftp ファイルと tftp サービスの両方を設定すると想定されています。

d. クライアントが x86.miniroot のダウンロード中にハングする。

TFTP プロトコルは 65K までのブロックを転送できます。 一部の tftp サーバー (Solaris 8 OS を実行するサーバーなど) は小ブロックサイズ (512) のみをサポートしているため、結果的に最大ファイルサイズが 32M バイトになり、これは x86.miniroot のサイズ (約 45M バイト) を下回ります。 tftp サーバーをアップグレードすれば問題が解決します。

サーバーが Solaris 8 OS を実行している場合は、Solaris 8 OS 用の TFTP パッチが入手可能になるまで、Solaris 9 OS から /usr/sbin/in.tftpd をコピーする方法があります。

e. クライアントが x86.miniroot のダウンロードを完了してからハングする。

通常は、コンソール出力がどこか別の場所に移動しています。 GRUB メニュー行で console 変数が正しく設定されていることを確認します。 input-device/output-device を設定することによっても正しく動作します。 節 4.2 を参照してください。

f. クライアントが「No ethernet card found」というメッセージを表示する。

これは、ローカルメディアから GRUB をブートし、ネットワークから Solaris OS をロードする際に生じる場合があります。 このメッセージは、GRUB が PCI BIOS32 サービスを使用してもネットワークインタフェースが見つからないことを示します。

g. クライアントが「No PnPBios found」というメッセージを表示する。

これは、ローカルメディアから GRUB をブートし、ネットワークから Solaris OS をロードする際に生じる場合があります。 この場合、GRUB はネットワークインタフェースを特定しましたが、PnP Bios サービスを特定してネットワークインタフェースカードから UNDI ROM をインストールすることに失敗しています。


参照
  1. GNU GRUB の Web ページ (http://www.gnu.org/software/grub/grub.html)
  2. GNU サイトの Multiboot Specification の Web ページ (http://www.gnu.org/software/grub/manual/multiboot/multiboot.html)
  3. 『FAQ for GRUB and the Solaris 10 1/06 OS: The New Bootloader for x86 Platforms』 (http://www.sun.com/bigadmin/features/articles/grub_boot_faq.html)

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub