5    システム・サービスによるシャドウ・セットの作成と管理

この章では,$MOUNT および $DISMOU のシステム・サービスを使って, シャドウ・セットを,作成,マウント,ディスマウント, 解除する方法を説明します。また,$GETDVI システム・サービスを使って, シャドウ・セットの現在の状態を取得する方法も説明します。 これらの OpenVMS システム・サービスについての詳細は,『HP OpenVMS System Services Reference Manual』を参照してください。

5.1    $MOUNT を使ってシャドウ・セットを作成しマウントする

ユーザが作成するプログラムの中で $MOUNT システム・サービスを使ってシャドウ・セットを作成し管理することができます。 シャドウ・セットの作成,マウント,デバイスの追加を行う $MOUNT の呼び出しには, 同じ構文を使います。システムにマウント操作を行わせるためには, $MOUNT 項目リストを作成する必要があります。 この項目リストでは,シャドウ・セットに対応する仮想ユニットとこのシャドウ・セットに含まれるメンバ (物理デバイス) を指定します。

$MOUNT システム・サービス呼び出しの形式は,次のとおりです。

SYS$MOUNT itmlst

例 5-1 では,シャドウ・セットを作成してマウントするための $MOUNT 項目リストを作成する MACRO-32 文を示します。

例 5-1:  シャドウ・セットを作成してマウントするための項目リスト

DSA23:  .ASCID /DSA23:/
MEMBER001:   .ASCID /$4$DUA9:/
MEMBER002:   .ASCID /$4$DUA5:/
 
VOLUME_LABEL:  .ASCID /MYVOLUME/
VOLUME_LOGNM:  .ASCID /DISK$MYVOLUME/
 
        .MACRO   .ITEM, SIZE, CODE, BUFFER, RETURN=0
        .WORD    SIZE, CODE
        .ADDRESS BUFFER, RETURN
        .ENDM    .ITEM
 
ITMLST: .ITEM   6,  MNT$_SHANAM, DSA23 
        .ITEM   8,  MNT$_SHAMEM, MEMBER001 
        .ITEM   8,  MNT$_SHAMEM, MEMBER002
 
        .ITEM   8,  MNT$_VOLNAM, VOLUME_LABEL  
        .ITEM   13, MNT$_LOGNAM, VOLUME_LOGNM  
         .LONG   0
 

以下のリストで,例 5-1 の要点を説明します。

シャドウ・セットに別のデバイスを後で追加する場合は, 仮想ユニットの名前とシャドウ・セットに追加したいデバイスの名前を含む項目リストを指定して,$MOUNT 呼び出しを実行します。 例 5-2 には, 例 5-1 で作成されたシャドウ・セットに物理デバイス $4$DUA10: を追加する方法を示します。

例 5-2:  シャドウ・セットにメンバを追加する項目リスト

DSA23:  .ASCID /DSA23:/
 
MEMBER003:  .ASCID /$4$DUA10:/
VOLUME_LABEL:  .ASCID /MYVOLUME/
VOLUME_LOGNM:  .ASCID /DISK$MYVOLUME/
 
        .MACRO   .ITEM, SIZE, CODE, BUFFER, RETURN=0
        .WORD    SIZE, CODE
        .ADDRESS BUFFER, RETURN
        .ENDM    .ITEM
 
ITMLST: .ITEM   6,  MNT$_SHANAM, DSA23  
 
        .ITEM   9,  MNT$_SHAMEM, MEMBER003
        .ITEM   8,  MNT$_VOLNAM, VOLUME_LABEL 
        .ITEM   13, MNT$_LOGNAM, VOLUME_LOGNM 
        .LONG   0
 

5.2 節 では,$MOUNT シャドウ・セット項目コードを簡単に説明し,正しい$MOUNT 項目リストを作成する方法を説明します。 $MOUNT サービスと項目コードの詳細は,『HP OpenVMS System Services Reference Manual』を参照してください。

5.2    $MOUNT シャドウ・セット項目コード

この節では,シャドウ・セット管理に役に立つ SYS$MOUNT 項目コードについて簡単に説明します。 SYS$MOUNT,項目コード,その他のシステム・サービスの詳細は,『HP OpenVMS System Services Reference Manual』を参照してください。

5.2.1    MNT$_FLAGS 項目コード

MNT$_FLAGS 項目コードは,各々のビットでマウント操作のオプションを指定する,ロングワードのビット・ベクタを指定します。 バッファには,ビット・ベクタのロングワードが必要です。

$MNTDEF マクロでは,ビット・ベクタ内の各々のオプション (ビット) の記号名を定義しています。 ビット・ベクタは,必要なオプションの記号名を論理和演算で結合して作ります。 以下のリストは, 各々のシャドウ・セット・オプションの記号名の説明です。

5.2.2    MNT$_SHANAM 項目コード

マウントする仮想ユニットの名前を指定します。 バッファは,DSAn の形式の仮想ユニット名を格納する 1 〜 64 文字の文字列型です。 この文字列には,論理名を指定することもできます。 論理名の場合は,仮想ユニット名に変換できなければなりません。 項目リストには,少なくとも 1 つの MNT$_SHANAM 項目記述子が必要です。

複数のシャドウ・セットを含むボリューム・セットをマウントする場合は, ボリューム・セットに含まれる各々の仮想ユニットには 1 つの MNT$_SHANAM 項目記述子がなければなりません。

5.2.3    MNT$_SHAMEM 項目コード

シャドウ・セットにマウントする物理デバイスの名前を指定します。シャドウイング・ソフトウェアは, MNT$_SHANAM 項目記述子で指定される仮想ユニットに対応するシャドウ・セットにこのデバイスを追加します。 MNT$_SHANAM 記述子は, デバイス名を持つ 1 〜 64 文字の文字列型です。この文字列は物理デバイス名でも, 論理名でも構いませんが, 論理名の場合は物理デバイス名に変換できなくてはなりません。

項目リストには,メンバを指定する項目記述子が,少なくとも 1 つ必要です。 この項目記述子は MNT$_SHANAM 項目記述子の後になくてはなりません。

5.2.4    $MOUNT 項目リスト作成時の要点

$MOUNT 項目リストを作成する場合に,覚えておかなくてはならない要点がいくつかあります。

5.3    $MOUNT を使ってボリューム・セットをマウントする

ボリューム・セットをマウントするときは,必ず最大のストレージ容量を持つボリュームが最初になるように並べます。 最大のボリュームを最初に指定する理由は,MOUNT コマンド行に並べられた最初のボリュームに, ボリューム・セットとディレクトリの情報が書き込まれるからです。 小容量のディスクではボリューム・セットとディレクトリの情報を記録するためのストレージが十分確保できないときがあります。

例 5-3 では,2 つのシャドウ・セットを持つボリューム・セットをマウントするための $MOUNT システム・サービス 項目リストを作成する MACRO-32 文を示します。

例 5-3:  ボリューム・セットを作成してマウントするための項目リスト

DSA23:  .ASCID /DSA23:/
DSA51:  .ASCID /DSA51:/
MEMBER009:   .ASCID /$4$DUA9:/
MEMBER005:   .ASCID /$4$DUA5:/
MEMBER010:  .ASCID /$4$DUA10:/
MEMBER012:  .ASCID /$4$DUA12:/
MEMBER003:   .ASCID /$4$DUA3:/
MEMBER034:  .ASCID /$4$DUA34:/
VOLUME_WORK1:  .ASCID /WORK1/
VOLUME_WORK2:  .ASCID /WORK2/
VOLUME_LOGNM:  .ASCID /WRKD$/
 
        .MACRO   .ITEM, SIZE, CODE, BUFFER, RETURN=0
        .WORD    SIZE, CODE
        .ADDRESS BUFFER, RETURN
        .ENDM    .ITEM
 
ITMLST: .ITEM   6, MNT$_SHANAM, DSA23  
        .ITEM   8, MNT$_SHAMEM, MEMBER009   
        .ITEM   8, MNT$_SHAMEM, MEMBER005
        .ITEM   9, MNT$_SHAMEM, MEMBER010
        .ITEM   5, MNT$_VOLNAM, VOLUME_WORK1  
        .ITEM   6, MNT$_SHANAM, DSA51  
        .ITEM   9, MNT$_SHAMEM, MEMBER012  
        .ITEM   8, MNT$_SHAMEM, MEMBER003
        .ITEM   9, MNT$_SHAMEM, MEMBER034
        .ITEM   5, MNT$_VOLNAM, VOLUME_WORK2   
        .ITEM   5, MNT$_LOGNAM, VOLUME_LOGNM   
        .LONG   
 

以下のリストで,例 5-3 の要点を説明します。

5.4    $DISMOU を使ってシャドウ・セットをディスマウントする

$DISMOU システム・サービスを使うと,以下の 4 つのシャドウ・セット 操作を行うことができます。

$DISMOU システム・サービス呼び出しの形式は,次のとおりです。

SYS$DISMOU devnam, flags

$DISMOU の動作は,シャドウ・セット仮想ユニットとシャドウ・セット・メンバのどちらを devnam 引数に指定するかに依存します。

$DISMOU サービスとその引数についての詳細は,『HP OpenVMS System Services Reference Manual』を参照してください。

5.4.1    シャドウ・セットからのメンバの削除

シャドウ・セットから 1 つのメンバを削除するには, $DISMOU を呼び出す必要があります。devnam 引数では, 削除したいシャドウ・セット・メンバの名前を指定します。指定したメンバは, flags 引数に DMT$M_NOUNLOAD オプションを指定しない限り, ディスクの回転が止められます。

例 5-4 の MACRO-32 コードは, シャドウ・セットからメンバ $2$DUA9 を削除する $DISMOU 呼び出しを示しています。

例 5-4:  シャドウ・セットからのメンバの削除

$DMTDEF
FLAGS:  .LONG DMT$M_NOUNLOAD
MEMBER001: .ASCID /$2$DUA9:/
	.
	.
	.
 
$DISMOU_S -
	devnam = MEMBER001, -
	flags = FLAGS
	.
	.
	.
.END
 

5.4.2    シャドウ・セットのディスマウントと解除

シャドウ・セットを 1 つのノードからディスマウントするには, $DISMOU を呼び出す必要があります。devnam 引数では, ディスマウントしたいシャドウ・セットに対応する仮想ユニットの名前を指定します。 シャドウ・セットをクラスタ単位でディスマウントするには, この呼び出しの flags 引数で DMT$M_CLUSTER オプションを指定します。

シャドウ・セットを OpenVMS Cluster システムの 1 つのノードからディスマウントしても,OpenVMS Cluster システムの別のノードでマウントしたままだと,DMT$M_NOUNLOAD フラグを指定しなくても, シャドウ・セット内のどのシャドウ・セット・メンバもディスクの回転が止まりません。 この呼び出しが完了したとき,この呼び出しを実行したノードではシャドウ・セットは使えなくなりますが,シャドウ・セットをマウントしているクラスタ内の他のノードでは,シャドウ・セットは相変わらず使える状態になっています。

シャドウ・セットをディスマウントするノードが,シャドウ・セットをマウントしている唯一のノードの場合には,シャドウ・セットは解除されます。 シャドウ・セット・メンバ・デバイスは, DMT$M_NOUNLOAD フラグを指定していない限り,回転が止められます。

例 5-5 の MACRO-32 コードは, $DISMOU システム・サービスを使って,仮想ユニット DSA23 に対応するシャドウ・セットをディスマウントする方法を示しています。

例 5-5:  シャドウ・セットをローカルにディスマウントして解除する

$DMTDEF
FLAGS:    .LONG 0
DSA23:  .ASCID /DSA23:/
	.
	.
	.
 
$DISMOU_S -
	devnam = DSA23, -
	flags = FLAGS
	.
	.
	.
.END
 

シャドウ・セットが解除されると,以下の状況になります。

例 5-6 の MACRO-32 コードは, クラスタにまたがってディスマウントを行う $DISMOU システム・サービス呼び出しを示しています。 シャドウ・セットが最後のノードからディスマウントされたとき, シャドウ・セットは解除されます。

例 5-6:  クラスタにまたがるシャドウ・セットのディスマウントと解除

$DMTDEF
FLAGS:   .LONG  DMT$M_CLUSTER
DSA23:  .ASCID /DSA23:/
	.
	.
	.
 
$DISMOU_S -
	devnam = DSA23, -
	flags = FLAGS
	.
	.
	.
.END
 

クラスタ内のすべてのノードからシャドウ・セットをディスマウントする場合には, flags 引数で DMT$M_CLUSTER オプションを指定する必要があります。 クラスタ内の各々のノードからシャドウ・セットをディスマウントしたら (つまり,シャドウ・セットをマウントしているホストの数が 0 になったら), ボリューム・シャドウイング・ソフトウェアは,そのシャドウ・セットを解除します。

5.4.3    シャドウ・セット操作での $DISMOU フラグの設定

表 5-1 は,$DISMOU の flags 引数のオプションと,これらのオプションが指定された場合のシャドウ・セットの動作を説明しています。 これらのフラグ・オプションの詳細は,『HP OpenVMS System Services Reference Manual』の $DISMOU サービスの説明を参照してください。

表 5-1:  $DISMOU フラグ・オプション

オプション 説明

DMT$M_MINICOPY_REQUIRED

ミニコピーが有効になっていない ディスクでは,$DISMOU は失敗します。

DMT$M_MINICOPY_OPTIONAL

ディスク上でミニコピーが有効になっているかどうかにかかわらず,$DISMOU が実行されます。

DMT$M_FORCE

デバイスの接続が失われ,シャドウ・セットがマウント検査の状態になったときに,このフラグが設定されていると, 指定されたシャドウ・セット・メンバをシャドウ・セットから即座に削除します。

DMT$M_UNLOAD

すべてのシャドウイング関連の要求に対して有効。

DMT$M_CLUSTER

すべてのシャドウイング関連の要求に対して有効。

DMT$M_ABORT

仮想ユニットでは有効,メンバでは無視。

DMT$M_UNIT

仮想ユニットとメンバで無視。

5.5    $DISMOU と $MOUNT で返される状態値を評価する

この節では,$DISMOU と $MOUNT のシステム・サービスを使って, シャドウ・セットをマウントしたり,使ったりした場合に, 返される状態値について説明します。 これらのサービスから返される状態値の完全なリストについては,『HP OpenVMS System Services Reference Manual』を参照してください。

$MOUNT で状態値 SS$_BADPARAM が返された場合, 指定した項目リストに以下のエラーのいずれかが含まれている可能性があります。

シャドウイング関連のステータス・メッセージについては,付録 Aも参照してください。

5.6    $GETDVI を使ってシャドウ・セットの情報を取得する

$GETDVI システム・サービスは,システム上のシャドウ・セット・デバイスの 情報の取得に役立ちます。指定するシャドウ・セット項目コードに従って, 以下のタイプの情報を調べることができます。

$GETDVI 呼び出しの形式は,次のとおりです。

SYS$GETDVI [efn],[chan],[devnam],itmlst,[iosb],[astadr],[astprm],[nullarg]

$GETDVI サービスと $GETDVIW サービス,それらの引数についての詳細は,『HP OpenVMS System Services Reference Manual』を参照してください。

注意

$GETDVI システム・サービスでファイル・システム関連の項目コードを使って, シャドウ・セットの (FREEBLOCK 情報のような) 意味のあるシステム情報を 取得するためには,$GETDVI サービスに仮想ユニット名を指定する必要があります。 シャドウ・セットの 1 つのメンバのデバイス名を指定すると, $GETDVI サービスは値 0 を返すだけです。

5.6.1    $GETDVI シャドウ・セット項目コード

表 5-2 は,$GETDVI シャドウ・セット項目コードと返される情報です。

表 5-2:  SYS$GETDVI 項目コード

項目コード 機能

DVI$_SHDW_CATCHUP_COPYING

論理型のロングワードを返します。 値が 1 の場合,デバイスがコピー操作のターゲットであることを示します。

DVI$_SHDW_COPIER_NODE

コピー操作またはマージ操作をアクテフィブに実行しているノードの名前を,文字列として返します。

DVI$_SHDW_DEVICE_COUNT

仮想ユニット内のデバイスの総数 (コピー・ターゲットとして追加されているデバイスも含む) を,ロングワードとして返します。

DVI$_SHDW_GENERATION

仮想ユニットの現在の内部リビジョン番号を,クォドワードとして返します。

DVI$_SHDW_MASTER

論理型のロングワードを返します。 値が 1 の場合,デバイスが仮想ユニットであることを示します。

DVI$_SHDW_MASTER_MBR

マージ/コピー修復操作,およびシャドウ・セット回復操作に使用されるマスタ・メンバ・ユニットの名前を,文字列として返します。

DVI$_SHDW_MASTER_NAME

指定されたデバイスがシャドウ・セット・メンバの場合,$GETDVI はそれが属しているシャドウ・セットの仮想ユニット名を返します。

シャドウ・セットのデバイス名は,最大 64 文字まで許されるので, この項目記述子のバッファ・フィールド長には 64 (バイト) を指定してください。

仮想ユニットやシャドウ・セットのメンバでないデバイスを指定すると, $GETDVI は空文字列を返します。

DVI$_SHDW_MBR_COPY_DONE

現在のメンバ・ユニットで完了しているコピー操作の割合 (パーセント) を,ロングワードとして返します。

DVI$_SHDW_MBR_COUNT

仮想ユニット内のフル・ソース・メンバの数を,ロングワードとして返します。 コピー・ターゲットとして追加されるデバイスは,フル・ソース・メンバではありません。
DVI$_SHDW_MBR_MERGE_DONE

メンバで完了しているマージ操作の割合 (パーセント) を,ロングワードとして返します。

DVI$_SHDW_MBR_READ_COST

メンバ・ユニットの現在の値のセットを,ロングワードとして返します。 この値は,ユーザ指定の値を使用するように変更することができます。

DVI$_SHDW_MEMBER

論理型のロングワードを返します。 値が 1 の場合,デバイスがシャドウ・セット・メンバであることを示します。

DVI$_SHDW_MERGE_COPYING

論理型のロングワードを返します。 値が 1 の場合, デバイスがシャドウ・セットのマージ・メンバであることを示します。

DVI$_SHDW_MINIMERGE_ENABLE

論理値として解釈されるロングワードを返します。 値が TRUE の場合,クラスタ内のシステムに障害が発生したときに,仮想ユニットに対してフル・マージではなく,ミニマージが実行されることを示します。

DVI$_SHDW_NEXT_MBR_NAME

シャドウ・セットの次のメンバのデバイス名を返します。

仮想ユニットを指定すると,$GETDVI はシャドウ・セットのメンバ・デバイス名を返します。 仮想ユニットでもシャドウ・セット・メンバでもないデバイス名を指定すると,$GETDVI は空文字列を返します。

シャドウ・セットのデバイス名は,最大 64 文字まで許されるので, この項目記述子のバッファ・フィールド長には 64 (バイト) を指定してください。

DVI$_SHDW_READ_SOURCE

この時点で読み込みに使用されるメンバ・ユニットの名前を,ロングワードとして返します。 DVI$_SHDW_READ_SOURCE は,待ち行列の長さと読み込みコスト値の合計が最も小さいユニットを読み込みに使用します。 この値は,動的な値です。

DVI$_SHDW_SITE

指定された値のサイト値を,ロングワードとして返します。 この値は,SET DEVICE コマンドまたは SET SHADOW コマンドで設定されます。

DVI$_SHDW_TIMEOUT

デバイスに設定されている,ユーザ指定のタイムアウト値を,ロングワードとして返します。 SETSHOWSHADOW ユーティリティを使用して値を設定していない場合,SYSGEN のパラメータ SHADOW_MBR_TMO の値はメンバ・ユニット用に使用され,MVTIMEOUT の値は仮想ユニット用に使用されます。

5.6.2    シャドウ・セット・メンバのデバイス名を取得する

シャドウ・セットのメンバすべてのデバイス名を取得するには,$GETDVI を繰り返し呼び出す必要があります。 最初の $GETDVI 呼び出しでは, シャドウ・セットを代表する仮想ユニットとシャドウ・セットのメンバのデバイス名のいずれでも指定することができます。

5.6.2.1    仮想ユニット名

最初の呼び出しで仮想ユニット名を指定する場合,項目リストには, DVI$_SHDW_NEXT_MBR_NAME 項目記述子を含める必要があります。 この項目記述子内には,$GETDVI がシャドウ・セットの最小番号のメンバの名前を返します。 次の $GETDVI 呼び出しの devnam 引数では, その前の呼び出しで DVI$_SHDW_NEXT_MBR_NAME 項目記述子に返されたデバイス名を指定する必要があります。 この 2 番目の呼び出しの項目リストには, シャドウ・セット内で次に大きな番号のユニットの名前を受け取るために, DVI$_SHDW_NEXT_MBR_NAME 項目記述子を含める必要があります。 この $GETDVI 呼び出しは,シャドウ・セットにもうメンバがないことを意味する, 空文字列を $GETDVI が返すまで繰り返す必要があります。

5.6.2.2    シャドウ・セット・メンバ名

最初の呼び出しでシャドウ・セット・メンバのデバイス名を指定する場合, シャドウ・セットに含まれるすべてのメンバのデバイス名を取得する前に, そのシャドウ・セットに対応する仮想ユニット名を調べる必要があります。 そのため,最初の呼び出しでメンバを指定する場合, DVI$_SHDW_MASTER_NAME 項目記述子を含む項目リストも指定する必要があります。 $GETDVI はこの記述子にシャドウ・セットに対応する仮想ユニットの名前を返します。 この後,5.6.2.1 項 で説明した一連の $GETDVI 呼び出しを実行します。 各々の呼び出しの devnam 引数では, 前の呼び出しの DVI$_SHDW_NEXT_MBR_NAME 項目記述子に返されたデバイスの名前を指定します。 この呼び出しを,シャドウ・セットにもうメンバがないことを意味する,空文字列を $GETDVI が返すまで繰り返します。