この章では、Solaris OS でデバイスを動的に構成する手順について説明します。Solaris OS でシステム構成要素がホットプラグ機能をサポートする場合、システムが動作しているときにも、デバイスを追加、削除、または交換できます。システムの構成要素がホットプラグをサポートしていない場合は、システムをリブートしてデバイスを再構成します。
デバイスを動的に構成する手順については、次の項目を参照してください。
cfgadm コマンドを使用して USB デバイスのホットプラグを実行する方法については、「cfgadm コマンドを使った USB デバイスのホットプラグ」を参照してください。
cfgadm コマンドを使用して InfiniBand デバイスのホットプラグを実行する方法については、第 9 章InfiniBand デバイスの使用 (概要/手順)を参照してください。
デバイスへのアクセスに関する情報については、「デバイスへのアクセス」を参照してください。
「ホットプラグ機能」とは、システムの動作中に、システム構成要素を物理的に取り付け、取り外し、または交換できる機能のことです。「動的再構成」とは、システム構成要素のホットプラグを実行できる機能のことです。また動的再構成は、システムリソースをシステムから物理的に取り外さなくても (なんらかの方法で) システムリソース (ハードウェアとソフトウェアの両方) をシステム内で移動したり、無効にできる機能のことです。
一般に、次のバスタイプはホットプラグ対応です。
USB
ファイバチャネル
1394
ATA
SCSI
Infiniband
また、cfgadm コマンドを使用すると、次のデバイスのホットプラグを実行できます。
SPARC および x86 プラットフォームの USB デバイス
SPARC および x86 プラットフォームの SCSI デバイス
SPARC および x86 プラットフォームの PCI デバイス
SPARC または x86 プラットフォームの PCIe デバイス
SPARC および x86 デバイス上の InfiniBand デバイス
cfgadm コマンドには、次のような機能があります。
システム構成要素の状態の表示
システム構成要素の検査
システム構成要素の構成の変更
構成ヘルプメッセージの表示
cfgadm コマンドでシステム構成要素を再構成する利点は、システムが動作しているときでも、システム構成要素を取り付け、取り外し、または交換できることです。さらに、cfgadm コマンドでは、システム構成要素を取り付け、取り外し、または交換するために必要な手順が示されます。
構成要素のホットプラグを実行する手順については、次を参照してください。
すべての 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 アダプタカードが取り外し可能であるためには、次の条件が必要です。
デバイスドライバはホットプラグ機能をサポートしていなければなりません。
重要なリソースには代替パスでアクセスできなければなりません。
たとえば、システムにインストールされている Ethernet カードが 1 つしかない場合、ネットワーク接続を切断せずにこの Ethernet カードを取り外すことは不可能です。このような環境でネットワーク接続をアクティブに保ったまま Ethernet カードを取り外すには、別の階層化ソフトウェアサポートが必要です。
PCI アダプタカードをシステムに取り付けるには、次の条件が必要です。
スロットが利用できなければなりません。
デバイスドライバが当該アダプタカードのホットプラグ機能をサポートしていなければなりません。
PCI アダプタカードの取り付けまたは取り外しの手順については、「cfgadm コマンドによる PCI または PCIe ホットプラグ」を参照してください。
hotplug コマンドを使ってホットプラグ処理可能な接続を管理できます。ここで言う接続とは、PCI Express (PCIe) および PCI SHPC デバイス上のコネクタまたはポートのみを指します。ホットプラグコネクタとは、コンポーネントの挿入や取り外しが行われるシステムの物理的機構のことです。ホットプラグポートとは、システムへのデバイスの接続が管理される、システムデバイスツリー内の論理表現です。
hotplug 機能を使用することで、オンボードデバイスを含むデバイスをシステムに物理的に追加したり取り外したりせずに、オンラインやオフラインにできます。
hotplug コマンドを使ってデバイスを管理するには、hotplug サービスを有効にする必要があります。
# svcadm enable svc:/system/hotplug:default |
次の例は、hotplug コマンドの使用方法を示しています。
次のようにして、システム内のホットプラグ処理可能な PCI/PCIe コネクタ/ポート (仮想および物理) をすべて表示します。
# hotplug list -lv |
PCIe スロットの Ethernet カードを構成します。次に例を示します。
# hotplug enable /pci0,0 pcie0 |
PCIe スロットの Ethernet カードの構成を解除します。次に例を示します。
# hotplug disable /pci0,0 pcie0 |
PCI デバイスノードをオフラインにして、ノードのデバイスドライバを切り離します。次に例を示します。
# hotplug offline /pci0,0/pci1 pci.0,2 |
PCI デバイスノードをオンラインにして、ノードのデバイスドライバを接続します。次に例を示します。
# hotplug online /pci0,0/pci1 pci.0,2 |
hotplug コマンドを使用するには、次のサービスが動作している必要があります。
svc:/system/hotplug:default |
動作していない場合は、次のメッセージが表示されます。
ERROR: hotplug service is not available. |
サポートされる入出力バスがシステムに存在しない場合、次のエラーメッセージが表示されます。
ERROR: there are no connections to display. (See hotplug(1m) for more information.) |
上記のエラーメッセージは、ホットプラグ対応のほかの入出力デバイスがシステムに存在するが、それらのデバイスの管理には hotplug コマンドではなく cfgadm コマンドを使用する必要がある場合にも表示されます。
作業 |
説明 |
参照先 |
---|---|---|
SCSI デバイスについての情報を表示します。 |
SCSI コントローラおよびデバイスについての情報を表示します。 | |
SCSI コントローラの構成を解除します。 |
SCSI コントローラの構成を解除します。 | |
SCSI コントローラを構成します。 |
構成を解除された SCSI コントローラを構成します。 | |
SCSI デバイスを構成します。 |
特定の SCSI デバイスを構成します。 | |
SCSI コントローラを切り離します。 |
特定の SCSI コントローラを切り離します。 | |
SCSI コントローラを接続します。 |
切り離された特定の SCSI コントローラを接続します。 | |
SCSI デバイスを SCSI バスに取り付けます。 |
特定のSCSI デバイスを SCSI バスに取り付けます。 | |
SCSI コントローラ上の同一デバイスと交換します。 |
SCSI バス上のデバイスを、同じタイプの別のデバイスに交換します。 | |
SCSI デバイスを取り外します。 |
SCSI デバイスをシステムから取り外します。 | |
SCSI 構成に関する問題の障害追跡を行います。 |
失敗した SCSI 構成解除操作を解決します。 |
この節では、cfgadm コマンドを使用してさまざまな SCSI ホットプラグ処理を実行する方法について説明します。
通常、SCSI フレームワークは SCSI デバイスのホットプラグ機能をサポートしています。ただし、使用している 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 コントローラ c1 を使用して、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 コントローラを構成する例を示します。
スーパーユーザーになります。
# 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/c1t3d0 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/c1t3d0 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 を指定します。
スーパーユーザーになります。
# 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 コマンドを入力します。
次に例を示します。
# 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 コントローラ上の同一デバイスを交換する例を示します。
スーパーユーザーになります。
# 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 コマンドを入力します。
次に例を示します。
# 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 コントローラ上のデバイスを取り外す例を示します。
スーパーユーザーになります。
# 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 コマンドを入力します。
次に例を示します。
# 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 |
この手順は、SCSI RAID デバイスを SCSI RAID アレイから取り外す場合に実行する必要があります。
デバイスがシステムから取り外されていることを確認します。
# 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: Component system is busy, try again: failed to offline: device-path Resource Information ------------------ -------------------------- /dev/dsk/device-name swap area |
cfgadm コマンドを使用して、スワップデバイス、専用のダンプデバイスなどのシステムリソースを取り外すと、システムリソースがアクティブな場合、このようなエラーメッセージが表示されます。
指定されたデバイス上のスワップ領域の構成を解除してから、再度 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 メッセージが表示されます。
次の作業マップでは、システム上の PCI または PCIe デバイスの管理作業について説明します。
作業 |
説明 |
参照先 |
---|---|---|
PCI スロット構成情報を表示します。 |
システムの PCI ホットプラグ対応デバイスとスロットの状態を表示します。 | |
PCI アダプタカードを取り外します。 |
カードを構成解除してからスロットから電源を外し、システムからカードを取り外します。 | |
PCI アダプタカードを取り付けます。 |
アダプタカードをホットプラグ対応のスロットに挿入します。スロットを電源に接続し、カードを構成します。 | |
PCI 構成に関する問題の障害追跡を行います。 |
PCI 構成障害に対処するために、エラーメッセージと解決策を確認します。 |
この節では、SPARC および x86 システム上で PCI または PCIe アダプタカードのホットプラグを実行する手順について説明します。
ホットプラグ操作では、cfgadm コマンドに加えて、prtconf コマンドが便利です。prtconf コマンドはハードウェアに関連する追加の構成情報を表示します。
ハードウェアの追加後に prtconf コマンドを使用して、ハードウェアが正しく構成されているかどうかを確認します。たとえば、構成作業後に prtconf -D コマンドを使用して、新しくインストールしたハードウェアデバイスにドライバが設定されているかどうかを確認します。ハードウェアの構成の前にデバイスドライバがシステムに追加されていない場合、add_drv コマンドを使用して手動で追加された可能性があります。
詳細については、prtconf(1M) と add_drv(1M) のマニュアルページを参照してください。
次の例では、簡潔にするため、PCI 接続点だけを表示しています。画面に表示される接続点はシステムによって異なります。
システムの LED インジケータを監視して、スロットのホットプラグ動作の状態を視覚的に把握できます。PCI Express の場合の LED の動作は、PCI Express の仕様で定義された動作と一致するか、そうでない場合は動作がプラットフォームに依存することがあります。
詳細は、ハードウェアマニュアルを参照してください。PCI Express の場合は、Attention ボタンが押されると電源インジケータが点滅し、状態遷移が始まったことを示します。状態遷移が終了すると、点滅が終了します。
この手順は、PCIe 構成情報を含めるように更新されました。
cfgadm コマンドは、システム上の 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 アダプタカードのタイプを示します。
PCIe スロット構成情報を表示します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 etherne/hp connected configured ok pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
具体的な PCIe デバイス情報を表示します。
次に例を示します。
# cfgadm -s "cols=ap_id:busy:o_state" pci Ap_Id Busy Occupant pcie1 n unconfigured pcie2 n unconfigured pcie3 n unconfigured pcie4 n configured pcie5 n configured pcie6 n configured |
ほとんどの場合、論理 Ap_Id は、システムのシャーシに貼られているスロットラベルと一致します。ハードウェアマニュアルでホットプラグ対応スロットの cfgadm の出力について参照してください。ホットプラグ操作を試す前に、Busy フィールドを表示して、 Ap_Id が別の状態に遷移していないことを確認できます。
PCIe アダプタカードを取り外す場合のために、次の手順が更新されました。ただし、アダプタカードを取り外す手順は、PCI と PCIe のどちらを使用するかに関係なく同じです。
スーパーユーザーになります。
PCI アダプタカードが入っているスロットを確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 etherne/hp connected configured ok pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
デバイスを開いているアプリケーションを停止します。
たとえば、デバイスが Ethernet カードの場合、ifconfig コマンドでインタフェースを無効にしてからカードを引き抜きます。
下に示すように cfgadm(1M) コマンドを使用してデバイスを手動で構成解除します。または、PCIe アダプタカードを使用している場合は、自動構成方式を使用します。たとえば、ハードウェアマニュアルに従ってスロットの Attention ボタンを押します。
# cfgadm -c unconfigure pcie4 |
デバイスの構成が解除されていることを確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 unknown connected unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
デバイスが構成解除されると、 Type と Condition も unknown になります。
スロットへの電源を手動で切り離します。自動構成方式を使用する場合は、この手順は不要です。詳細は、ハードウェアマニュアルを参照してください。
# cfgadm -c disconnect pcie4 |
デバイスが切り離されていることを確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 unknown disconnected unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
プラットフォームのガイドの適切な手順に従って PCI アダプタカードを取り外します。カードを取り外すと、「Receptable」の状態が「empty」になります。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 unknown empty unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
プラットフォームの実装に応じて、ブート時に自動構成方式を有効または無効にすることができます。環境に適した自動構成方式を設定してください。
PCIe アダプタカードを取り付ける場合のために、次の手順が更新されました。ただし、アダプタカードを追加する手順は、PCI と PCIe のどちらを使用するかに関係なく同じです。
スーパーユーザーになります。
たとえば、pcie3 の場合は次のようになります。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown empty unconfigured unknown pcie4 unknown empty unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
ハードウェアマニュアルの適切な手順に従って、PCI アダプタカードをスロットに挿入します。
PCI アダプタカードを挿入した後に、どのスロットに PCI アダプタカードが入っているかを確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown disconnected unconfigured unknown pcie4 unknown empty unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
cfgadm コマンドを使用して、手動で電源をスロットに接続します。または、PCIe アダプタカードを使用している場合は、自動構成方式を使用します。たとえば、ハードウェアマニュアルに従ってスロットの Attention ボタンを押します。
次に例を示します。
# cfgadm -c connect pcie3 |
接続点が接続されていることを確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 unknown connected unconfigured unknown pcie4 unknown empty unconfigured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
下に示すように cfgadm コマンドを使用して PCI アダプタカードを手動で構成します。自動構成方式を使用する場合は、この手順は不要です。詳細は、ハードウェアマニュアルを参照してください。
次に例を示します。
# cfgadm -c configure pcie3 |
スロット中の PCI アダプタカードの構成を確認します。
次に例を示します。
# cfgadm pci Ap_Id Type Receptacle Occupant Condition pcie1 unknown empty unconfigured unknown pcie2 unknown empty unconfigured unknown pcie3 etherne/hp connected configured unknown pcie5 pci-pci/hp connected configured ok pcie6 unknown disconnected unconfigured unknown |
新しいデバイスの場合、サポートソフトウェアを構成します。
たとえば、デバイスが Ethernet カードの場合、ifconfig コマンドでインタフェースを設定します。
プラットフォームの実装に応じて、ブート時に自動構成方式を有効または無効にすることができます。環境に適した自動構成方式を設定してください。
cfgadm: Configuration operation invalid: invalid transition |
無効な移行を行いました。
cfgadm -c コマンドが適切に発行されているかどうかを確認します。cfgadm コマンドで現在の受容体と占有装置の状態を確認し、Ap_id が正しいことを確認します。
cfgadm: Attachment point not found |
指定した接続点は見つかりません。
接続点が正しいかどうかを確認します。cfgadm コマンドを使用して、利用可能な接続点のリストを表示します。物理パスを調べて、まだ接続点があるかどうかも確認してください。
Reconfiguration Coordination Manager (RCM) は、システムコンポーネントの動的な除去を管理するフレームワークです。RCM を使用すると、システムリソースを順番に登録および解放できます。
新しい RCM スクリプト機能を使用すると、アプリケーションを停止したり、動的な再構成の間にアプリケーションからデバイスを手際良く解放したりする独自のスクリプトを記述できます。スクリプトによって登録されたリソースに要求が影響を与える場合、RCM フレームワークは再構成要求に応じてスクリプトを自動的に起動します。
リソースを動的に除去する場合は、アプリケーションからリソースを手動で解放しておく必要があります。あるいは、-f オプションを指定して cfgadm コマンドを使用することで、再構成オペレーションを強制することも可能です。ただし、このオプションはアプリケーションを認識不能な状態のままにする可能性があります。また、アプリケーションからリソースを手動で解放すると、一般にエラーが発生します。
RCM スクリプト機能を使うと、動的再構成処理を簡単かつ効果的に実行できます。RCM スクリプトを作成すると、次の操作を実行できます。
動的にデバイスを取り外したときに、デバイスを自動的に解放します。デバイスがアプリケーションによって起動した場合は、この処理によって、デバイスも終了します。
システムからデバイスを動的に取り外すときに、サイト固有のタスクを実行します。
実行可能シェルスクリプト (Perl、sh、csh、または ksh) または RCM デーモンが実行するバイナリプログラム。推奨言語は、Perl です。
スクリプトファイル所有者のユーザー ID を使用することにより、自分のアドレス領域で実行されるスクリプト。
cfgadm コマンドを使ってシステムリソースを動的に再構成するときに、RCM デーモンによって実行されるスクリプト。
RCM スクリプトを使用した場合、デバイスを動的に取り外すと、デバイスがアプリケーションから解放されます。デバイスが開いている場合には、RCM スクリプトによって閉じられます。
たとえば、テープバックアップアプリケーションで RCM スクリプトを使用して、テープドライブを終了させたり、テープバックアップアプリケーションをシャットダウンしたりできます。
次のようにして RCM スクリプトを起動します。
$ script-name command [args ...] |
RCM スクリプトにより、次の基本的な手順が実行されます。
コマンド行引数から 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. アプリケーションが使用するリソースを特定します。 |
アプリケーションが使用するリソース (デバイス名) を特定します。このデバイスは動的に取り外される可能性があります。 | |
2. リソースを解放するコマンドを特定します。 |
アプリケーションからリソースを完全に解放するようにアプリケーションに通知するコマンドを特定します。 |
アプリケーションのマニュアル |
3. リソースを取り外した後に使用するコマンドを特定します。 |
リソースを取り外したことをアプリケーションに通知するコマンドを含めます。 | |
4. リソースの取り外しに失敗した場合のコマンドを特定します。 |
使用可能なリソースについてアプリケーションに通知するコマンドを含めます。 | |
5. RCM スクリプトを記述します。 |
作業 1 - 4 で特定した情報に基づいて RCM スクリプトを記述します。 | |
6. RCM スクリプトをインストールします。 |
適切なスクリプトディレクトリにスクリプトを追加します。 | |
7. RCM スクリプトをテストします。 |
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストします。 |
ここでは、サイトをカスタマイズするために RCM スクリプトを作成するシステム管理者の作業について説明します。
作業 |
説明 |
参照先 |
---|---|---|
1. 動的に削除するリソースを特定します。 |
cfgadm -l コマンドを使って削除する可能性があるリソース (デバイス名) を特定します。 | |
2. 停止するアプリケーションを特定します。 |
アプリケーションを完全に停止させるコマンドを特定します。 |
アプリケーションのマニュアル |
3. リソースの取り外し前および取り外し後のコマンドを特定します。 |
リソースを取り外す前後の動作を特定します。 | |
4. RCM スクリプトを記述します。 |
作業 1 - 3 で特定した情報に基づいて RCM スクリプトを記述します。 | |
5. RCM スクリプトをインストールします。 |
適切なスクリプトディレクトリにスクリプトを追加します。 | |
6. RCM スクリプトをテストします。 |
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストします。 |
次の規則に従って、スクリプトに vendor、service という名前を付ける必要があります。
スクリプトを提供するベンダーのストックシンボル、またはベンダーを識別する固有名です。
スクリプトが表すサービス名です。
RCM スクリプトのインストールまたは削除を行うには、スーパーユーザー (root) の権限が必要です。この表を使用して、RCM スクリプトをインストールするディレクトリを判断してください。
表 6–1 RCM スクリプトディレクトリ
ディレクトリの位置 |
スクリプトタイプ |
---|---|
/etc/rcm/scripts |
特定のシステム用のスクリプト |
/usr/platform/`uname -i`/lib/rcm/scripts |
特定のハードウェア実装用のスクリプト |
/usr/platform/`uname -m`/lib/rcm/scripts |
特定のハードウェアクラス用のスクリプト |
/usr/lib/rcm/scripts |
任意のハードウェア用のスクリプト |
スーパーユーザーになります。
適切なディレクトリにスクリプトをコピーします。
表 6–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 |
エラーが発生した場合、スクリプトによりエラー情報が stdout に出力されます。
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 # # A sample site customization RCM script. # # When RCM_ENV_FORCE is FALSE this script indicates to RCM that it cannot # release the tape drive when the tape drive is being used for backup. # # When RCM_ENV_FORCE is TRUE this script allows DR removing a tape drive # when the tape drive is being used for backup by killing the tape # backup application. # use strict; my ($cmd, %dispatch); $cmd = shift(@ARGV); # dispatch table for RCM commands %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)) { # ignore hidden files and multiple names for the same device 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); # check if backup application is using this resource #if (the backup application is not running on $rsrc) { # allow the DR to continue # exit (0); #} # # If RCM_ENV_FORCE is FALSE deny the operation. # If RCM_ENV_FORCE is TRUE kill the backup application in order # to allow the DR operation to proceed # if ($ENV{RCM_ENV_FORCE} eq 'TRUE') { if ($cmd eq 'preremove') { # kill the tape backup application } exit (0); } else { # # indicate that the tape drive can not be released # since the device is being used for backup by the # tape backup application # print "rcm_failure_reason=tape backup in progress pid=...\n" ; exit (3); } } |