この章では、Solaris 環境でデバイスを動的に構成する手順について説明します。Solaris 環境でシステム構成要素がホットプラグ機能をサポートする場合、システムが動作しているときにも、デバイスを追加、削除、または交換することができます。システムの構成要素がホットプラグをサポートしていない場合は、システムをリブートしてデバイスを再構成します。
デバイスを動的に構成する手順については、次の項目を参照してください。
cfgadm コマンドを使用して USB デバイスをホットプラグする方法については、cfgadm コマンドを使った USB デバイスのホットプラグ を参照してください。
デバイスへのアクセス方法については、第 30 章「デバイスへのアクセス (概要)」を参照してください。
「ホットプラグ機能」とは、システムの動作中に、システム構成要素を物理的に取り付け、取り外し、または交換できる機能のことです。「動的再構成」とは、システム構成要素をホットプラグできる機能のことです。また動的再構成は、システムリソースをシステムから物理的に取り外さなくても (なんらかの方法で) システムリソース (ハードウェアとソフトウェアの両方) をシステム内で移動したり、無効にできる機能のことです。
cfgadm コマンドを使用すると、次のデバイスをホットプラグできます。
SPARC および x86 プラットフォームの USB デバイス
SPARC および x86 プラットフォームの SCSI デバイス
x86 プラットフォームの PCI デバイス
cfgadm コマンドには、次のような機能があります。
システム構成要素の状態の表示
システム構成要素の検査
システム構成要素の構成の変更
構成ヘルプメッセージの表示
cfgadm コマンドでシステム構成要素を再構成する利点は、システムが動作しているときでも、システム構成要素を取り付け、取り外し、または交換できることです。さらに、cfgadm コマンドでは、システム構成要素を取り付け、取り外し、または交換するために必要な手順が示されます。
SCSI 構成要素をホットプラグする手順については、cfgadm(1M) のマニュアルページと cfgadm コマンドによる SCSI ホットプラグを参照してください。x86 のシステムにおいて PCI アダプタカードをホットプラグする手順については、x86: cfgadm コマンドによる PCI ホットプラグを参照してください。
すべての SCSI と PCI のコントローラが cfgadm コマンドによるホットプラグ機能をサポートしているわけではありません。
Sun が提供する高可用性の一部として、動的再構成は他の階層化製品 (代替パス指定やフェイルオーバーソフトウェアなど) とともに使用することをお勧めします。両方の製品ともデバイス障害に対する耐性を提供します。
高可用性ソフトウェアがなくても、障害が発生したデバイスを交換できます。この場合、適切なアプリケーションを手動で停止し、重要でないファイルシステムのマウントを手動で解除し、デバイスを取り付けまたは取り外します。
企業レベルのシステムなど、特定のハードウェア構成に対するデバイスのホットプラグについては、お使いのハードウェア構成のマニュアルを参照してください。
cfgadm コマンドは接続点についての情報を表示します。「接続点」とは、動的再構成を行うことができるシステム内の特定の場所のことです。
接続点は、次の要素から構成されています。
占有装置 (occupant): システムに構成できるハードウェア構成要素のことです。
受容体 (receptacle): 占有装置を受け入れる場所のことです。
接続点は、論理と物理の両方の接続点 ID (Ap_Id) で表現されます。物理 Ap_Id は接続点の物理的なパス名です。論理 Ap_Id は物理 Ap_Id に代わるユーザーに理解しやすい ID です。Ap_Id の詳細については、cfgadm(1M) のマニュアルページを参照してください。
通常、SCSI HBA (Host Bus Adapter)、つまり、SCSI コントローラの論理 Ap_Id はコントローラ番号 (c0 など) で表現されます。
コントローラ番号が SCSI HBA に割り当てられていない場合、内部的に生成された固有の識別子が提供されます。たとえば、SCSI コントローラの固有な識別子は次のようになります。
fas1:scsi
通常、SCSI デバイスの論理 Ap_Id は次のようになります。
HBA-logical-apid::device-identifier
次の例において、c0 は SCSI HBA の論理 Ap_Id です。
c0::dsk/c0t3d0
通常、デバイス識別子は /dev ディレクトリ内にある論理デバイス名から導き出されます。たとえば、論理デバイス名が /dev/rmt/1 のテープデバイスの論理 Ap_Id は次のようになります。
c0::rmt/1
SCSI デバイスの論理 Ap_Id を /dev ディレクトリ内にある論理デバイス名から導き出すことができない場合、内部的に生成された固有の識別子が提供されます。たとえば、/dev/rmt/1 テープデバイスの識別子は、次のようになります。
c0::st4
SCSI Ap_Id の詳細については、cfgadm_scsi(1M) のマニュアルページを参照してください。
cfgadm コマンドはすべてのリソースと動的再構成の操作を、一般的な状態 (configured、unconfigured など) や操作 (connect、configure、unconfigure など) を示す用語で表現します。一般的な状態や操作の詳細については、cfgadm(1M) のマニュアルページを参照してください。
次に、SCSI HBA 接続点の受容体と占有装置の状態を説明します。
受容体の状態 |
説明 |
占有装置の状態 |
説明 |
---|---|---|---|
empty |
SCSI HBA には利用できない |
configured |
1 つまたは複数のデバイスがバス上で構成されている |
disconnected |
バスは休止している |
unconfigured |
デバイスは構成されていない |
connected |
バスはアクティブである |
|
|
次に、SCSI デバイス接続点の受容体と占有装置の状態を説明します。
受容体の状態 |
説明 |
占有装置の状態 |
説明 |
---|---|---|---|
empty |
SCSI デバイスには利用できない |
configured |
デバイスが構成されている |
disconnected |
バスは休止している |
unconfigured |
デバイスは構成されていない |
connected |
バスはアクティブである |
|
|
SCSI 接続点の状態は特別なハードウェアによって示されない限り未知です。SCSI 構成要素の構成情報を表示する手順については、SCSI デバイスに関する情報を表示する方法を参照してください。
デバイスドライバがホットプラグ機能をサポートしている場合、必須でないシステムリソースとして機能している PCI アダプタカードは取り外すことができます。重要なシステムリソースとして機能している PCI アダプタカードは取り外すことができません。PCI アダプタカードが取り外し可能であるためには、次の条件が必要です。
デバイスドライバはホットプラグ機能をサポートしていなければなりません。
重要なリソースには代替パスでアクセスできなければなりません。
たとえば、システムにインストールされているイーサネットカードが 1 つしかない場合、ネットワーク接続を切断せずにこのイーサネットカードを取り外すことは不可能です。このような環境でネットワーク接続をアクティブに保ったままイーサネットカードを取り外すには、別の階層化ソフトウェアサポートが必要です。
PCI アダプタカードをシステムに取り付けるには、次の条件が必要です。
スロットが利用できなければなりません。
デバイスドライバが当該アダプタカードのホットプラグ機能をサポートしていなければなりません。
PCI アダプタカードの取り付けまたは取り外しの手順については、x86: cfgadm コマンドによる PCI ホットプラグを参照してください。
作業 |
説明 |
参照先 |
---|---|---|
1. SCSI デバイスについての情報の表示 |
SCSI コントローラおよびデバイスについての情報を表示する | |
2. SCSI コントローラの構成解除 |
SCSI コントローラの構成を解除する | |
3. SCSI コントローラの構成 |
構成を解除された SCSI コントローラを構成する | |
4. SCSI デバイスの構成 |
SCSI デバイスを構成する | |
5. SCSI コントローラを切り離す |
特定の SCSI コントローラを切り離す | |
6. SCSI コントローラの接続 |
切り離された特定の SCSI コントローラを接続する | |
7. SCSI デバイスを SCSI バスに取り付ける |
特定のSCSI デバイスを SCSI バスに取り付ける | |
8. SCSI コントローラ上の同一デバイスと交換 |
SCSI バス上のデバイスを、同じタイプの別のデバイスに交換する | |
9. SCSI デバイスを取り外す |
SCSI デバイスをシステムから取り外す | |
10. SCSI 構成に関する問題の障害追跡 |
失敗した SCSI 構成解除操作を解決する |
この節では、cfgadm コマンドを使用してさまざまな SCSI ホットプラグ処理を実行する方法について説明します。
この節で説明する手順では、特定のデバイスを使用して、cfgadm コマンドで SCSI 構成要素をホットプラグする例を示します。cfgadm コマンドで提供されるデバイス情報や表示されるデバイス情報は、システム構成によって異なります。
次の手順では、SCSI コントローラ c0 と c1、およびコントローラに接続されたデバイスを例として使用して、cfgadm コマンドを使用して表示可能なデバイス構成情報を示します。
SCSI デバイスが cfgadm コマンドでサポートされていない場合、その SCSI デバイスは cfgadm コマンドの出力には表示されません。
スーパーユーザーになります。
システムの接続点についての情報を表示します。
# cfgadm -l Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c1 scsi-bus connected configured unknown |
この例では、c0 と c1 は 2 つの SCSI コントローラを表しています。
システムの SCSI コントローラとこれらに接続されているデバイスについての情報を表示します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 unavailable connected unconfigured unknown |
cfgadm -l コマンドは、SCSI デバイスではなく、SCSI HBA についての情報を表示します。ディスクやテープなどの SCSI デバイスについての情報を表示するには、cfgadm -al コマンドを使用してください。
次の手順では、SCSI 接続点だけが表示されます。画面に表示される接続点はシステムによって異なります。
次の手順では、SCSI コントローラ c1 を使用して、SCSI デバイスの構成を解除する例を示します。
スーパーユーザーになります。
SCSI コントローラの構成を解除します。
# cfgadm -c unconfigure c1 |
SCSI コントローラの構成が解除されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected unconfigured unknown |
c1 の Occupant の列に unconfigured と表示されていることに注目してください。これは、SCSI バスに占有装置が構成されていないことを示します。
構成解除処理が失敗した場合は、失敗した SCSI 構成解除操作の解決方法を参照してください。
次の手順では、SCSI コントローラ c1 を使用して、SCSI コントローラを構成する例を示します。
スーパーユーザーになります。
SCSI コントローラを構成します。
# cfgadm -c configure c1 |
SCSI コントローラが構成されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 unavailable connected unconfigured unknown |
前述の構成を解除する例では、SCSI バス上のすべてのデバイスを削除しました。この例では、すべてのデバイスをシステムに構成し直します。
次の手順では、SCSI ディスク c1t4d0 を使用して、SCSI デバイスを構成する例を示します。
スーパーユーザーになります。
構成するデバイスを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 unavailable connected unconfigured unknown |
SCSI デバイスを構成します。
# cfgadm -c configure c1::dsk/c1t4d0 |
SCSI デバイスが構成されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
SCSI デバイスを切り離すときは十分に注意してください。特に、ルート (/)、usr、var、swap パーティションなどの重要なファイルシステムが入っているディスクのコントローラを扱うときは細心の注意を払ってください。動的再構成ソフトウェアは、システムがハングする原因をすべて発見できるわけではありません。この手順は、十分注意して実行してください。
次の手順では、SCSI コントローラ c1 を使用して、SCSI デバイスを切り離す例を示します。
スーパーユーザーになります。
デバイスを切り離す前に、デバイスが接続されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
SCSI コントローラを切り離します。
# cfgadm -c disconnect c1 WARNING: Disconnecting critical partitions may cause system hang. Continue (yes/no)? y |
このコマンドは、cfgadm -c connect コマンドを使用するまで、SCSI バス上のすべての入出力動作を中断します。cfgamd コマンドは基本的な検査を行い、重要なパーティションが切り離されるのを防ぎます。しかし、すべての場合を発見できるわけではありません。このコマンドの使い方が不適切な場合、システムがハングし、システムをリブートしなければならなくなる可能性もあります。
SCSI バスが切り離されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 unavailable disconnected configured unknown c1::dsk/c1t10d0 unavailable disconnected configured unknown c1::dsk/c1t4d0 unavailable disconnected configured unknown |
コントローラとそれに接続されていたすべてのデバイスがシステムから切り離されました。
次の手順は、SCSI コントローラ c1 を使用して、 SCSI コントローラを接続する例を示します。
スーパーユーザーになります。
デバイスを接続する前に、デバイスが切り離されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 unavailable disconnected configured unknown c1::dsk/c1t10d0 unavailable disconnected configured unknown c1::dsk/c1t4d0 unavailable disconnected configured unknown |
SCSI コントローラを接続します。
# cfgadm -c connect c1 |
SCSI コントローラが接続されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
SCSI コントローラ c1 を使用して、SCSI デバイスを SCSI バスに取り付ける方法を説明します。
デバイスを取り付けるときは、デバイス自身の Ap_Id ではなく、デバイスを取り付ける SCSI HBA (コントローラ) の Ap_Id を指定します。
スーパーユーザーになります。
現在の SCSI 構成を確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown |
SCSI デバイスを SCSI バスに取り付けます。
# cfgadm -x insert_device c1 Adding device to SCSI HBA: /devices/sbus@1f,0/SUNW,fas@1,8800000 This operation will suspend activity on SCSI bus: c1 |
Continue (yes/no)?というプロンプトに y と入力して、次に進みます。
Continue (yes/no)? y SCSI bus quiesced successfully. It is now safe to proceed with hotplug operation. |
ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。
デバイスを接続して、電源を入れます。
Enter y if operation is complete or n to abort (yes/no)? というプロンプトに y と入力します。
Enter y if operation is complete or n to abort (yes/no)? y |
デバイスが取り付けられていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
コントローラ c1 に新しいディスクが取り付けられました。
次の手順では、SCSI ディスク c1t4d0 を使用して、SCSI コントローラ上の同一デバイスを交換する例を示します。
スーパーユーザーになります。
現在の SCSI 構成を確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
SCSI バス上のデバイスを、同じタイプの別のデバイスに交換します。
# cfgadm -x replace_device c1::dsk/c1t4d0 Replacing SCSI device: /devices/sbus@1f,0/SUNW,fas@1,8800000/sd@4,0 This operation will suspend activity on SCSI bus: c1 |
Continue (yes/no)? というプロンプトに y と入力して、次に進みます。
ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。
Continue (yes/no)? y SCSI bus quiesced successfully. It is now safe to proceed with hotplug operation. |
デバイスの電源を切ってから、そのデバイスを取り外します。
交換用のデバイスを取り付けます。そして、取り付けたデバイスの電源を入れます。
交換用のデバイスは取り外したデバイスと同じタイプであり、同じアドレス (ターゲットと論理ユニット番号) でなければなりません。
Enter y if operation is complete or n to abort (yes/no)? というプロンプトに y と入力します。
Enter y if operation is complete or n to abort (yes/no)? y |
デバイスが交換されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
次に、SCSI ディスク c1t4d0 を使用して、SCSI コントローラ上のデバイスを取り外す例を示します。
スーパーユーザーになります。
現在の SCSI 構成を確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown c1::dsk/c1t4d0 disk connected configured unknown |
SCSI デバイスをシステムから取り外します。
# cfgadm -x remove_device c1::dsk/c1t4d0 Removing SCSI device: /devices/sbus@1f,0/SUNW,fas@1,8800000/sd@4,0 This operation will suspend activity on SCSI bus: c1 |
Continue (yes/no)? というプロンプトに y と入力して、次に進みます。
Continue (yes/no)? y SCSI bus quiesced successfully. It is now safe to proceed with hotplug operation. |
ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。
デバイスの電源を切ってから、そのデバイスを取り外します。
Enter y if operation is complete or n to abort (yes/no)? というプロンプトに y と入力します。
Enter y if operation is complete or n to abort (yes/no)? y |
デバイスがシステムから取り外されていることを確認します。
# cfgadm -al Ap_Id Type Receptacle Occupant Condition c0 scsi-bus connected configured unknown c0::dsk/c0t0d0 disk connected configured unknown c0::rmt/0 tape connected configured unknown c1 scsi-bus connected configured unknown c1::dsk/c1t3d0 disk connected configured unknown |
この節では、SCSI 構成に関する問題の障害追跡を行うために、エラーメッセージとその解決策について説明します。SCSI 構成に関する問題の障害追跡の詳細については、cfgadm(1M) のマニュアルページを参照してください。
cfgadm: Component system is busy, try again: failed to offline: device path Resource Information ------------------ -------------------------- /dev/dsk/c1t0d0s0 mounted filesystem "/file-system" |
ファイルシステムがマウントされているデバイスを取り外しまたは交換しようとしました。
エラーメッセージのリストにあるファイルシステムのマウントを解除してから、もう一度 cfgadm コマンドを実行します。
cfgadm コマンドを使用して、スワップデバイス、専用のダンプデバイスなどのシステムリソースを取り外すと、システムリソースがアクティブな場合、次のようなエラーメッセージが表示されます。
cfgadm: Component system is busy, try again: failed to offline: device path Resource Information ------------------ -------------------------- /dev/dsk/device-name swap area |
1 つまたは複数の構成されているスワップ領域を削除または置き換えようとしました。
指定されたデバイス上のスワップ領域の構成を解除してから、再度 cfgadm を実行します。
cfgadm: Component system is busy, try again: failed to offline: device path Resource Information ------------------ -------------------------- /dev/dsk/device-name dump device (swap) |
スワップ領域上に構成されているダンプデバイスを取り外そうとしたか、置き換えようとしました。
スワップ領域に構成されているダンプデバイスの構成を解除してから、再度 cfgadm を実行します。
cfgadm: Component system is busy, try again: failed to offline: device path Resource Information ------------------ -------------------------- /dev/dsk/device-name dump device (dedicated) |
専用ダンプデバイスを取り外そうとしたか、置き換えようとしました。
専用ダンプデバイスの構成を解除し、cfgadm 処理を再実行します。
1 つ以上のターゲットデバイスが使用中である場合、および SCSI 構成解除操作が失敗した場合、次の手順を使用します。この手順を使用しないと、将来、このコントローラおよびターゲットデバイスの動的再構成操作が失敗し、dr in progress メッセージが表示されます。
作業 |
説明 |
参照先 |
---|---|---|
1. PCI スロット構成情報の表示 |
システムの PCI ホットプラグ可能なデバイスとスロットの状態を表示する | |
2. PCI アダプタカードを取り外す |
カードを構成解除してからスロットから電源を外し、システムからカードを取り外す | |
3. PCI アダプタカードを取り付ける |
アダプタカードをホットプラグ可能なスロットに挿入する。スロットを電源に接続し、カードを構成する | |
4. PCI 構成に関する問題の障害追跡 |
PCI 構成障害に対処するために、エラーメッセージと解決策を確認する |
この節では、x86 システム上で PCI アダプタカードをホットプラグする手順について説明します。
次の例では、簡潔にするため、PCI 接続点だけを表示しています。画面に表示される接続点はシステムによって異なります。
cfgadmin コマンドは、システム上のPCI ホットプラグ可能なデバイスとスロットの状態を表示します。詳細については cfgadm(1M) のマニュアルページを参照してください。
スーパーユーザーになります。
PCI スロット構成情報を表示します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp connected configured ok pci1:hpc0_slot4 unknown empty unconfigured unknown |
具体的な PCI デバイス情報を表示します。
# cfgadm -s "cols=ap_id:type:info" pci Ap_Id Type Information pci1:hpc0_slot0 unknown Slot 7 pci1:hpc0_slot1 unknown Slot 8 pci1:hpc0_slot2 unknown Slot 9 pci1:hpc0_slot3 ethernet/hp Slot 10 pci1:hpc0_slot4 unknown Slot 11 |
論理 Ap_Id の pci1:hpc0_slot0 は、ホットプラグ可能なスロット Slot 7 の論理 Ap_Id です。構成要素 hpc0 はこのスロットのホットプラグ可能なアダプタカードを示し、pci1 は PCI バスのインスタンスを示します。Type フィールドは、スロット中の PCI アダプタカードのタイプを示します。
スーパーユーザーになります。
PCI アダプタカードが入っているスロットを確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp connected configured ok pci1:hpc0_slot4 unknown empty unconfigured unknown |
デバイスを開いているアプリケーションを停止します。
デバイスの構成を解除します。
# cfgadm -c unconfigure pci1:hpc0_slot3 |
デバイスの構成が解除されていることを確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp connected unconfigured unknown pci1:hpc0_slot4 unknown empty unconfigured unknown |
スロットへの電源を切り離します。
# cfgadm -c disconnect pci1:hpc0_slot3 |
デバイスが切り離されていることを確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp disconnected unconfigured unknown pci1:hpc0_slot4 unknown empty unconfigured unknown |
スロットのラッチを開いて PCI アダプタカードを取り外します。
スーパーユーザーになります。
ホットプラグ可能なスロットに PCI アダプタカードを挿入します。
PCI アダプタカードを挿入した後に、どのスロットに PCI アダプタカードが入っているかを確認します。ラッチを閉じます。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp disconnected unconfigured unknown pci1:hpc0_slot4 unknown empty unconfigured unknown |
スロットへの電源を接続します。
# cfgadm -c connect pci1:hpc0_slot3 |
スロットが接続されていることを確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp connected unconfigured unknown pci1:hpc0_slot4 unknown empty unconfigured unknown |
PCI アダプタカードを構成します。
# cfgadm -c configure pci1:hpc0_slot3 |
スロット中の PCI アダプタカードの構成を確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition pci1:hpc0_slot0 unknown empty unconfigured unknown pci1:hpc0_slot1 unknown empty unconfigured unknown pci1:hpc0_slot2 unknown empty unconfigured unknown pci1:hpc0_slot3 ethernet/hp connected configured unknown pci1:hpc0_slot4 unknown empty unconfigured unknown |
新しいデバイスの場合、サポートソフトウェアを構成します。
たとえば、デバイスがイーサネットカードの場合、ifconfig コマンドでインタフェースを設定します。
cfgadm: Configuration operation invalid: invalid transition |
無効な移行を行いました。
cfgadm -c コマンドが適切に発行されているかどうかを確認します。cfgadm コマンドで現在の受容体と占有装置の状態を確認し、Ap_id が正しいことを確認します。
cfgadm: Attachment point not found |
指定した接続点は見つかりません。
接続点が正しいかどうかを確認します。cfgadm コマンドを使用して、利用可能な接続点のリストを表示します。また、物理パスを調べて、接続点が現在も残っているかどうかを確認します。
cfgadm コマンド以外にも、ホットプラグ処理中に便利なコマンドがいくつかあります。prtconf コマンドは、Solaris がハードウェアを認識するかどうかを表示します。ハードウェアの挿入後に prtconf コマンドを使用して、ハードウェアが認識されているかどうかを確認します。構成後に prtconf -D コマンドを使用して、新たにインストールしたハードウェアデバイスにドライバが設定されているかどうかを確認します。
Reconfiguration Coordination Manager (RCM) は、システムコンポーネントの動的な除去を管理するフレームワークです。RCM を使用すると、システムリソースを順番に登録および解放することができます。
新しい RCM スクリプト機能を使用すると、アプリケーションを停止したり、動的な再構成の間にアプリケーションからデバイスを手際良く解放したりする独自のスクリプトを記述できます。スクリプトによって登録されたリソースに要求が影響を与える場合、RCM フレームワークは再構成要求に応じてスクリプトを自動的に起動します。
リソースを動的に除去する場合は、アプリケーションからリソースを手動で解放しておく必要があります。あるいは、-f オプションを指定して cfgadm コマンドを使用して再構成オペレーションを強制することも可能でした。ただし、このオプションはアプリケーションを認識不能な状態のままにする可能性があります。また、アプリケーションからリソースを手動で解放すると、一般にエラーが発生します。
RCM スクリプト機能を使うと、動的再構成処理を簡単かつ効果的に実行できます。RCM スクリプトを作成すると、次の操作を実行できます。
動的にデバイスを取り外したときにデバイスが自動的に解放される。デバイスがアプリケーションによって起動した場合は、この処理によって、デバイスも終了する
システムからデバイスを動的に取り外すときに、サイト固有のタスクを実行する
RCM スクリプトは、次のとおりです。
実行可能シェルスクリプト (Perl、 sh、csh、または ksh) または RCM デーモンが実行するバイナリプログラム。推奨言語は、Perl
スクリプトファイル所有者のユーザー ID を使用することにより、自分のアドレス領域で実行されるスクリプト
cfgadm コマンドを使ってシステムリソースを動的に再構成するときに、RCM デーモンによって実行されるスクリプト
RCM スクリプトを使用した場合、デバイスを動的に取り外すと、デバイスがアプリケーションから解放されます。デバイスが開いている場合には、RCM スクリプトによって閉じられます。
たとえば、テープバックアップアプリケーションで RCM スクリプトを使用して、テープドライブを終了させたり、テープバックアップアプリケーションをシャットダウンしたりすることができます。
次のようにしてスクリプトを起動します。
$ script-name command [args ...] |
スクリプトにより、次の基本的な手順が実行されます。
コマンド行引数から RCM コマンドを取得する
コマンドを実行する
結果を名前と値のペアで stdout に記述する
適切な終了ステータスで終了する
RCM デーモンは、スクリプトのインスタンスを同時に 1 つ実行します。たとえば、RCM デーモンは、スクリプトの実行中には、そのスクリプトが終了するまで同じスクリプトを実行しません。
次の RCM コマンドを RCM スクリプトに含める必要があります。
scriptinfo - スクリプト情報を収集する
register - リソースに処理対象を登録する
resourceinfo - リソース情報を収集する
次の RCM コマンドの一部またはすべてを RCM スクリプトに含めることができます。
queryremove - リソースが解放されたかどうかを問い合わせる
preremove - リソースを解放する
postremove - リソースの削除後に通知する
undoremove - preremove で実行された動作を元に戻す
これらの RCM コマンドの詳細については、rcmscript(4) のマニュアルページを参照してください。
デバイスを動的に取り外すと、RCM デーモンにより次のコマンドが実行されます。
スクリプトで識別されたリソースリスト (デバイス名) を収集するための、スクリプトの register コマンドが実行される
スクリプトの登録されたリソースが動的な取り外し操作によって影響を受ける場合、リソースを取り外す前にスクリプトの queryremove/preremove コマンドが実行される
取り外し操作が成功した場合に、スクリプトの postremove コマンドが実行される。ただし、取り外し操作に失敗した場合、RCM デーモンによりスクリプトの undoremove コマンドが実行される
次の節では、アプリケーション開発者およびシステム管理者のために RCM スクリプト作業について説明します。
次の作業マップでは、RCM スクリプトを作成するアプリケーション開発者の作業について説明します。
作業 |
説明 |
参照先 |
---|---|---|
1. アプリケーションが使用するリソースを特定する |
アプリケーションが使用するリソース (デバイス名) を特定する。このデバイスは動的に取り外される可能性がある |
cfgadm(1M) |
2. リソースを解放するコマンドを特定する |
アプリケーションからリソースを完全に解放するようにアプリケーションに通知するコマンドを特定する |
アプリケーションのマニュアル |
3. リソースを取り外した後に使用するコマンドを特定する |
リソースを取り外したことをアプリケーションに通知するコマンドを含める |
rcmscript(4) |
4. リソースの取り外しに失敗した場合のコマンドを特定する |
使用可能なリソースについてアプリケーションに通知するコマンドを含める |
rcmscript(4) |
5. RCM スクリプトを記述する |
前の作業で特定した情報に基づいて RCM スクリプトを記述する | |
6. RCM スクリプトをインストールする |
適切なスクリプトディレクトリにスクリプトを追加する | |
7. RCM スクリプトをテストする |
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストする |
ここでは、サイトをカスタマイズするために RCM スクリプトを作成するシステム管理者の作業について説明します。
作業 |
説明 |
参照先 |
---|---|---|
1. 動的に移動するリソースを特定する |
cfgadm -l コマンドを使って移動する可能性があるリソース (デバイス名) を特定する |
cfgadm(1M) |
2. 停止するアプリケーションを特定する |
アプリケーションを完全に停止させるコマンドを特定する |
アプリケーションのマニュアル |
3. リソースの取り外し前および取り外し後のコマンドを特定する |
リソースを取り外す前後の動作を特定する |
rcmscript(4) |
4. RCM スクリプトを記述する |
前の作業で特定した情報に基づいて RCM スクリプトを記述する | |
5. RCM スクリプトをインストールする |
適切なスクリプトディレクトリにスクリプトを追加する | |
6. RCM スクリプトをテストする |
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストする |
次の規則に従って、スクリプトに vendor、service という名前を付ける必要があります。
vendor |
スクリプトを提供するベンダーのストックシンボル、またはベンダーを識別する固有名 |
service |
スクリプトが表すサービス名 |
RCM スクリプトのインストールまたは削除を行うには、スーパーユーザー (root) の権限が必要です。この表を使用して、RCM スクリプトをインストールするディレクトリを判断してください。
表 28–1 RCM スクリプトディレクトリ
ディレクトリの位置 |
スクリプトタイプ |
---|---|
/etc/rcm/scripts |
特定のシステム用のスクリプト |
/usr/platform/`uname -i`/lib/rcm/scripts |
特定のハードウェア実装用のスクリプト |
/usr/platform/`uname -m`/lib/rcm/scripts |
特定のハードウェアクラス用のスクリプト |
/usr/lib/rcm/scripts |
任意のハードウェア用のスクリプト |
スーパーユーザーになります。
スクリプトを 表 28–1 で説明されている適切なディレクトリにコピーします。
たとえば、次のようになります。
# cp SUNW,sample.pl /usr/lib/rcm/scripts |
スクリプトのユーザー ID およびグループ ID を希望の値に変更します。
# chown user:group /usr/lib/rcm/scripts/SUNW,sample.pl |
SIGHUP を RCM デーモンに送信します。
# pkill -HUP -x -u root rcm_daemon |
スーパーユーザーになります。
RCM スクリプトディレクトリからスクリプトを削除します。
たとえば、次のようになります。
# rm /usr/lib/rcm/scripts/SUNW,sample.pl |
SIGHUP を RCM デーモンに送信します。
# pkill -HUP -x -u root rcm_daemon |
スクリプトを実行する前にコマンド行シェルに RCM_ENV_FORCE などの環境変数を設定します。
たとえば、Korn シェルで次のように設定します。
$ export RCM_ENV_FORCE=TRUE |
コマンド行から手動でスクリプトコマンドを実行してスクリプトをテストします。
たとえば、次のようになります。
$ script-name scriptinfo $ script-name register $ script-name preremove resource-name $ script-name postremove resource-name |
スクリプトの各 RCM スクリプトコマンドにより、適切な出力結果が stdout に印刷されるかどうかを確認します。
適切なスクリプトディレクトリにスクリプトをインストールします。
詳細については、RCM スクリプトのインストール方法を参照してください。
動的な削除操作を実行してスクリプトをテストします。
たとえば、スクリプトによってデバイス /dev/dsk/c1t0d0s0 が登録されたとします。次のコマンドを実行してください。
$ cfgadm -c unconfigure c1::dsk/c1t0d0 $ cfgadm -f -c unconfigure c1::dsk/c1t0d0 $ cfgadm -c configure c1::dsk/c1t0d0 |
上記のコマンドは、システムの状態を変化させたり、システム障害を招くおそれもあるため、これらのコマンドを十分理解しておくことは大切です。
ここでは、RCM スクリプトを使用したテープバックアップの例を示します。
テープバックアップ用の RCM スクリプトは、次の手順を実行します。
RCM コマンドのディスパッチテーブルを設定します。
指定した RCM コマンドに対応するディスパッチルーチンを呼び出し、未実装の RCM コマンドのステータス 2 で終了させます。
scriptinfo セクションを設定します。
rcm_script_func_info=Tape backup appl script for DR |
すべてのテープドライブのデバイス名を stdout に印刷して、すべてのテープドライバをシステムに登録します。
rcm_resource_name=/dev/rmt/$f |
rcm_failure_reason=$errmsg |
テープデバイスのリソース情報を設定します。
rcm_resource_usage_info=Backup Tape Unit Number $unit |
バックアップアプリケーションがそのデバイスを使用しているかどうか確認して、preremove 情報を設定します。バックアップアプリケーションがそのデバイスを使用していない場合、動的再構成操作が続行されます。バックアップアプリケーションがそのデバイスを使用している場合、スクリプトにより RCM_ENV_FORCE が検査されます。RCM_ENV_FORCE が FALSE に設定されている場合、スクリプトにより動的再構成操作が拒否され、次のメッセージが印刷されます。
rcm_failure_reason=tape backup in progress pid=... |
RCM_ENV_FORCE が TRUE に設定されている場合、バックアップアプリケーションが停止し、再構成操作が続行されます。
RCM スクリプトを使わずに cfgadm コマンドを使ってテープドライブを取り外した場合、次のような結果になります。
バックアップアプリケーションがテープドライブを使用していない場合に cfgadm コマンドを使用すると、操作は正常に実行されます。
バックアップアプリケーションがテープドライブを使用中に cfgadm コマンドを使用すると、操作が失敗します。
RCM スクリプトと cfgadm コマンドを使ってテープドライブを取り外した場合、次のような結果になります。
バックアップアプリケーションがテープドライブを使用していない場合に cfgadm コマンドを使用すると、操作は正常に実行されます。
バックアップアプリケーションがテープドライブを使用しているときに、-f オプションを指定せずに cfgadm コマンドを使用すると、次のようなメッセージが表示され、操作が失敗します。
tape backup in progress pid=... |
バックアップアプリケーションがテープドライブを使用しているときに、-f オプションを指定して cfgadm コマンドを使用すると、スクリプトによってバックアップアプリケーションが停止され、cfgadm 操作が正常に実行されます。
#! /usr/bin/perl -w # # サイト用にカスタマイズされた RCM スクリプトの例 # # RCM_ENV_FORCE が FALSE の場合、 # RCM はテープドライブがバックアップのために # 使用されているときは、ドライブを解放できない # # RCM_ENV_FORCE が TRUE の場合、 # DR はテープドライブをバックアップのために # 使用しているバックアップアプリケーションを終了してテープドライブを # 取り外すことができる。 # use strict; my ($cmd, %dispatch); $cmd = shift(@ARGV); # RCM コマンドのテーブルをディスパッチする %dispatch = ( "scriptinfo" => \&do_scriptinfo, "register" => \&do_register, "resourceinfo" => \&do_resourceinfo, "queryremove" => \&do_preremove, "preremove" => \&do_preremove ); if (defined($dispatch{$cmd})) { &{$dispatch{$cmd}}; } else { exit (2); } sub do_scriptinfo { print "rcm_script_version=1\n"; print "rcm_script_func_info=Tape backup appl script for DR\n"; exit (0); } sub do_register { my ($dir, $f, $errmsg); $dir = opendir(RMT, "/dev/rmt"); if (!$dir) { $errmsg = "Unable to open /dev/rmt directory: $!"; print "rcm_failure_reason=$errmsg\n"; exit (1); } while ($f = readdir(RMT)) { # 非表示のファイルや同一デバイスの複数の名前を無視する if (($f !~ /^\./) && ($f =~ /^[0-9]+$/)) { print "rcm_resource_name=/dev/rmt/$f\n"; } } closedir(RMT); exit (0); } sub do_resourceinfo { my ($rsrc, $unit); $rsrc = shift(@ARGV); if ($rsrc =~ /^\/dev\/rmt\/([0-9]+)$/) { $unit = $1; print "rcm_resource_usage_info=Backup Tape Unit Number $unit\n"; exit (0); } else { print "rcm_failure_reason=Unknown tape device!\n"; exit (1); } } sub do_preremove { my ($rsrc); $rsrc = shift(@ARGV); # このリソースをバックアップアプリケーションが # 使用している場合にチェックする # if ($rsrc 上でバックアップアプリケーション # が動作していない場合) { # DR を続行させる # exit (0); #} # # RCM_ENV_FORCE が FALSE の場合、処理を拒否する # RCM_ENV_FORCE が TRUE の場合、 # バックアップアプリケーションを終了して # DR が処理を続行できるようにする # if ($ENV{RCM_ENV_FORCE} eq 'TRUE') { if ($cmd eq 'preremove') { # kill the tape backup application } exit (0); } else { # # テープバックアップアプリケーションによって # デバイスが使用されていたため、テープドライブを # 解放できなかったことを示す # print "rcm_failure_reason=tape backup in progress pid=...\n" ; exit (3); } } |