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 のお客様は次のような利点が得られます。
つまり、オープンソースコミュニティーにより開発されたブートローダーを採用することで、Sun のお客様は、GRUB についてコミュニティー内で得られた多くの経験を活用できます。 2. GRUB を使用した Solaris OS のブートGRUB が制御を取得すると、コンソール上にメニューを表示し、ブートする OS インスタンスを選択するようユーザーに求めます。 ユーザーは、メニュー項目を選択したり、内蔵エディタを使用してメニュー項目を変更したり、コマンドモードで手動により OS カーネルをロードしたりすることができます。 Solaris OS をブートするために、GRUB では、 マルチブートプログラムは、 カーネルが制御を取得すると、CPU、メモリー、および入出力デバイスを初期化し、プロパティー 3. インストールSolaris OS は、CD、DVD、およびネットインストールサーバーからインストールできます。 Solaris 10 1/06 リリースは、次の点において、Solaris 10 3/05 リリースとは異なります。
インストール miniroot をブートする場合、GRUB メニューが表示されます。 ユーザーは対話形式でブートオプションを編集できます (節 4.2 を参照)。 GRUB が Solaris OS をロードしたあと、次のインストールメニューが表示されます。
ユーザーにはおなじみの、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 メニューのカーネル行で kernel .. -B ...,acpi-user-options=2 この場合システムは、キーボード、マウス、シリアルポート x 2、パラレルポートを含む標準的な ISA デバイスのセットが存在すると想定しています。 4.2 ブートオプション Solaris OS をブートするため、ユーザーは、ロードするカーネル、カーネルに渡すオプション (
# eeprom boot-file="kernel/unix -v"
GRUB メニューで同じ内容を指定するには、GRUB メニューの kernel /platform/i86pc/multiboot 次のように変更します。 kernel /platform/i86pc/multiboot kernel/unix -v
Solaris カーネルが受け入れるそのほかのブート引数については、
kernel /platform/i86pc/multiboot -B prop1=val1[,prop2=val2...]
kernel /platform/i86pc/multiboot -B console=ttya
プロパティー値にコンマが含まれる場合、値を引用符で囲む必要があります。 次の GRUB コマンドは、高速モードで Solaris コンソールを kernel /platform/i86pc/multiboot -B console=ttya,ttya-mode="115200,8,n,1,-"
要するに、GRUB メニューで 4.3 ブートアーカイブ ブートアーカイブは、ファイル ブートアーカイブの内容は 4.4 フェイルセーフメニューエントリ Solaris 10 1/06 OS の新しいファイルとして、ブート可能なスタンドアロン Solaris イメージを含む、 障害のあるドライバを含む新しいパッケージを追加し、ブート時にシステムがパニック状態になったとします。 リブート時に、ユーザーは Solaris フェイルセーフメニューエントリを選択できます。 フェイルセーフセッション中に、 また、ファイル 4.5 システムのブート可能状態の維持 システムがブート可能であることを確保するには、GRUB ブートブロック、GRUB メニュー、およびブートアーカイブが最新である必要があります。 GRUB ブートブロックは Solaris パーティション内に存在します。 ブートブロックが破損した場合は、 GRUB メニューは ブートアーカイブは、ルートファイルシステムの変更時に更新される必要があります。 カーネルファイルの更新直後にシステム障害 (電源障害やカーネルパニック) が発生した場合、ブートアーカイブはルートファイルシステムと同期がとれなくなる場合があります。 このような場合、Solaris Service Manager を介して管理される 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/06GRUB メニューは次のようになります。 #---------- 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 Sun 以外のソースから取得された GRUB は、現時点では、Solaris on-disk VTOC および UFS 形式を認識しません。 Sun はこれをサポートするため GRUB プロジェクトに変更内容を提出しています。これらが統合されるまで、Solaris GRUB のみが正常に動作します。 Linux がマスターブートブロック上に GRUB をインストールした場合、Solaris パーティションをアクティブなパーティションにしても、Solaris OS を起動することはできません。 この場合、Linux 上でメニューを変更することにより、Linux 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 アドレスとブートファイル ( 6.1 ネットインストールサーバー
6.2. ディスクレスクライアント
ディスクレスクライアントのブートアーカイブは、クライアントの停止時に自動的に更新されます。 クライアントのダウン時にクライアントのブートアーカイブが最新ではない場合、次の形式を使用して、サーバー側からアーカイブを更新できます。 # bootadm update-archive -R /export/root/<hostname> これは SPARC と x86 両方のプラットフォームベースのサーバーで動作し、x86 クライアントにサービスを提供します。 7. レガシー問題7.1 Solaris x86 ブートパーティション x86 システムの場合、Solaris ブートパーティションは非常に小さな (約 10M バイト)、PCFS (FAT) 形式のプライマリ 最近のシステムでは、ブートパーティションの必要性はなくなりました。 Solaris 10 1/06 OS 以降から、ユーザーにはブートパーティションを作成するオプションがありません。 古いリリースからアップグレードする場合、手動による介入なしでシステムをブート可能にするため、既存の x86 ブートパーティションが保持される場合があります。 このような場合、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 を参照)。 ハードディスクの名前は (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 の機能コンポーネントには
GRUB シェルは A.3 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--------------------
明示的に 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 サーバーと、 PXE を使用した Solaris OS のブートは次のように機能します。
典型的な配備シナリオでは、 以降の節では、DHCP サーバーの設定、クライアントの要件、およびいくつかのさまざまな配備シナリオを詳しく説明します。 B.2 DHCP サービス クライアントが DHCP 要求を送信すると、サーバーには、クライアントの ID (通常は Ethernet アドレス)、要求の「クラス」、およびクライアントが存在するサブネットが通知されます。 Solaris DHCP サーバーは、クライアント要求に一致する応答ベースのマクロを形成します。
クラスマクロは、DHCP 要求に埋め込まれている「クラス文字列」により命名されます。 x86 プラットフォームでは、BIOS は常にクラス ネットワークマクロは、サブネットの IP アドレスにより命名されます。 マクロ IP マクロは IP アドレスにより命名されます。 これは x86 プラットフォームでの Solaris OS のブートのコンテキストではほとんど使用されません。 クライアントマクロは、大文字で、クライアントのタイプ (ether の場合は 01) および MAC アドレスにより命名されます。 Ethernet アドレス サブネット 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
クライアントマクロの B.3. もっとも単純なネットブート設定 最低限、1 台のサーバーと 1 台のクライアントが必要です。 サーバーには、稼働中の DHCP サーバーと使用可能な Solaris ディストリビューションイメージが必要です。 クライアントマシンは、PXE ブート要求をサポートできるサーバーと同じサブネットに接続します。 次にサーバー設定の手順を示します。サーバーの IP アドレスは a. Solaris ディストリビューションイメージの Tools ディレクトリに移動し、次のように実行します。 # add_install_client -d -e 0:0:39:fc:f2:ef i86pc
b. 次のように、DHCP サービス用のクライアントマクロ名 BootSrvA: 192.168.0.123 BootFile: 01000039FCF2EF
この操作は、 これでクライアントをブートし、Solaris OS をインストールすることができます。 B.4. PXE/DHCP を使用しないネットインストール フロッピー、CD-ROM、またはローカルディスクから GRUB をロードし、GRUB で手動によりネットワークを構成し、ファイルサーバーから
Solaris OS を使用してインストールされた標準的な GRUB 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
当然ながら、使用するローカルネットワーク環境に適した値を使用して フロッピー上の <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
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 イメージが存在する場合、各クライアントに対してどのリリースまたはビルドをインストールするかを選択する手段が必要です。 これには、次のようにいくつかの可能な手段があります。
ケース (a) は、ブートサーバーを管理する標準的な手段です。 ネットワーク管理者は、各クライアントに対して DHCP サービスを一度だけ設定します。 そのあと、クライアントユーザーはブートサーバーにログインし、 ケース (b) では、DHCP オプション 150 を使用して GRUB メニューファイルを供給する必要があります。 ユーザーがクライアント用のリリース/ビルドを選択した時点で、オプション 150 を、選択されたリリース/ビルドを含むメニューファイルに設定するよう DHCP 構成が変更されます。 各リリース/ビルド用のメニューファイルは、ブートサーバー上で先に作成される必要があることに注意してください。 選択されたリリース/ビルドがブートに
ケース (c) は、 B.6. 自動配備のシーケンス 多くの場合、自動配備は次のシーケンスを実行します。
配備の最後で、マシンはアイドル状態になり、ユーザーの操作を待機します。 多くの場合、最初のネットブートは F12 (またはプラットフォームに応じたほかのキーシーケンス) を押すことで手動で開始できます。 ただし、一部のシステムは BIOS シリアルコンソールの切り替えをサポート していませんし、また物理コンソールにユーザーが常駐するよう要求することは現実的ではありません。 また、BIOS の中にはネットブートを要求するための期間が非常に短く、ネットブートが操作しづらくなるものもあります。 1 つの回避策として、フロッピーからネットワークブートし、フロッピーを書き換えてディスクをブートする方法があります。 新しいプラットフォームにはフロッピードライブが付属していないため、この方法はもはや実用的ではありません。 Sun は、ディスクから GRUB をロードすることをお勧めします。 JumpStart 用にネットワークブートをするよう、次のメニューエントリを # bootadm set-menu default=<menu_entry_number> 上記の
title Solaris Jumpstart
dhcp
root (nd)
kernel .../multiboot kernel/unix - install -B console=...
module ../x86.miniroot
システムがインストールされると、デフォルトの B.7. 障害追跡 さて、正しく動作しない場合は、どのような問題が発生するでしょうか。 障害追跡のためのヒントを次に示します。 a. ネットブートを試みることなく、クライアントが直接ディスクでブートする。 この状態は、通常、クライアント PXE ROM が無効であるか、ネットワークよりも前にディスクからブートするよう BIOS が構成されていることを意味します。 修正方法としては、BIOS にアクセスし、構成を変更します。 詳細はマシンごとに異なります。 b. クライアントがネットブートを試みるが、応答がない。 ネットワークケーブル、(存在する場合は) インタフェースカード上の LED ライトなどについて、通常のチェックを実行します。 次のようにサーバー上で # snoop -v [-d <interface>] 0:0:39:fc:f2:ef
上記の
PXEClient:Arch:00000:UNDI:002001 c. クライアントが TFTP タイムアウトメッセージを表示する。 これは、 d. クライアントが TFTP プロトコルは 65K までのブロックを転送できます。 一部の サーバーが Solaris 8 OS を実行している場合は、Solaris 8 OS 用の TFTP パッチが入手可能になるまで、Solaris 9 OS から e. クライアントが 通常は、コンソール出力がどこか別の場所に移動しています。 GRUB メニュー行で f. クライアントが「No ethernet card found」というメッセージを表示する。 これは、ローカルメディアから GRUB をブートし、ネットワークから Solaris OS をロードする際に生じる場合があります。 このメッセージは、GRUB が PCI BIOS32 サービスを使用してもネットワークインタフェースが見つからないことを示します。 g. クライアントが「No PnPBios found」というメッセージを表示する。 これは、ローカルメディアから GRUB をブートし、ネットワークから Solaris OS をロードする際に生じる場合があります。 この場合、GRUB はネットワークインタフェースを特定しましたが、PnP Bios サービスを特定してネットワークインタフェースカードから UNDI ROM をインストールすることに失敗しています。 参照
Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License. |
BigAdmin SubscriptionsBigAdmin Areas
BigAdmin Sun Center
BigAdmin Topics |