Solaris のシステム管理 (基本編)

第 27 章 デバイスの動的構成 (手順)

この章では、Solaris 環境でデバイスを動的に構成する手順について説明します。Solaris 環境でシステム構成要素がホットプラグ機能をサポートする場合、システムが動作しているときにも、デバイスを追加、削除、または交換することができます。システムの構成要素がホットプラグをサポートしていない場合は、システムをリブートしてデバイスを再構成します。

デバイスを動的に構成する手順については、次の項目を参照してください。

cfgadm コマンドを使用して USB デバイスをホットプラグする方法については、cfgadm コマンドを使った USB デバイスのホットプラグ 」を参照してください。

デバイスへのアクセス方法については、第 29 章「デバイスへのアクセス (概要)」を参照してください。

動的再構成とホットプラグ機能

ホットプラグ機能とは、システムの動作中に、システム構成要素を物理的に取り付け、取り外し、または交換できる機能のことです。動的再構成とは、システム構成要素をホットプラグできる機能のことです。また動的再構成は、システムリソースをシステムから物理的に取り外さなくても (なんらかの方法で) システムリソース (ハードウェアとソフトウェアの両方) をシステム内で移動したり、無効にできる機能のことです。

cfgadm コマンドを使用すると、次のデバイスをホットプラグできます。

cfgadm コマンドには、次のような機能があります。

cfgadm コマンドでシステム構成要素を再構成する利点は、システムが動作しているときでも、システム構成要素を取り付け、取り外し、または交換できることです。さらに、cfgadm コマンドでは、システム構成要素を取り付け、取り外し、または交換するために必要な手順が示されます。

SCSI 構成要素をホットプラグする手順については、cfgadm(1M) のマニュアルページと cfgadm コマンドによる SCSI ホットプラグ」を参照してください。IA のシステムにおいて PCI アダプタカードをホットプラグする手順については、「IA: cfgadm コマンドによる PCI ホットプラグ」を参照してください。


注 -

すべての SCSI と PCI のコントローラが cfgadm コマンドによるホットプラグ機能をサポートしているわけではありません。


Sun が提供する高可用性の一部として、動的再構成は他の階層化製品 (代替パス指定やフェイルオーバーソフトウェアなど) とともに使用することをお勧めします。両方の製品ともデバイス障害に対する耐性を提供します。

高可用性ソフトウェアがなくても、障害が発生したデバイスを交換できます。この場合、適切なアプリケーションを手動で停止し、重要でないファイルシステムのマウントを手動で解除し、デバイスを取り付けまたは取り外します。


注 -

企業レベルのシステムなど、特定のハードウェア構成に対するデバイスのホットプラグについては、お使いのハードウェア構成のマニュアルを参照してください。


接続点

cfgadm コマンドは接続点についての情報を表示します。接続点とは、動的再構成を行うことができるシステム内の特定の場所のことです。

接続点は、次の要素から構成されています。

接続点は、論理と物理の両方の接続点 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 デバイスに関する情報を表示する方法」を参照してください。

IA: PCI アダプタカードの取り外し

デバイスドライバがホットプラグ機能をサポートしている場合、必須でないシステムリソースとして機能している PCI アダプタカードは取り外すことができます。重要なシステムリソースとして機能している PCI アダプタカードは取り外すことができません。PCI アダプタカードが取り外し可能であるためには、次の条件が必要です。

たとえば、システムにインストールされているイーサネットカードが 1 つしかない場合、ネットワーク接続を切断せずにこのイーサネットカードを取り外すことは不可能です。このような環境でネットワーク接続をアクティブに保ったままイーサネットカードを取り外すには、別の階層化ソフトウェアサポートが必要です。

IA: PCI アダプタカードの取り付け

PCI アダプタカードをシステムに取り付けるには、次の条件が必要です。

PCI アダプタカードの取り付けまたは取り外しの手順については、「IA: cfgadm コマンドによる PCI ホットプラグ」を参照してください。

cfgadm コマンドによる SCSI ホットプラグ (作業マップ)

作業 

説明 

参照先 

1. SCSI デバイスについての情報の表示 

SCSI コントローラおよびデバイスについての情報を表示する 

「SCSI デバイスに関する情報を表示する方法」

2. SCSI コントローラの構成解除 

SCSI コントローラの構成を解除する 

「SCSI コントローラの構成を解除する方法」

3. SCSI コントローラの構成 

構成を解除された SCSI コントローラを構成する 

「SCSI コントローラを構成する方法」

4. SCSI デバイスの構成  

SCSI デバイスを構成する 

「SCSI デバイスを構成する方法」

5. SCSI コントローラを切り離す 

特定の SCSI コントローラを切り離す 

「SCSI コントローラを切り離す方法」

6. SCSI コントローラの接続 

切り離された特定の SCSI コントローラを接続する 

「SCSI コントローラを接続する方法」

7. SCSI デバイスを SCSI バスに取り付ける 

特定のSCSI デバイスを SCSI バスに取り付ける 

「SPARC: SCSI デバイスを SCSI バスに取り付ける方法」

8. SCSI コントローラ上の同一デバイスと交換 

SCSI バス上のデバイスを、同じタイプの別のデバイスに交換する 

「SPARC: SCSI コントローラ上の同一デバイスを交換する方法」

9. SCSI デバイスを取り外す 

SCSI デバイスをシステムから取り外す 

「SPARC: SCSI デバイスを取り外す方法」

10. SCSI 構成の障害対処 

失敗した SCSI 構成解除操作を解決する  

「失敗した SCSI 構成解除操作の解決方法」

cfgadm コマンドによる SCSI ホットプラグ

この節では、cfgadm コマンドを使用してさまざまな SCSI ホットプラグ処理を実行する方法について説明します。

この節で説明する手順では、特定のデバイスを使用して、cfgadm コマンドで SCSI 構成要素をホットプラグする例を示します。cfgadm コマンドで提供されるデバイス情報や表示されるデバイス情報は、システム構成によって異なります。

SCSI デバイスに関する情報を表示する方法

次の手順では、SCSI コントローラ c0c1、およびコントローラに接続されたデバイスを例として使用して、cfgadm コマンドを使用して表示可能なデバイス構成情報を示します。


注 -

SCSI デバイスが cfgadm コマンドでサポートされていない場合、その SCSI デバイスは cfgadm コマンドの出力には表示されません。


  1. スーパーユーザーになります。

  2. システムの接続点についての情報を表示します。


    # cfgadm -l
    Ap_Id                Type         Receptacle   Occupant     Condition
    c0                   scsi-bus     connected    configured   unknown
    c1                   scsi-bus     connected    configured   unknown

    この例では、c0c1 は 2 つの SCSI コントローラを表しています。

  3. システムの 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 コントローラの構成を解除する方法

次の手順では、SCSI コントローラ c1 を使用して、SCSI デバイスの構成を解除する例を示します。

  1. スーパーユーザーになります。

  2. SCSI コントローラの構成を解除します。


    # cfgadm -c unconfigure c1
    
  3. 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

    c1Occupant の列に unconfigured と表示されていることに注目してください。これは、SCSI バスに占有装置が構成されていないことを示します。

構成解除処理が失敗した場合は、「失敗した SCSI 構成解除操作の解決方法」を参照してください。

SCSI コントローラを構成する方法

次の手順では、SCSI コントローラ c1 を使用して、SCSI コントローラを構成する例を示します。

  1. スーパーユーザーになります。

  2. SCSI コントローラを構成します。


    # cfgadm -c configure c1
    
  3. 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 デバイスを構成する方法

次の手順では、SCSI ディスク c1t4d0 を使用して、SCSI デバイスを構成する例を示します。

  1. スーパーユーザーになります。

  2. 構成するデバイスを確認します。


    # 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
  3. SCSI デバイスを構成します。


    # cfgadm -c configure c1::dsk/c1t4d0
    
  4. 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 コントローラを切り離す方法


注意 - 注意 -

SCSI デバイスを切り離すときは十分に注意してください。特に、ルート (/)、usrvarswap パーティションなどの重要なファイルシステムが入っているディスクのコントローラを扱うときは細心の注意を払ってください。動的再構成ソフトウェアは、システムがハングする原因をすべて発見できるわけではありません。この手順は、十分注意して実行してください。


次の手順では、SCSI コントローラ c1 を使用して 、SCSI デバイスを切り離す例を示します。

  1. スーパーユーザーになります。

  2. デバイスを切り離す前に、デバイスが接続されていることを確認します。


    # 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
  3. SCSI コントローラを切り離します。


    # cfgadm -c disconnect c1
    WARNING: Disconnecting critical partitions may cause system hang.
    Continue (yes/no)? y
    

    注意 - 注意 -

    このコマンドは、cfgadm -c connect コマンドを使用するまで、SCSI バス上のすべての入出力動作を中断します。cfgamd コマンドは基本的な検査を行い、重要なパーティションが切り離されるのを防ぎます。しかし、すべての場合を発見できるわけではありません。このコマンドの使い方が不適切な場合、システムがハングし、システムをリブートしなければならなくなる可能性もあります。


  4. 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 コントローラを接続する方法

次の手順は、SCSI コントローラ c1 を使用して、 SCSI コントローラを接続する例を示します。

  1. スーパーユーザーになります。

  2. デバイスを接続する前に、デバイスが切り離されていることを確認します。


    # 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
  3. SCSI コントローラを接続します。


    # cfgadm -c connect c1
    
  4. 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

SPARC: SCSI デバイスを SCSI バスに取り付ける方法

SCSI コントローラ c1 を使用して、SCSI デバイスを SCSI バスに取り付ける方法を説明します。


注 -

デバイスを取り付けるときは、デバイス自身の Ap_Id ではなく、デバイスを取り付ける SCSI HBA (コントローラ) の Ap_Id を指定します。


  1. スーパーユーザーになります。

  2. 現在の 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
  3. 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
    1. Continue (yes/no)? というプロンプトに y と入力して、次に進みます。


      Continue (yes/no)? y
      SCSI bus quiesced successfully.
      It is now safe to proceed with hotplug operation.

      ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。

    2. デバイスを接続して、電源を入れます。

    3. 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
      
  4. デバイスが取り付けられていることを確認します。


    # 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 に新しいディスクが取り付けられました。

SPARC: SCSI コントローラ上の同一デバイスを交換する方法

次の手順では、SCSI ディスク c1t4d0 を使用して、SCSI コントローラ上の同一デバイスを交換する例を示します。

  1. スーパーユーザーになります。

  2. 現在の 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
  3. 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
    1. Continue (yes/no)? というプロンプトに y と入力して、次に進みます。

      ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。


      Continue (yes/no)? y
      SCSI bus quiesced successfully.
      It is now safe to proceed with hotplug operation.
    2. デバイスの電源を切ってから、そのデバイスを取り外します。

    3. 交換用のデバイスを取り付けます。そして、取り付けたデバイスの電源を入れます。

      交換用のデバイスは取り外したデバイスと同じタイプであり、同じアドレス (ターゲットと論理ユニット番号) でなければなりません。

    4. 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
      
  4. デバイスが交換されていることを確認します。


    # 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

SPARC: SCSI デバイスを取り外す方法

次に、SCSI ディスク c1t4d0 を使用して、SCSI コントローラ上のデバイスを取り外す例を示します。

  1. スーパーユーザーになります。

  2. 現在の 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
  3. 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

    1. Continue (yes/no)? というプロンプトに y と入力して、次に進みます。


      Continue (yes/no)? y
      SCSI bus quiesced successfully.
      It is now safe to proceed with hotplug operation.

      ホットプラグ処理の実行中、SCSI バス上の入出力動作は中断されます。

    2. デバイスの電源を切ってから、そのデバイスを取り外します。

    3. 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
      
  4. デバイスがシステムから取り外されていることを確認します。


    # 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

SPARC: SCSI 構成の障害対処

この節では、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 処理を再実行します。

失敗した SCSI 構成解除操作の解決方法

1 つ以上のターゲットデバイスが使用中である場合、および SCSI 構成解除操作が失敗した場合、次の手順を使用します。この手順を使用しないと、将来、このコントローラおよびターゲットデバイスの動的再構成操作が失敗し、dr in progress メッセージが表示されます。

  1. スーパーユーザーになります (まだなっていない場合)。

  2. 次のコマンドを入力してコントローラを再構成します。


    # cfgadm -c configure device-name
    

cfgadm コマンドによる PCI ホットプラグ (作業マップ)

作業 

説明 

参照先 

1. PCI スロット構成情報の表示 

システムの PCI ホットプラグ可能なデバイスとスロットの状態を表示する 

「IA: PCI スロット構成情報を表示する方法」

2. PCI アダプタカードを取り外す 

カードを構成解除してからスロットから電源を外し、システムからカードを取り外す 

「IA: PCI アダプタカードを取り外す方法」

3. PCI アダプタカードを取り付ける 

アダプタカードをホットプラグ可能なスロットに挿入する。スロットを電源に接続し、カードを構成する 

「IA: PCI アダプタカードを取り付ける方法」

4. PCI 構成障害に対処する 

PCI 構成障害に対処するために、エラーメッセージと解決策を確認する 

「IA: PCI 構成の障害対処」

IA: cfgadm コマンドによる PCI ホットプラグ

この節では、IA システム上で PCI アダプタカードをホットプラグする手順について説明します。

次の例では、簡潔にするため、PCI 接続点だけを表示しています。画面に表示される接続点はシステムによって異なります。

IA: PCI スロット構成情報を表示する方法

cfgadmin コマンドは、システム上のPCI ホットプラグ可能なデバイスとスロットの状態を表示します。詳細については cfgadm(1M) を参照してください。

  1. スーパーユーザーになります。

  2. 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_Idpci1:hpc0_slot0 は、ホットプラグ可能なスロット Slot 7 の論理 Ap_Id です。構成要素 hpc0 はこのスロットのホットプラグ可能なアダプタカードを示し、pci1 は PCI バスのインスタンスを示します。Type フィールドは、スロット中の PCI アダプタカードのタイプを示します。

IA: PCI アダプタカードを取り外す方法

  1. スーパーユーザーになります。

  2. 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
  3. デバイスを開いているアプリケーションを停止します。

    たとえば、イーサネットカードの場合、ifconfig コマンドでインタフェースを無効にしてから、カードを引き抜きます。

  4. デバイスの構成を解除します。


    # cfgadm -c unconfigure pci1:hpc0_slot3   
    
  5. デバイスの構成が解除されていることを確認します。


    # 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
  6. スロットへの電源を切り離します。


    # cfgadm -c disconnect pci1:hpc0_slot3
    
  7. デバイスが切り離されていることを確認します。


    # 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
  8. スロットのラッチを開いて PCI アダプタカードを取り外します。

IA: PCI アダプタカードを取り付ける方法

  1. スーパーユーザーになります。

  2. ホットプラグ可能なスロットを確認して、ラッチを開きます。

  3. ホットプラグ可能なスロットに PCI アダプタカードを挿入します。

  4. 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
  5. スロットへの電源を接続します。


    # cfgadm -c connect pci1:hpc0_slot3
    
  6. スロットが接続されていることを確認します。


    # 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
  7. PCI アダプタカードを構成します。


    # cfgadm -c configure pci1:hpc0_slot3
    
  8. スロット中の 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
  9. 新しいデバイスの場合、サポートソフトウェアを構成します。

    たとえば、デバイスがイーサネットカードの場合、ifconfig コマンドでインタフェースを設定します。

IA: PCI 構成の障害対処

エラーメッセージ

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) スクリプトの概要

Reconfiguration Coordination Manager (RCM) は、システムコンポーネントの動的な除去を管理するフレームワークです。RCM を使用すると、システムリソースを順番に登録および解放することができます。

新しい RCM スクリプト機能を使用すると、アプリケーションを停止したり、動的な再構成の間にアプリケーションからデバイスを手際良く解放したりする独自のスクリプトを記述できます。スクリプトによって登録されたリソースに要求が影響を与える場合、RCM フレームワークは再構成要求に応じてスクリプトを自動的に起動します。

リソースを動的に除去する場合は、アプリケーションからリソースを手動で解放しておく必要があります。あるいは、-f オプションを指定して cfgadm コマンドを使用して再構成オペレーションを強制することも可能でした。ただし、このオプションはアプリケーションを認識不能な状態のままにする可能性があります。また、アプリケーションからリソースを手動で解放すると、一般にエラーが発生します。

RCM スクリプト機能を使うと、動的再構成処理を簡単かつ効果的に実行できます。RCM スクリプトを作成すると、次の操作を実行できます。

RCM スクリプトとは?

RCM スクリプトは、次のとおりです。

RCM スクリプトで実行できること

RCM スクリプトを使用した場合、デバイスを動的に取り外すと、デバイスがアプリケーションから解放されます。デバイスが開いている場合には、RCM スクリプトによって閉じられます。

たとえば、テープバックアップアプリケーションで RCM スクリプトを使用して、テープドライブを終了させたり、テープバックアップアプリケーションをシャットダウンしたりすることができます。

RCM スクリプト処理の動作方法

次のようにしてスクリプトを起動します。


$ script-name command [args ...]

スクリプトにより、次の基本的な手順が実行されます。

  1. コマンド行引数から RCM コマンドを取得する

  2. コマンドを実行する

  3. 結果を名前と値のペアで stdout に記述する

  4. 適切な終了ステータスで終了する

RCM デーモンは、スクリプトのインスタンスを同時に 1 つ実行します。たとえば、RCM デーモンは、スクリプトの実行中には、そのスクリプトが終了するまで同じスクリプトを実行しません。

RCM スクリプトコマンド

次の RCM コマンドを RCM スクリプトに含める必要があります。

次の RCM コマンドの一部またはすべてを RCM スクリプトに含めることができます。

これらの RCM コマンドの詳細については、rcmscript(4)を参照してください。

RCM スクリプト処理環境

デバイスを動的に取り外すと、RCM デーモンにより次のコマンドが実行されます。

RCM スクリプトでの作業

次の節では、アプリケーション開発者およびシステム管理者のために RCM スクリプト作業について説明します。

アプリケーション開発者 RCM スクリプト (作業マップ)

次の作業マップでは、RCM スクリプトを作成するアプリケーション開発者の作業について説明します。

作業 

説明 

参照先 

1. アプリケーションが使用するリソースを特定する 

アプリケーションが使用するリソース (デバイス名) を特定する。このデバイスは動的に取り外される可能性がある 

cfgadm(1M)

2. リソースを解放するコマンドを特定する 

アプリケーションからリソースを完全に解放するようにアプリケーションに通知するコマンドを特定する 

アプリケーションのマニュアル 

3. リソースを取り外した後に使用するコマンドを特定する 

リソースを取り外したことをアプリケーションに通知するコマンドを含める 

rcmscript(4)

4. リソースの取り外しに失敗した場合のコマンドを特定する 

使用可能なリソースについてアプリケーションに通知するコマンドを含める 

rcmscript(4)

5. RCM スクリプトを記述する 

前の作業で特定した情報に基づいて RCM スクリプトを記述する 

「テープバックアップ用の RCM スクリプトの例」

6. RCM スクリプトをインストールする 

適切なスクリプトディレクトリにスクリプトを追加する。 

「RCM スクリプトのインストール方法」

7. RCM スクリプトをテストする 

手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストする 

「RCM スクリプトのテスト方法」

システム管理者 RCM スクリプト (作業マップ)

ここでは、サイトをカスタマイズするために RCM スクリプトを作成するシステム管理者の作業について説明します。

作業 

説明 

参照先 

1. 動的に移動するリソースを特定する 

cfgadm - l コマンドを使って移動する可能性があるリソース (デバイス名) を特定する

cfgadm(1M)

2. 停止するアプリケーションを特定する 

アプリケーションを完全に停止させるコマンドを特定する 

アプリケーションのマニュアル 

3. リソースの取り外し前および取り外し後のコマンドを特定する 

リソースを取り外す前後の動作を特定する 

rcmscript(4)

4. RCM スクリプトを記述する 

前の作業で特定した情報に基づいて RCM スクリプトを記述する 

「テープバックアップ用の RCM スクリプトの例」

5. RCM スクリプトをインストールする 

適切なスクリプトディレクトリにスクリプトを追加する。 

「RCM スクリプトのインストール方法」

6. RCM スクリプトをテストする 

手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストする 

「RCM スクリプトのテスト方法」

RCM スクリプトに名前を付ける

次の規則に従って、スクリプトに vendor service という名前を付ける必要があります。

vendor

スクリプトを提供するベンダーのストックシンボル、またはベンダーを識別する固有名 

service

スクリプトが表すサービス名 

RCM スクリプトのインストールまたは削除

RCM スクリプトのインストールまたは削除を行うには、スーパーユーザー (root) の権限が必要です。この表を使用して、RCM スクリプトをインストールするディレクトリを判断してください。

表 27-1 RCM スクリプトディレクトリ

ディレクトリの位置  

スクリプトタイプ 

/etc/rcm/scripts

特定のシステム用のスクリプト 

/usr/platform/`uname -i`/lib/rcm/scripts

特定のハードウェア実装用のスクリプト 

/usr/platform/`uname -m`/lib/rcm/scripts

特定のハードウェアクラス用のスクリプト 

/usr/lib/rcm/scripts

任意のハードウェア用のスクリプト 

RCM スクリプトのインストール方法

  1. スーパーユーザーになります。

  2. スクリプトを 表 27-1 で説明されている適切なディレクトリにコピーします。

    たとえば、次のようになります。


    # cp SUNW,sample.pl /usr/lib/rcm/scripts
    
  3. スクリプトのユーザー ID およびグループ ID を希望の値に変更します。


    # chown user:group /usr/lib/rcm/scripts/SUNW,sample.pl
    
  4. SIGHUP を RCM デーモンに送信します。


    # pkill -HUP -x -u root rcm_daemon
    

RCM スクリプトの削除方法

  1. スーパーユーザーになります。

  2. RCM スクリプトディレクトリからスクリプトを削除します。

    たとえば、次のようになります。


    # rm /usr/lib/rcm/scripts/SUNW,sample.pl 
    
  3. SIGHUP を RCM デーモンに送信します。


    # pkill -HUP -x -u root rcm_daemon
    

RCM スクリプトのテスト方法

  1. スクリプトを実行する前にコマンド行シェルに RCM_ENV_FORCE などの環境変数を設定します。

    たとえば、Korn シェルで次のように設定します。


    $ export RCM_ENV_FORCE=TRUE
    
  2. コマンド行から手動でスクリプトコマンドを実行してスクリプトをテストします。

    たとえば、次のようになります。


    $ script-name scriptinfo
    $ script-name register
    $ script-name preremove resource-name
    $ script-name postremove resource-name
    
  3. スクリプトの各 RCM スクリプトコマンドにより、適切な出力結果が stdout に印刷されるかどうかを確認します。

  4. 適切なスクリプトディレクトリにスクリプトをインストールします。

    詳細については、「RCM スクリプトのインストール方法」を参照してください。

  5. 動的な削除操作を実行してスクリプトをテストします。

    たとえば、スクリプトによってデバイス /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 スクリプトは、次の手順を実行します。

  1. RCM コマンドのディスパッチテーブルを設定します。

  2. 指定した RCM コマンドに対応するディスパッチルーチンを呼び出し、未実装の RCM コマンドのステータス 2 で終了させます。

  3. scriptinfo セクションを設定します。


    rcm_script_func_info=Tape backup appl script for DR
  4. すべてのテープドライブのデバイス名を stdoutに印刷して、すべてのテープドライバをシステムに登録します。


    rcm_resource_name=/dev/rmt/$f

    エラーが発生した場合、エラー情報を stdout に印刷します。


    rcm_failure_reason=$errmsg
  5. テープデバイスのリソース情報を設定します。


    rcm_resource_usage_info=Backup Tape Unit Number $unit
  6. バックアップアプリケーションがそのデバイスを使用しているかどうか確認して、preremove 情報を設定します。バックアップアプリケーションがそのデバイスを使用していない場合、動的再構成操作が続行されます。バックアップアプリケーションがそのデバイスを使用している場合、スクリプトにより RCM_ENV_FORCE が検査されます。RCM_ENV_FORCEFALSE に設定されている場合、スクリプトにより動的再構成操作が拒否され、次のメッセージが印刷されます。


    rcm_failure_reason=tape backup in progress pid=...

    RCM_ENV_FORCETRUE に設定されている場合、バックアップアプリケーションが停止し、再構成操作が続行されます。

テープバックアップ再構成シナリオの結果

RCM スクリプトを使わずに cfgadm コマンドを使ってテープドライブを取り外した場合、次のような結果になります。

RCM スクリプトと cfgadm コマンドを使ってテープドライブを取り外した場合、次のような結果になります。

例 - テープバックバックアップ用の RCM スクリプト


#! /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);
            }
    }