Solaris のシステム管理 (デバイスとファイルシステム)

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

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

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

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

cfgadm コマンドを使用して InfiniBand デバイスのホットプラグを実行する方法については、第 9 章InfiniBand デバイスの使用 (概要/手順)を参照してください。

デバイスへのアクセスに関する情報については、「デバイスへのアクセス」を参照してください。

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

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

一般に、次のバスタイプはホットプラグ対応です。

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

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

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

構成要素のホットプラグを実行する手順については、次を参照してください。


注 –

すべての 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 デバイスに関する情報を表示する方法」を参照してください。

PCI または PCIe アダプタカードの取り外し

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

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

PCI または PCIe アダプタカードの取り付け

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

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

hotplug コマンドによる 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

PCI ホットプラグ処理 (hotplug ) のトラブルシューティング

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 コマンドを使用する必要がある場合にも表示されます。

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

作業 

説明 

参照先 

SCSI デバイスについての情報を表示します。 

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

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

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

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

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

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

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

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

SCSI デバイスを構成します。 

特定の SCSI デバイスを構成します。 

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

SCSI コントローラを切り離します。 

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

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

SCSI コントローラを接続します。 

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

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

SCSI デバイスを SCSI バスに取り付けます。 

特定のSCSI デバイスを SCSI バスに取り付けます。 

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

SCSI コントローラ上の同一デバイスと交換します。 

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

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

SCSI デバイスを取り外します。 

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

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

SCSI 構成に関する問題の障害追跡を行います。 

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

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

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

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


注 –

通常、SCSI フレームワークは SCSI デバイスのホットプラグ機能をサポートしています。ただし、使用している SCSI デバイスでホットプラグ機能がサポートされているかどうか、ハードウェアのマニュアルを参照して確認してください。


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

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

次の手順では、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 コマンドを使用してください。


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

次の手順では、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 構成解除操作の解決方法」を参照してください。

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

次の手順では、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 バス上のすべてのデバイスを削除しました。この例では、すべてのデバイスをシステムに構成し直します。

ProcedureSCSI デバイスを構成する方法

次の手順では、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

ProcedureSCSI コントローラを切り離す方法


注意 – 注意 –

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


次の手順では、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/c1t3d0       unavailable   disconnected configured   unknown
    c1::dsk/c1t4d0       unavailable   disconnected configured   unknown

    コントローラとそれに接続されていたすべてのデバイスがシステムから切り離されました。

ProcedureSPARC: 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/c1t3d0       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

ProcedureSPARC: 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 バスに取り付けます。

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


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

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

    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

    コントローラ c1 に新しいディスクが取り付けられました。

ProcedureSPARC: 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 バス上のデバイスを、同じタイプの別のデバイスに交換します。

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

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


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

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

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

    5. 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

ProcedureSPARC: 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 デバイスをシステムから取り外します。

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


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

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

    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
      

    注 –

    この手順は、SCSI RAID デバイスを SCSI RAID アレイから取り外す場合に実行する必要があります。


  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

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: 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 処理を再実行します。

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

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

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

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


    # cfgadm -c configure device-name
    

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

次の作業マップでは、システム上の PCI または PCIe デバイスの管理作業について説明します。

作業 

説明 

参照先 

PCI スロット構成情報を表示します。 

システムの PCI ホットプラグ対応デバイスとスロットの状態を表示します。 

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

PCI アダプタカードを取り外します。 

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

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

PCI アダプタカードを取り付けます。 

アダプタカードをホットプラグ対応のスロットに挿入します。スロットを電源に接続し、カードを構成します。 

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

PCI 構成に関する問題の障害追跡を行います。 

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

「PCI 構成に関する問題の障害追跡」

cfgadm コマンドによる PCI または PCIe ホットプラグ

この節では、SPARC および x86 システム上で PCI または PCIe アダプタカードのホットプラグを実行する手順について説明します。

ホットプラグ操作では、cfgadm コマンドに加えて、prtconf コマンドが便利です。prtconf コマンドはハードウェアに関連する追加の構成情報を表示します。

ハードウェアの追加後に prtconf コマンドを使用して、ハードウェアが正しく構成されているかどうかを確認します。たとえば、構成作業後に prtconf -D コマンドを使用して、新しくインストールしたハードウェアデバイスにドライバが設定されているかどうかを確認します。ハードウェアの構成の前にデバイスドライバがシステムに追加されていない場合、add_drv コマンドを使用して手動で追加された可能性があります。

詳細については、prtconf(1M)add_drv(1M) のマニュアルページを参照してください。

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

PCIe LED インジケータの動作

システムの LED インジケータを監視して、スロットのホットプラグ動作の状態を視覚的に把握できます。PCI Express の場合の LED の動作は、PCI Express の仕様で定義された動作と一致するか、そうでない場合は動作がプラットフォームに依存することがあります。

詳細は、ハードウェアマニュアルを参照してください。PCI Express の場合は、Attention ボタンが押されると電源インジケータが点滅し、状態遷移が始まったことを示します。状態遷移が終了すると、点滅が終了します。

ProcedurePCI スロット構成情報を表示する方法

この手順は、PCIe 構成情報を含めるように更新されました。

cfgadm コマンドは、システム上の PCI ホットプラグ対応デバイスとスロットの状態を表示します。詳細については、cfgadm(1m) のマニュアルページを参照してください。

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

  2. 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
    • 具体的な 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 アダプタカードのタイプを示します。

    • 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 が別の状態に遷移していないことを確認できます。


ProcedurePCI アダプタカードを取り外す方法

PCIe アダプタカードを取り外す場合のために、次の手順が更新されました。ただし、アダプタカードを取り外す手順は、PCI と PCIe のどちらを使用するかに関係なく同じです。

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

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

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

  4. 下に示すように cfgadm(1M) コマンドを使用してデバイスを手動で構成解除します。または、PCIe アダプタカードを使用している場合は、自動構成方式を使用します。たとえば、ハードウェアマニュアルに従ってスロットの Attention ボタンを押します。


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

    次に例を示します。


    # 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

    注 –

    デバイスが構成解除されると、 TypeCondition も unknown になります。


  6. スロットへの電源を手動で切り離します。自動構成方式を使用する場合は、この手順は不要です。詳細は、ハードウェアマニュアルを参照してください。


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

    次に例を示します。


    # 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 
  8. プラットフォームのガイドの適切な手順に従って 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

    注 –

    プラットフォームの実装に応じて、ブート時に自動構成方式を有効または無効にすることができます。環境に適した自動構成方式を設定してください。


ProcedurePCI アダプタカードを取り付ける方法

PCIe アダプタカードを取り付ける場合のために、次の手順が更新されました。ただし、アダプタカードを追加する手順は、PCI と PCIe のどちらを使用するかに関係なく同じです。

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

  2. ホットプラグ対応のスロットを確認して、ラッチを開きます。

    たとえば、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 
  3. ハードウェアマニュアルの適切な手順に従って、PCI アダプタカードをスロットに挿入します。

  4. 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 
  5. cfgadm コマンドを使用して、手動で電源をスロットに接続します。または、PCIe アダプタカードを使用している場合は、自動構成方式を使用します。たとえば、ハードウェアマニュアルに従ってスロットの Attention ボタンを押します。

    次に例を示します。


    # cfgadm -c connect pcie3
    
  6. 接続点が接続されていることを確認します。

    次に例を示します。


    # 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
  7. 下に示すように cfgadm コマンドを使用して PCI アダプタカードを手動で構成します。自動構成方式を使用する場合は、この手順は不要です。詳細は、ハードウェアマニュアルを参照してください。

    次に例を示します。


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

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


    注 –

    プラットフォームの実装に応じて、ブート時に自動構成方式を有効または無効にすることができます。環境に適した自動構成方式を設定してください。


PCI 構成に関する問題の障害追跡

エラーメッセージ

cfgadm: Configuration operation invalid: invalid transition
エラーの発生原因

無効な移行を行いました。

解決方法

cfgadm -c コマンドが適切に発行されているかどうかを確認します。cfgadm コマンドで現在の受容体と占有装置の状態を確認し、Ap_id が正しいことを確認します。

エラーメッセージ

cfgadm: Attachment point not found
エラーの発生原因

指定した接続点は見つかりません。

解決方法

接続点が正しいかどうかを確認します。cfgadm コマンドを使用して、利用可能な接続点のリストを表示します。物理パスを調べて、まだ接続点があるかどうかも確認してください。

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 ...]

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

  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 スクリプトを記述します。 

作業 1 - 4 で特定した情報に基づいて RCM スクリプトを記述します。 

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

6. RCM スクリプトをインストールします。 

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

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

7. RCM スクリプトをテストします。 

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

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

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

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

作業 

説明 

参照先 

1. 動的に削除するリソースを特定します。 

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

cfgadm(1m)

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

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

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

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

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

rcmscript(4)

4. RCM スクリプトを記述します。 

作業 1 - 3 で特定した情報に基づいて RCM スクリプトを記述します。 

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

5. RCM スクリプトをインストールします。 

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

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

6. RCM スクリプトをテストします。 

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

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

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

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

vendor

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

service

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

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

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

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

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

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

  2. 適切なディレクトリにスクリプトをコピーします。

    表 6–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
    

ProcedureRCM スクリプトの削除方法

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

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

    次に例を示します。


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


    # pkill -HUP -x -u root rcm_daemon
    

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

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