JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 の管理: デバイスとファイルシステム     Oracle Solaris 11.1 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  リムーバブルメディアの管理 (タスク)

2.  CD および DVD への書き込み (タスク)

3.  デバイスの管理 (タスク)

4.  デバイスの動的構成 (タスク)

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

接続点

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

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

hotplug コマンドによる PCIe ホットプラグ

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

cfgadm コマンドによる SCSI ホットプラグ (タスクマップ)

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

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

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

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

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

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

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

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

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

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

SCSI 構成に関する問題のトラブルシューティング

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

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

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

PCIe LED インジケータの動作

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

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

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

PCI 構成に関する問題のトラブルシューティング

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

SATA デバイスの構成を解除する方法

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

Reconfiguration Coordination Manager (RCM) スクリプトの概要

RCM スクリプトについて

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

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

RCM スクリプトコマンド

RCM スクリプト処理環境

RCM スクリプトでのタスク

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

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

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

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

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

RCM スクリプトの削除方法

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

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

テープバックアップ用の RCM スクリプトの役割

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

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

5.  USB デバイスの管理 (タスク)

6.  InfiniBand デバイスの使用 (概要/タスク)

7.  ディスクの管理 (概要)

8.  ディスク使用の管理 (タスク)

9.  ディスクの管理 (タスク)

10.  ディスクの設定 (タスク)

11.  COMSTAR を使用したストレージデバイスの構成 (タスク)

12.  Oracle Solaris Internet Storage Name Service (iSNS) の構成と管理

13.  format ユーティリティー (参照情報)

14.  ファイルシステムの管理 (概要)

15.  ファイルシステムの作成およびマウント (タスク)

16.  追加スワップ空間の構成 (タスク)

17.  ファイルとファイルシステムのコピー (タスク)

18.  テープドライブの管理 (タスク)

索引

RCM スクリプトでのタスク

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

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

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

タスク
説明
参照先
1. アプリケーションが使用するリソースを特定します。
アプリケーションが使用するリソース (デバイス名) を特定します。このデバイスは動的に取り外される可能性があります。
2. リソースを解放するコマンドを特定します。
アプリケーションからリソースを完全に解放するようにアプリケーションに通知するコマンドを特定します。
アプリケーションのドキュメント
3. リソースを取り外した後に使用するコマンドを特定します。
リソースを取り外したことをアプリケーションに通知するコマンドを含めます。
4. リソースの取り外しに失敗した場合のコマンドを特定します。
使用可能なリソースについてアプリケーションに通知するコマンドを含めます。
5. RCM スクリプトを記述します。
タスク 1 - 4 で特定した情報に基づいて RCM スクリプトを記述します。
6. RCM スクリプトをインストールします。
適切なスクリプトディレクトリにスクリプトを追加します。
7. RCM スクリプトをテストします。
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストします。

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

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

タスク
説明
参照先
1. 動的に削除するリソースを特定します。
cfgadm -l コマンドを使って削除する可能性があるリソース (デバイス名) を特定します。
2. 停止するアプリケーションを特定します。
アプリケーションを完全に停止させるコマンドを特定します。
アプリケーションのドキュメント
3. リソースの取り外し前および取り外し後のコマンドを特定します。
リソースを取り外す前後の動作を特定します。
4. RCM スクリプトを記述します。
タスク 1 - 3 で特定した情報に基づいて RCM スクリプトを記述します。
5. RCM スクリプトをインストールします。
適切なスクリプトディレクトリにスクリプトを追加します。
6. RCM スクリプトをテストします。
手動でスクリプトコマンドを実行し、動的再構成操作を実行してスクリプトをテストします。

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

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

vendor

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

service

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

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

RCM スクリプトのインストールまたは削除を行うには、管理者になる必要があります。この表を使用して、RCM スクリプトをインストールするディレクトリを判断してください。

表 4-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. 適切なディレクトリにスクリプトをコピーします。

    表 4-1 を参照してください。

    例:

    # cp ABC,sample.pl /usr/lib/rcm/scripts
  3. スクリプトのユーザー ID およびグループ ID を希望の値に変更します。
    # chown user:group /usr/lib/rcm/scripts/ABC,sample.pl
  4. SIGHUP を RCM デーモンに送信します。
    # pkill -HUP -x -u root rcm_daemon

RCM スクリプトの削除方法

  1. 管理者になります。
  2. RCM スクリプトディレクトリからスクリプトを削除します。

    例:

    # rm /usr/lib/rcm/scripts/ABC,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
   #
   # 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);
            }
    }