OpenVMS
Volume Shadowing for OpenVMS 説明書


前へ 次へ 目次 索引



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

この章では,$MOUNT および $DISMOU のシステム・サービスを使って,シャドウ・セットを,作成,マウント,ディスマウント,解除する方法を説明します。また,$GETDVI システム・サービスを使って,シャドウ・セットの現在の状態を取得する方法も説明します。これらの OpenVMS システム・サービスについての詳細は,『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  (1)
        .ITEM   8,  MNT$_SHAMEM, MEMBER001   (2)
        .ITEM   8,  MNT$_SHAMEM, MEMBER002 
        .ITEM   8,  MNT$_VOLNAM, VOLUME_LABEL  (3)
        .ITEM   13, MNT$_LOGNAM, VOLUME_LOGNM  (4)
        .LONG   0 

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

  1. 仮想ユニット項目記述子が最初にあることに注意してください。この項目記述子では,DSA23 を仮想ユニットの名前として指定しています。仮想ユニットとシャドウ・セット・メンバに名前を付けるための構文については, 第 4.2 節 を参照してください。

  2. 仮想ユニット項目記述子の後に,2 つのメンバ・ユニット項目記述子が続きます。 Volume Shadowing for OpenVMS はディスクをシャドウ・セットに追加するときに必要な操作のタイプ (コピーかマージ) を自動的に判断するため,すべてのデバイスが MNT$_SHAMEM 項目記述子でマウントされます。これらの項目記述子は物理デバイス $4$DUA9 と $4$DUA5 が, DSA23 で表されたシャドウ・セットに追加されることを指定しています。

  3. メンバ項目記述子の後には,MYVOLUME をシャドウ・セットのボリューム・ラベルとして指定する項目記述子が続きます。

  4. 最後の項目記述子では, DISK$MYVOLUME をシャドウ・セットの論理名として指定しています。

シャドウ・セットに別のデバイスを後で追加する場合は,仮想ユニットの名前とシャドウ・セットに追加したいデバイスの名前を含む項目リストを指定して,$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 サービスと項目コードの詳細は,『OpenVMS System Services Reference Manual』を参照してください。

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

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

表 5-1 は, $MOUNT シャドウ・セット項目コードの説明です。

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

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

  • MNT$M_INCLUDE は,シャドウ・セットをディスマウントやシステム障害の直前の状態に自動的に再構築します。完全なシャドウ・セットをマウントするときにこのオプションを使います。

  • MNT$M_NOCOPY は,各物理デバイスをシャドウ・セットにマウントしたり追加したりするときの自動コピー操作を無効にします。このオプションによって,意図していないデバイスをシャドウ・セットに追加したときに発生する,不注意によるデータ喪失を避けることができます。

  • MNT$M_MINICOPY_REQUIRED を指定すると,そのディスクでミニコピーが無効になっているときに,$MOUNT が失敗します。

  • MNT$M_MINICOPY_OPTIONAL を指定すると,そのディスクでミニコピーが有効になっていなくても,$MOUNT が続行されます。

  • MNT$M_OVR_SHAMEM を指定すると,以前シャドウ・セットのメンバであったディスクを,シャドウ・セットとしてではなく単独のディスクとしてマウントできます。このオプションを指定しないと,$MOUNT は不慮のデータ削除を避けるために,ボリュームを自動的に書き込み保護にしてマウントします。このオプションを指定するためには,ユーザはそのボリュームの所有者であるか VOLPRO 特権を持っている必要があります。

    このオプションを使うと,シャドウ・セット世代番号はボリュームから削除されます。その後再びそのボリュームを以前のシャドウ・セットにマウントすると, $MOUNT はそれを無関係なボリュームであるとみなし,コピー操作をマークします。

  • MNT$M_REQUIRE_MEMBERS は,$MOUNT システム・サービスを有効にするために MOUNT コマンドが発行されたときに,/SHADOW 修飾子で指定したすべての物理デバイスが,アクセス可能である必要があるかどうかを制御します。

  • MNT$M_VERIFY_LABELS は,シャドウ・セットに追加されるすべてのメンバが, SCRATCH_DISK というボリューム・ラベルを持っていることを要求します。これにより,間違ったディスクがシャドウ・セットに追加されないことが保証されます。VERIFY_LABELS を使う予定がある場合は,最初にディスクにラベルを割り当てる必要があります。これは,セットに追加するディスクを SCRATCH_DISK というラベルで初期化するか, SET VOLUME/LABEL コマンドでディスクにラベルを指定するかのどちらかで行います。

    デフォルトは NOVERIFY_LABEL です。これは,コピーのターゲットのラベルを確認しないことを意味します。このデフォルト動作は,このオプションが導入される前の動作と同じです。

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

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

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

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

$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  (1)
        .ITEM   8, MNT$_SHAMEM, MEMBER009   (2)
        .ITEM   8, MNT$_SHAMEM, MEMBER005 
        .ITEM   9, MNT$_SHAMEM, MEMBER010 
        .ITEM   5, MNT$_VOLNAM, VOLUME_WORK1  (3)
        .ITEM   6, MNT$_SHANAM, DSA51  (4)
        .ITEM   9, MNT$_SHAMEM, MEMBER012  (4)
        .ITEM   8, MNT$_SHAMEM, MEMBER003 
        .ITEM   9, MNT$_SHAMEM, MEMBER034 
        .ITEM   5, MNT$_VOLNAM, VOLUME_WORK2   (4)
        .ITEM   5, MNT$_LOGNAM, VOLUME_LOGNM   (5)
        .LONG   0 

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

  1. ボリューム・セットの最初のボリュームの仮想ユニット項目記述子が最初にあることに注意してください。この項目記述子では,ボリューム・セットの最初の仮想ユニットの名前として DSA23 を指定しています。

  2. 仮想ユニット項目記述子の後には,最初の仮想ユニットに対応する各々のデバイス,すなわちメンバ $4$DUA9,$4$DUA5,および $4$DUA10 の項目記述子が続きます。

  3. メンバ項目記述子の後には,ボリューム・セット内の最初のシャドウ・セットのボリューム・ラベルが WORK1 であることを指定する項目記述子が続きます。

  4. ボリューム・セット内の最初のシャドウ・セットの記述子の後には,ボリューム・セット内の 2 番目のシャドウ・セットについて同様の項目記述子が続きます。これらの項目記述子では,2 番目の仮想ユニットが DSA51,デバイスが $4$DUA12,$4$DUA3,および$4$DUA34,ボリューム・ラベルが WORK2 であることを指定しています。

  5. 最後の項目記述子では,ボリューム・セット全体の論理名を WRKD$ とすることを指定しています。

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

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

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


    SYS$DISMOU devnam, flags     

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

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

表 5-2 $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 のシステム・サービスを使って,シャドウ・セットをマウントしたり,使ったりした場合に,返される状態値について説明します。これらのサービスから返される状態値の完全なリストについては,『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 サービス,それらの引数についての詳細は,『OpenVMS System Services Reference Manual』を参照してください。

注意

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

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

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

表 5-3 SYS$GETDVI 項目コード
項目コード 機能
DVI$_SHDW_CATCHUP_COPYING 論理型のロングワードを返します。値が 1 の場合,デバイスがコピー操作のターゲットであることを示します。
DVI$_SHDW_MASTER 論理型のロングワードを返します。値が 1 の場合,デバイスが仮想ユニットであることを示します。
DVI$_SHDW_MASTER_NAME1 指定されたデバイスがシャドウ・セット・メンバの場合,$GETDVI はそれが属しているシャドウ・セットの仮想ユニット名を返します。

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

DVI$_SHDW_MEMBER 論理型のロングワードを返します。値が 1 の場合,デバイスがシャドウ・セット・メンバであることを示します。
DVI$_SHDW_MERGE_COPYING 論理型のロングワードを返します。値が 1 の場合,デバイスがシャドウ・セットのマージ・メンバであることを示します。
DVI$_SHDW_NEXT_MBR_NAME1 シャドウ・セットの次のメンバのデバイス名を返します。仮想ユニットを指定すると, $GETDVI はシャドウ・セットのメンバ・デバイス名を返します。仮想ユニットでもシャドウ・セット・メンバでもないデバイス名を指定すると, $GETDVI は空文字列を返します。


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

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 が返すまで繰り返します。


前へ 次へ 目次 索引