名前 | 形式 | 機能説明 | オプション | x86 でのブートシーケンスの詳細 | x86 での一次ブート | x86 カーネルの開始 | 使用例 | ファイル | 関連項目 | 警告 | 注意事項
boot [OBP names] [file] [-aV] [-D default-file] [boot-flags] [--] [client-program-args]
kernel multiboot [file] [boot-args] [-B prop=val [,val]...]
i
ブートストラップとは、スタンドアロンプログラムを読み込んで実行する処理のことです。ここでのブートストラップとは、起動可能なオペレーティングシステムを読み込んで実行することを意味します。通常、スタンドアロンプログラムはオペレーティングシステムカーネル (kernel(1M) のマニュアルページを参照) ですが、代わりに任意のスタンドアロンプログラムを起動することもできます。SPARC ベースのシステムでは、オペレーティングシステム以外に起動できるスタンドアロンプログラムの代表的な例として、マシンの診断モニターがあります。
スタンドアロンプログラムが動的にリンクされる実行可能プログラムとして識別された場合、boot は実行可能形式によって指定されたインタプリタ (リンカー / ローダー) を読み込み、そのインタプリタに制御を渡します。スタンドアロンプログラムが静的にリンクされている場合は、そのスタンドアロンプログラムに直接ジャンプします。
カーネルは読み込まれると、UNIX システムを起動して、必要なファイルシステム (vfstab(4) のマニュアルページを参照) をマウントし、/sbin/init を実行して、システムを /etc/inittab で指定されている initdefault 状態にします。inittab(4) を参照してください。
SPARC ベースのシステムでは、ほとんどのマシンでのブートストラップ手続きは次の基本フェーズからなります。
マシンの電源を投入すると、(PROM 内の) システムファームウェアが電源投入時自己診断テスト (POST) を実行します。この診断テストの形式と範囲は、システムに搭載されているファームウェアのバージョンによって異なります。
診断テストが正常に完了した後、ファームウェアが使用する不揮発性記憶領域に適切なフラグが設定されていれば、ファームウェアは自動起動を試みます。ファームウェアは、読み込むファイルの名前とそのファイルを読み込むデバイスを選択することができます。
これらのフラグと名前は、シェルから eeprom(1M) コマンドを使用するか、またはシステムの停止後に ok プロンプトで PROM コマンドを使用することにより、設定できます。
第 2 レベルのプログラムは、ufsboot (ディスクから起動する場合) または inetboot または wanboot (ネットワークから起動する場合) のどれかです。
ネットワーク起動
ネットワーク起動は 2 段階で行われます。まず、クライアントが、二次起動プログラムの読み込みに必要な IP アドレスとその他のすべてのパラメータを取得します。続いて、二次起動プログラムが、UNIX カーネルを読み込みます。
IP アドレスは、PROM で使用可能な機能と PROM の構成に応じて、RARP、DHCP、手動構成のいずれかの方法を使って取得できます。sun4u カーネルアーキテクチャのマシンには、DHCP 対応の PROM が搭載されています。
次に、2 種類のネットワーク起動方式を指定する boot コマンド構文を示します。
boot net:rarp boot net:dhcp |
次のコマンドを見てください。
boot net |
このコマンドのように、rarp または dhcp 指示子を指定しないと、net が別名になっているネットワークインタフェースを介して、デフォルトのネットワーク起動方式が呼び出されます。
以降では、RARP/bootparams を使用するネットワーク起動のイベントシーケンスについて説明します。そのあとで、DHCP を用いたシーケンスについて説明します。
RARP/bootparams を使ってネットワークから起動する場合、PROM はまず、応答を受信するまで逆 ARP 要求をブロードキャストします。応答を受信すると、TFTP 要求をブロードキャストして inetboot の最初のブロックを取得します。続いて、その最初のブロック要求に一番先に応答したサーバーに後続の要求が送信されます。読み込みの完了後、inetboot も同様に、逆 ARP を使って IP アドレスを取得した後、bootparams RPC 呼び出し (bootparams(4) を参照) をブロードキャストすることで、構成情報とルートファイルシステムを検索します。続いて、inetboot は NFS 経由でカーネルを読み込んだ後、そのカーネルに制御を移します。
DHCP を使用してネットワークから起動する場合、PROM はハードウェアアドレスおよびカーネルアーキテクチャをブロードキャストし、IP アドレス、起動パラメータ、およびネットワーク構成情報を要求します。(可能性のある複数のサーバーの中から) DHCP サーバーが応答し選択されると、そのサーバーがクライアントに IP アドレスおよびクライアントの起動に必要な他のすべての情報を送信します。この情報を受信したクライアントの PROM は、読み込むファイルの名前を調べ、そのファイル名が HTTP URL であるかどうかにより、2 種類の動作のいずれかを実行します。ファイル名が HTTP URL でなかった場合、PROM は、inetboot をダウンロードし、それをメモリー内に読み込んで実行します。すると、inetboot はカーネルを呼び出し、さらにそのカーネルが必要なファイルを読み込んでから inetboot を解放します。その後、起動スクリプトが DHCP エージェント (dhcpagent(1M) を参照) を起動します。以降の DHCP アクティビティは、その DHCP エージェントによって実行されます。
読み込むファイルが HTTP URL の場合、PROM は、その参照ファイルを HTTP を使って読み込みます。クライアントが HMAC SHA-1 鍵を使って構成されていた場合、クライアントは読み込んだファイルの完全性を検査した後で、そのファイルを実行します。そのファイルは wanboot バイナリであるとみなされます。起動された wanboot は、処理を継続できるだけの情報が揃っているかどうかを判断します。必要な情報が不足していた場合は、適切なエラーを出力して処理を終了するか、コマンドインタプリタを起動して必要な構成情報の入力をユーザーに求めます。必要な情報を取得した wanboot は、HTTP 経由で起動ファイルシステムをメモリー内に読み込みます。クライアント上に暗号鍵がインストール済みである場合、wanboot は、起動ファイルシステムイメージと関連ハッシュを復号化した後、そのハッシュを検証します (暗号鍵は存在するがハッシュ鍵が存在しない、という状況はエラーになります)。起動ファイルシステムには、wanboot が正しい時刻の設定とルートファイルシステムの取得を実行するのに必要な各種構成データが含まれています。
wanboot は、起動ファイルシステムを調べることで、HTTP、HTTPS のいずれを使用すべきかを判断します。HTTP を使用すべきであることが判明した場合でかつ、クライアントが HMAC SHA-1 鍵を使って構成されていた場合、wanboot はルートファイルシステムの完全性検査を実行します。ルートファイルシステムのメモリー内への読み込み (および必要に応じて完全性検査の実行) が完了すると、wanboot はそこから UNIX を読み込みおよび実行します。なお、wanboot.conf(4) ファイルで boot_logger URL が指定されていた場合、wanboot は処理状況に関するログを定期的に記録します。
すべての PROM が URL を処理できるわけではありません。クライアントにその機能が備わっているかどうかを判断するには、list-security-keys OBP コマンド (monitor(1M) を参照) を使用します。
現在のところ、x86 プラットフォーム上では WANブートは利用できません。
wanboot コマンド行
クライアントプログラムが wanboot である場合、クライアントプログラムは、次の形式の client-program-args を受け付けます。
boot ... -o opt1[,opt2[,...]] |
ここで、各オプションに指定できるアクションは、次のとおりです。
DHCP 経由で構成パラメータを取得するように wanboot に指示します。
コマンドインタプリタを起動するように wanboot に指示します。
下記のインタプリタコマンドのいずれか。
...または、下記のインタプリタパラメータ名を使用した代入文。
wanboot コマンドインタプリタ
起動時に client-program-args として「-o prompt」を指定すると、wanboot コマンドインタプリタが起動されます。単一のコマンドまたは代入文、もしくは、コンマで区切られた一連のコマンドまたは代入文が入力可能です。利用可能な構成パラメータは、次のとおりです。
クライアントの IP アドレス (ドット区切り 10 進表記)。
デフォルトのルーターの IP アドレス (ドット区切り 10 進表記)。
サブネットマスク (ドット区切り 10 進表記)。
DHCP クライアント識別子 (引用符付き ASCII 文字列または 16 進 ASCII)。
DHCP トランザクションで要求するホスト名 (ASCII)。
HTTP プロキシサーバー指定 (IPADDR[:PORT])。
利用可能な鍵名は、次のとおりです。
トリプル DES 暗号鍵 (48 個の 16 進 ASCII 文字)。
AES 暗号鍵 (32 個の 16 進 ASCII 文字)。
HMAC SHA-1 署名鍵 (40 個の 16 進 ASCII 文字)。
最後に、WANブート CGI の URL を参照する方法を示します。
WANブート CGI の URL (OBP の file パラメータと同等)。
インタプリタが受け付けるコマンドは、次のとおりです。
利用可能なコマンドの簡単な説明文を出力します。
val を var に代入します。ここで、var は、構成パラメータ名、鍵名、bootserver のいずれかです。
パラメータ var の設定を解除します。
すべてのパラメータとその設定値を一覧表示します (OBP 経由で取得された鍵の値は表示されません)。
未設定パラメータに対する値の入力を、ユーザーに求めます。各パラメータの名前と現在値 (もしあれば) が出力されます。ユーザーは、Return キーを押して現在値を受け入れることもできますし、新しい値を入力することもできます。
すべての値の入力を完了したら、インタプリタを終了し起動処理を継続します。
起動インタプリタを終了し、OBP の ok プロンプトに戻ります。
上記の代入文やコマンドは、コマンド行の -o オプションの一部として、いくつでも指定できますが、boot コマンドの引数の長さには 128 バイトの OBP 制限があります。たとえば、「-o list,go」とすると、パラメータの現在値 (デフォルト値) が一覧表示された後、起動処理が継続します。
ディスクからの起動
ディスク (またはディスク同様のデバイス) から起動する場合、ブートストラップ処理は、一次起動および二次起動という概念的に異なる 2 種類のフェーズからなります。一次起動フェーズでは、PROM が、起動デバイスとして選択されたディスクパーティションのブロック 1 〜 15 から主起動ブロックを読み込みます。
スタンドアロンプログラムのパス名が相対パス名の場合 (スラッシュで始まらない場合)、第 2 レベルの起動において、プラットフォームに依存する検索パスでスタンドアロンプログラムが検索されます。このパスには必ず、/platform/platform-name が含まれています。多くの SPARC プラットフォームでは、次にプラットフォーム固有のパスエントリ /platform/hardware-class-name が検索されます。filesystem(5) のマニュアルページを参照してください。絶対パス名の場合、boot は指定されたパスを使用します。その後、boot プログラムは該当するアドレスからスタンドアロンプログラムを読み込み、制御を渡します。
ファイル名がコマンド行で、または boot-file NVRAM 変数などで指定されていない場合、boot はシステムにインストールされているソフトウェア、ハードウェアおよびファームウェアの能力に基づいて、読み込むべきデフォルトのファイルを選択します。
カーネルへのパスには、空白を含めてはいけません。
OpenBoot boot コマンドは、次の形式の引数をとります。
ok boot [device-specifier] [arguments] |
デフォルトの boot コマンドに引数はありません。
ok boot |
boot コマンド行で device-specifier を指定しない場合、OpenBoot は通常、boot-device 変数または diag-device NVRAM 変数を使用します。オプションの arguments をコマンド行で指定しないと、OpenBoot は通常、boot-file または diag-file NVRAM 変数をデフォルトの boot 引数として使用します。(システムが診断モードの場合、boot-device および boot-file の代わりに、diag-device と diag-file が使用されます)。
arguments には複数の文字列を指定できます。すべての argument 文字列は二次起動プログラムに渡され、OpenBoot では解釈されません。
boot コマンド行に arguments を指定した場合、boot-file または diag-file NVRAM 変数のどちらも使用されません。NVRAM 変数の内容がコマンド行の引数とマージされることもありません。たとえば、次のコマンドを見てください。
ok boot -s |
このコマンドでは、boot-file および diag-file の設定値は無視され、文字列 -s は arguments として解釈されます。この場合、boot は boot-file または diag-file の内容を使用しません。
以前の PROM におけるコマンド例を示します。
ok boot net |
このコマンドでは引数が指定されていないため、代わりに、boot-file または diag-file の設定値 (設定されている場合) が、boot に渡すデフォルトのファイル名および引数として使用されます。ほとんどの場合、システムタイプ、システムのハードウェアとファームウェア、およびルートファイルシステムにインストールされているソフトウェアに基づいて boot コマンドに適切なデフォルト値を選択させるのが、最善の方法です。boot-file または diag-file を変更すると、状況によっては予期せぬ結果を招くおそれがあります。
これは、大部分の OpenBoot 2.x および 3.x ベースのシステムにおける一般的な動作です。ただし、プラットフォームによっては動作が異なる可能性もあります。
次のコマンドを見てください。
ok boot cdrom
...このコマンドも通常は、引数を指定しません。したがって、boot-file に 64 ビットカーネルのファイル名が設定されている環境で、「boot cdrom」と入力してインストール CD または DVD を起動しようとしても、インストール媒体に 32 ビットカーネルしか含まれていなければ、その起動処理は失敗します。
使用される boot コマンドの形式によっては、boot-file または diag-file の内容が無視されるので、プロダクションシステムで boot-file に依存することは一般に推奨しません。
ローカル (CD または DVD 上) に存在する wanboot コピーから WANブートを実行するには、次のコマンドを使用する必要があります。
ok boot cdrom -F wanboot - install
最近の PROM に含まれるネットワーク起動サポートパッケージは、次の構文をサポートするように強化されており、引数を処理できるようになっています。
[protocol,] [key=value,]*
すべての引数は省略可能であり、指定する順序にも制限はありません。ただし、リストの末尾でない限り、引数の後にはコンマが必要です。ここで指定した引数は、すべてのデフォルト値よりも優先されるほか、DHCP を使って起動する場合には、それらの引数に対応する DHCP サーバーから提供される構成情報よりも優先されます。
上記の protocol には、使用するアドレス検索プロトコルを指定します。
key=value 属性ペアには、以下の構成パラメータを指定します。
TFTP サーバーの IP アドレス。
TFTP を使ってダウンロードするファイルの名前、または WANブートの URL。
クライアントの IP アドレス (ドット区切り 10 進表記)。
デフォルトのルーターの IP アドレス。
サブネットマスク (ドット区切り 10 進表記)。
DHCP クライアント識別子。
DHCP トランザクションで使用するホスト名。
HTTP プロキシサーバー指定 (IPADDR[:PORT])。
TFTP の最大リトライ回数。
DHCP の最大リトライ回数。
ネットワークブートサポートパッケージによって処理される一連の引数は、次のいずれかの方法で指定します。
パッケージの open メソッドに渡される引数として
NVRAM 変数 network-boot-arguments 内に指定する引数として
network-boot-arguments 内に指定された引数は、パッケージの open メソッドに引数が 1 つも渡されなかった場合にのみ処理されます。
引数の値
protocol には、使用するアドレス検索プロトコルを指定します。rarp、dhcp のいずれかを指定できます。
このドキュメントで定められた新しい構文とスタイルを使って他の構成パラメータが指定されていた場合、protocol パラメータが指定されていなければ、手動の構成を意味します。
他の構成パラメータが 1 つも指定されていない場合や、他の構成パラメータが現在サポートされている位置に基づくパラメータ構文を使って指定されていた場合、protocol パラメータを指定しなければ、ネットワークブートサポートパッケージは、プラットフォーム固有のデフォルトのアドレス検索プロトコルを使用することになります。
手動構成を行う場合、IP アドレス、ブートファイル名、ブートファイルイメージの提供元サーバーのアドレスの各情報を、クライアントに提供する必要があります。また、ネットワークの構成によっては、subnet-mask と router-ip も指定する必要があります。
protocol 引数が指定されなかった場合、ネットワークブートサポートパッケージは、プラットフォーム固有のデフォルトのアドレス検索プロトコルを使用します。
tftp-server は、TFTP を使用する場合、ダウンロードするファイルを提供する TFTP サーバーの IP アドレス (標準 IPv4 のドット区切り 10 進表記) です。
DHCP を使用する場合、その値は、DHCP 応答に指定された TFTP サーバーの値よりも優先されます。
サーバーが引数として指定された場合と DHCP 応答内に指定された場合、TFTP RRQ はサーバーにユニキャストされます。それ以外の場合、TFTP RRQ はブロードキャストされます。
file には、TFTP を使用する場合は TFTP サーバーから読み込むファイルを指定し、HTTP を使用する場合は URL を指定します。ファイル名が URL である場合、すなわち、ファイル名が http: で始まる場合 (大文字小文字の区別あり)、HTTP が使用されます。
RARP と TFTP を使用する場合、このドキュメントで前述したように、デフォルトのファイル名はクライアントの IP アドレスの ASCII 16 進表記になります。
DHCP を使用する場合、この引数は、DHCP 応答に指定されたブートファイル名よりも優先されます。
DHCP と TFTP を使用する場合、デフォルトのファイル名は、root ノードの name プロパティーから自動生成されます。その際、コンマ (,) はピリオド (.) に置き換えられます。
ファイル名をコマンド行から指定する場合、ファイル名にスラッシュ (/) を含めることはできません。
URL の形式については、RFC 2396 で説明されています。HTTP サーバーは、IP アドレス (標準 IPv4 のドット区切り 10 進表記) として指定する必要があります。ポート番号 (省略可能) は、10 進数として指定します。ポートを指定しなかった場合、ポート 80 (10 進) が使用されます。
指定された URL は「安全にエンコードされている」必要があります。というのも、パッケージは、指定された URL にエスケープエンコーディングを適用しないからです。コンマを含む URL は、引用符付きの文字列として指定する必要があります。それ以外の URL は、必ずしも引用符で囲む必要はありません。
host-ip には、クライアントすなわちブート対象システムの、IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定します。アドレス検索プロトコルとして RARP を使用している場合にこの引数を指定すると、RARP を使用する必要がなくなります。
DHCP を使用している場合に host-ip 引数を指定すると、クライアントは、RFC 2131 の「Externally Configured Network Address」で規定されている手順に従うようになります。
router-ip には、直接接続されたネットワーク上にあるルーターの IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定します。このルーターは、ネットワーク通信の最初の接続先として使用されます。この引数を指定した場合、そこで指定されたルーターは、DHCP 応答に指定された推奨ルーターよりも優先されます。
subnet-mask (標準 IPv4 のドット区切り 10 進表記で指定) は、クライアントが存在するネットワークのサブネットマスクです。サブネットマスクが (この引数または DHCP 応答を通じて) 指定されなかった場合、ブート対象クライアントに割り当てられたアドレスに対するネットワーククラス (Class A、B、C のいずれか) に適するデフォルトマスクが使用されます。
client-id には、クライアントの一意に決まる識別子を指定します。DHCP クライアント識別子は、この値に基づいて生成されます。クライアント識別子の指定方法には、次の 2 つがあります。
識別子の ASCII 16 進表現
引用符付きの文字列
したがって、「client-id="openboot"」と「client-id=6f70656e626f6f74」はどちらも、DHCP クライアント識別子 6F70656E626F6F74 を表わします。
コマンド行から指定される識別子には、スラッシュ (/) や空白を含めることはできません。
DHCP クライアント識別子の最大長は、32 バイト (ASCII 16 進形式を使用する場合は 32 バイトを表す 64 文字) です。後者の形式を使用する場合、識別子を構成する文字数は偶数でなければなりません。有効な文字は、0 〜 9、a 〜 f、A 〜 F です。
クライアントが正しく認識されるためには、クライアントが接続されているサブネット上で、クライアント識別子が一意に決まる必要があります。この要件を満足する識別子を選択するのは、システム管理者の役割です。
コマンド行で指定されたクライアント識別子は、任意の DHCP メカニズムを使って指定された識別子よりも優先されます。
hostname (文字列として指定) には、DHCP トランザクション内で使用されるホスト名を指定します。この名前は、ローカルドメイン名で修飾してもしなくてもかまいません。ホスト名の最大長は、255 文字です。
hostname パラメータは、クライアントが、希望するホスト名を DHCP サーバーに提供することが必要なサービス環境で使用できます。クライアントが、希望するホスト名を DHCP サーバーに提供すると、DHCP サーバーは、そのホスト名とクライアントに割り当てられた IP アドレスを、DNS を使って登録します。
http-proxy は、次のようなホストの標準記法を使って指定します。
host [":"" port] |
...ここで、host には IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定し、port (省略可能) には 10 進数を指定します。port を指定しなかった場合、ポート 8080 (10 進) が使用されます。
tftp-retries は、TFTP 処理が失敗したとみなされるまでの、最大リトライ回数 (10 進で指定) です。デフォルトのリトライ回数は、無限回です。
dhcp-retriesは、DHCP 処理が失敗したとみなされるまでの、最大リトライ回数 (10 進で指定) です。デフォルトのリトライ回数は、無限回です。
x86 システム上では、ブートストラップ手続きは、カーネルのロードと、カーネルの初期化という概念的に異なる 2 つのフェーズからなります。カーネルのロードは、システムボード上の BIOS ROM および周辺装置上の BIOS ROM 拡張機能を使用して、GRUB (GRand Unified Bootloader) 上で実装されます。BIOS はフロッピーディスクの物理的な先頭セクター、ハードディスク、DVD あるいは、CD を読み込むことにより、GRUB をロードします。ネットワークアダプター上の ROM でサポートされている場合は、BIOS はネットワークサーバーから pxegrub バイナリをダウンロードすることもできます。GRUB は配置されると、メニューにあるコマンドを実行してカーネルプログラムとデータを含んでいる事前に設定されたブートアーカイブをロードします。また、GRUB は multiboot と呼ばれる小さなプログラムもロードします。これは、カーネル側のマルチブート仕様を実装します。
GRUB がブートアーカイブをロードし終わって、multiboot プログラムに制御を引き渡したときに、カーネルの初期化が始まります。この時点で、GRUB は非アクティブとなり、ブートデバイスとの入出力はこれ以上発生しません。multiboot プログラムは中核カーネルモジュールを集約し、オペレーティングシステムを開始し、ブートアーカイブから必要なモジュールをリンクし、実際のルートデバイス上のルートファイルシステムをマウントします。この時点で、カーネルは、ストレージに対する入出力を再開し、さらなるファイルシステムをマウントします(vfstab(4) を参照)。そして、多様なオペレーティングシステムのサービスを開始します (smf(5) を参照)。
次の SPARC オプションを指定できます。
boot プログラムはこのフラグを問い合わせと解釈し、スタンドアロンプログラムの名前を要求します。-a フラグはその後、スタンドアロンプログラムに渡されます。
default-file を明示的に指定します。一部のシステムでは、なにも指定されていない場合、boot は動的デフォルトファイルを選択します。このオプションを使用すると、default-file を明示的に指定できます。kmdb(1) をブートする場合に便利です。これは、kmdb がデフォルトで、boot プログラムによってエクスポートされたデフォルトファイルを読み込むためです。
詳細なデバッグ情報を表示します。
boot プログラムはすべての boot-flags を file に渡します。これらの引数は、boot では解釈されません。デフォルトのスタンドアロンプログラムで使用できるオプションについては kernel(1M) および kmdb(1) のマニュアルページを参照してください。
boot プログラムはすべての client-program-args を file に渡します。これらの引数は、boot では解釈されません。
ブートするスタンドアロンプログラムの名前。boot コマンド行または boot-file NVRAM 変数でファイル名を明示的に指定しないと、boot は適切なデフォルトファイル名を選択します。
OpenBoot PROM 指定を行います。たとえば、Desktop SPARC ベースのシステム上で /sbus/esp@0,800000/sd@3,0:a を指定した場合は、スロット 0 の esp ホストアダプタで、SCSI バス上の lun0 、ターゲット 3 の SCSI ディスク (sd) を意味します。
次の x86 オプションを指定できます。
ひとつ以上の設定値ペアが multiboot プログラムに渡されます。複数の設定値ペアはコンマで区切られる必要があります。このオプションの使用方法は、次のコマンドと同様です。eeprom prop=val設定情報とその有効な値については、eeprom(1M) を参照してください。
boot プログラムはすべての boot-args を file に渡します。これらの引数は、boot では解釈されません。カーネルで使用できるオプションについては、kernel(1M) および kmdb(1) のマニュアルページを参照してください。
ブートするスタンドアロンプログラムの名前。デフォルトでは、ルートパーティションから、/platform/i86pc/kernel/unix ( CPU が 64 ビット対応の場合は /platform/i86pc/kernel/amd64/unix ) をブートしますが、コマンド行に他のプログラムを指定することもできます。
GRUB によってロードされるマルチブートプログラムの名前。デフォルトの名前は、/platform/i86pc/multiboot です。この名前は変更してはいけません。
PC 互換マシンの電源を投入すると、BIOS ROM のシステムファームウェアが電源投入時自己診断テスト (POST) を実行し、周辺ボード上の ROM の BIOS 拡張機能を実行し、ソフトウェア割り込み INT 19h のブートストラップをブートします。INT 19h のハンドラは通常、標準の PC 互換起動処理を実行します。その場合、1 番目のフロッピーディスクドライブから先頭物理セクターを読み取ります。読み取れない場合は、1 番目のハードディスクから読み取ります。次にプロセッサは、メモリー内でこのセクターイメージの先頭バイトにジャンプします。
フロッピーディスクの先頭のセクターにはマスターブートブロックがあります(GRUB ステージ 1)。ステージ 1 は ステージ 2 をロードします。この時点で GRUB は準備が完全に整います。GRUB は、メニューファイル (/boot/grub/menu.lst) を読み込み、実行します。同様のシーケンスが DVD あるいは、CD ブートでも発生します。しかし、マスターブートブロックの位置と内容は El Torito 仕様で規定されています。El Torito 準拠のブートでも、strap.com が読み込まれ、それが次に boot.bin が読み込まれます。
ハードディスクの最初のセクターには、マスターブートブロックがあり、そのブロックにはマスターブートプログラムと FDISK テーブルが含まれています。この名前は、PC プログラムが管理している FDISK に由来しています。マスターブートは、FDISK テーブルの中のアクティブパーティションを探し、その先頭セクター (GRUB ステージ 1) をロードして、メモリー内の先頭バイトにジャンプします。ハードディスクからの標準の PC 互換起動処理はこれで完了します。GRUB ステージ 1 がマスターブートブロック上にインストールされると (installgrub(1M) の -m を参照) 、ステージ 2 が、アクティブパーティションかどうかには関わらず Solaris FDISK パーティションから直接ロードされます。
Solaris ソフトウェア用 x86 FDISK の パーティションは、1 シリンダのブートスライスから始まり、これは、GRUB の ステージ 1 を先頭セクターに含んでいます。そして、第 2 および第 3 のセクターは、標準 Solaris ディスクラベルおよびボリューム構成テーブル (VTOC) を含んでいます。そして、第 50 とその後続セクターは、GRUB の ステージ 2 を含んでいます。第 4 から 第 49 までのセクターには、Solaris の古いバージョンのブートブロックが含まれている可能性があります。これによって、同じ FDISK の中に、複数の Solaris リリースを同時に存在させることが可能になります。Solaris ソフトウェア用 FDISK パーティションがアクティブパーティションの場合、マスターブートプログラム (mboot) は、先頭セクターにあるパーティションブートプログラムをメモリーの中に読み込み、そこへジャンプします。次に GRUB ステージ 2 プログラムをメモリーに読み込み、そこへジャンプします。GRUB メニューが表示されると、ユーザーは異なるパーティション、異なるディスク、あるいは 可能であればネットワークからオペレーティングシステムをブートできるよう選択できます。
Intel の Preboot eXecution Environment (PXE) 規格が、ネットワークブートのためにサポートされています。PXE を使用してネットワークからのブートを行う場合には、システムあるいはネットワークアダプタの BIOS が DHCP を使用してブートサーバ上のネットワークブートストラッププログラム (pxegrub) を見つけ、Trivial File Transfer Protocol (TFTP) を使用してそのプログラムを読み込みます。BIOS が、メモリ上の先頭バイトにジャンプすることで、pxegrub を実行します。pxegrub は、メニューファイルをダウンロードし、ユーザーにその項目を表示します。
カーネルの開始処理は、カーネルのロード処理に依存しません。カーネルが開始している間、コンソール入出力は、console プロパティーで指定されたデバイスで行われます。ルートデバイスは bootpath プロパティーで設定され、ルートファイルシステムの種類は、 fstype プロパティーで指定されます。これらのプロパティーは、Solaris インストールおよびアップグレード処理で /boot/solaris/bootenv.rc の中に設定されるべきです。そして、上記のように (eeprom(1M) を参照) -B で上書きされます。これらのプロパティーが存在していなければ、コンソールの入出力は、デフォルトで、画面とキーボードになります。ルートデバイスは、デフォルトで ramdisk、 ファイルシステムはデフォルトで ufs になります。
対話モードでシングルユーザーとしてデフォルトのカーネルをブートするには、ok プロンプトで次のいずれかを入力します。
boot -as boot disk3 -as |
さまざまな boot コマンド行呼び出し間の微妙な違いを示すために、ここでは network-boot-arguments が設定されており、以下のコマンドのように net に対してデバイス別名が設定されているものとします。
次のコマンドでは、デバイス別名内のデバイス引数が、デバイスドライバによって処理されます。ネットワークブートサポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net |
次のコマンドでは、デバイス引数なし、とみなされます。ネットワークブートサポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net: |
次のコマンドでは、デバイス引数なし、とみなされます。rarp は唯一のネットワークブートサポートパッケージ引数です。network-boot-arguments は無視されます。
boot net:rarp |
次のコマンドでは、指定されたデバイス引数が処理されます。ネットワークブートサポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net:speed=100,duplex=full |
次のコマンドでは、DVD または CD から wanboot バイナリが読み込まれます。読み込まれた wanboot は、DHCP の実行時にコマンドインタプリタを 起動し、鍵やその他の必要な構成情報をユーザーが入力できるようにします。
boot cdrom -F wanboot -o dhcp,prompt |
シングルユーザー状態の対話モードでデフォルトのカーネルをブートするには、コマンドラインで GRUB を次のように編集します。
kernel /platform/i86pc/multiboot kernel/unix -as |
シングルユーザー状態の対話モードでデフォルトのカーネルをブートするには、コマンドラインで GRUB を次のように編集します。
kernel /platform/i86pc/multiboot kernel/amd64/unix -as |
boot-file eeprom(1M) 変数のデフォルト値は NULL 文字列です。これにより、使用するシステムのハードウェアに適切なカーネル (32 ビットまたは 64 ビット) を二次ブートプログラムで選択できます。どちらかのカーネルを選択するには、次の手順に従います。
32 ビットカーネルを指定するには、root 権限または同等の権限で次のように入力します。
# eeprom boot-file kernel/unix |
次にリブートすると、システムは 32 ビットカーネルで実行されます。
あるいは、32 ビットカーネルを GRUB のメニューで次のように指定することができます。
kernel /platform/i86pc/multiboot kernel/unix
64 ビットカーネルを指定するには、root 権限または同等の権限で次のように入力します。
# eeprom boot-file kernel/amd64/unix |
次にリブートすると、システムは 64 ビットカーネルで実行されます。
あるいは、64 ビットカーネルを GRUB のメニューで次のように指定することができます。
kernel /platform/i86pc/multiboot kernel/amd64/unix
二次ブートプログラムで使用するシステムのハードウェアに適切なカーネルを選択できるように、boot-file 変数をデフォルト値である NULL 文字列に戻すには次のように入力します。
# eeprom boot-file "" |
非特権ユーザーとして、boot-file 変数の現在の値を確認するには次のように入力します。
% eeprom boot-file |
そのコマンドの詳細については、eeprom(1M) のマニュアルページを参照してください。
ディスク、DVD あるいは CD からブートするための 第 2 レベルのプログラム
initdefault 状態が指定されているテーブル
initdefault 状態にシステムを移行するプログラム
ブートに関連するファイルが置かれているディレクトリ。
カーネル側のマルチブート仕様を実装するカーネルプログラム
システムをブートするデフォルトのプログラム。
kmdb(1), uname(1), eeprom(1M), init(1M), installboot(1M), kernel(1M), monitor(1M), shutdown(1M), uadmin(2), bootparams(4), inittab(4), vfstab(4), wanboot.conf(4), filesystem(5)
RFC 903, A Reverse Address Resolution Protocol, http://www.ietf.org/rfc/rfc903.txt
RFC 2131, Dynamic Host Configuration Protocol, http://www.ietf.org/rfc/rfc2131.txt
RFC 2132, DHCP Options and BOOTP Vendor Extensions,http://www.ietf.org/rfc/rfc2132.txt
RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax, http://www.ietf.org/rfc/rfc2396.txt
『Sun ハードウェアマニュアル』
『OpenBoot Command Reference Manual』
boot ユーティリティは、ブート可能プログラムとして使用できるファイルかどうか判別できません。ブート不可能なファイルを起動するように要求された場合、boot ユーティリティはそのファイルを読み込み、そのファイルに制御を渡します。その場合の結果は予測できません。
platform-name を調べるには、uname(1) の -i オプションを使用します。hardware-class-name を調べるには、uname(1) の -m オプションを使用します。
現在のリリースの Solaris オペレーティングシステムは、UltraSPARC-I CPU を搭載するマシンをサポートしません。
名前 | 形式 | 機能説明 | オプション | x86 でのブートシーケンスの詳細 | x86 での一次ブート | x86 カーネルの開始 | 使用例 | ファイル | 関連項目 | 警告 | 注意事項