システムリソースの動的再構成では、システムを動作させたままで、システムのコンポーネントを再構成することができます。この機能は、Solaris 8 リリースから cfgadm コマンドで使用できるようになりました。Reconfiguration Coordination Manager は、システムコンポーネントの動的削除を制御するフレームワークです。RCM の使用により、システムリソースを秩序立てて登録したり解放したりすることができます。
Solaris 8 4/01 リリースでは、動的再構成時にアプリケーションをシャットダウンしたり、アプリケーションからデバイスをクリーンに解放したりする独自のスクリプトを作成できる、新しい RCM スクリプト機能を使用することができるようになりました。再構成の要求がスクリプトによって登録されたリソースに影響を及ぼすものである場合、その再構成の要求に応答して RCM フレームワークは自動的にスクリプトを起動させます。
以前は、リソースを動的に削除するには、アプリケーションからリソースを手動で解放する必要がありました。または、cfgadm コマンドを -f オプションとともに使用して再構成の操作を強制的に実行することもできますが、このオプションでは、アプリケーションが認識されない状態のままになってしまいます。また、アプリケーションからリソースを手動で解放すると、エラーを引き起こすこともよくあります。
RCM スクリプト機能は、動的再構成のプロセスをシンプルにし、制御性を向上させます。RCM スクリプトの作成により、次のことが可能になります。
デバイスを動的に削除する際に、自動的にデバイスを解放する。また、デバイスがアプリケーションによって開かれている場合、このプロセスがそのデバイスを閉じる。
システムからデバイスを動的に削除する際に、サイト特有のタスクを行う。
RCM スクリプトとは :
RCM デーモンが実行する、実行可能シェルスクリプト (Perl、sh、csh、ksh)、またはバイナリプログラム。Perl は推奨言語です。
スクリプトファイル所有者のユーザー ID を使用して、独自のアドレス領域内で実行されるスクリプト。
システムリソースを動的に再構成するためにユーザーが cfgadm コマンドを使用する際、RCM デーモンによって実行されるスクリプト。
デバイスを動的に削除する際、RCM スクリプトを使用してアプリケーションからデバイスを解放することができます。また、デバイスが現在開かれている状態の場合は、RCM スクリプトはそのデバイスを閉じます。
たとえば、テープのバックアップアプリケーション用の RCM スクリプトは、そのテープのバックアップアプリケーションに対して、テープドライブを閉じるよう通知したり、そのテープのバックアップアプリケーションをシャットダウンするよう通知したりすることができます。
次のようにして、スクリプトを起動できます。
$ script-name command [args ...] |
1 つのスクリプトは、次のような基本手順を実行します。
コマンド行の引数から RCM コマンドを取得します。
そのコマンドを実行します。
結果を、名前 - 値のペアとして stdout (標準出力) に書き込みます。
適切な終了ステータスで終了します。
RCM デーモンは、1 度に 1 スクリプトの 1 つのインスタンスを実行します。たとえば、1 つのスクリプトが実行されている時は、RCM デーモンは最初のスクリプトが終了するまで同じスクリプトを実行しません。
次の RCM コマンドは、RCM スクリプト内に含める必要があります。
scriptinfo - スクリプトの情報を収集します。
register - 対象となるものをリソースに登録します。
resourceinfo - リソースの情報を収集します。
次の RCM コマンドは、必要に応じて一部またはすべてを含めることができます。
queryremove - リソースが解放できるかどうかを照会します。
preremove - リソースを解放します。
postremove - リソースを削除した後の通知を発行します。
undoremove - preremove で実行されたアクションを元に戻します。
これらの RCM コマンドの詳細な説明は、rcmscript(4) のマニュアルページを参照してください。
ユーザーがデバイスを動的に削除する際、RCM デーモンは以下を実行します。
スクリプト内で識別されるリソースのリスト (デバイス名) を収集するために、スクリプトの register コマンドを実行する。
スクリプトに登録されたリソースが動的削除の操作の影響を受ける場合、リソースの削除を行う前に、スクリプトの queryremove/preremove コマンドを実行する。
削除の操作が成功した場合は、スクリプトの postremove コマンドを実行する。削除の操作が失敗した場合は、RCM デーモンはスクリプトの undoremove コマンドを実行する。