前へ | 次へ | 目次 | 索引 |
この章では,$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 の要点を説明します。
シャドウ・セットに別のデバイスを後で追加する場合は,仮想ユニットの名前とシャドウ・セットに追加したいデバイスの名前を含む項目リストを指定して,$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 シャドウ・セット項目コードの説明です。
項目コード | 機能 |
---|---|
MNT$_FLAGS | 各々のビットでマウント操作のオプションを指定する,ロングワードのビット・ベクタを指定します。バッファには,ビット・ベクタのロングワードが必要です。
$MNTDEF マクロでは,ビット・ベクタ内の各々のオプション (ビット) の記号名を定義しています。ビット・ベクタは,必要なオプションの記号名を論理和演算で結合して作ります。以下のリストは,各々のシャドウ・セット・オプションの記号名の説明です。
|
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 の要点を説明します。
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 |
シャドウ・セットを 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 |
シャドウ・セットが解除されると,以下の状況になります。
ただし,各々のボリュームには,シャドウ・セットの一部であったことがマークされています。シャドウ・セットを解除した後も,各々のボリュームには,以前にシャドウ・セット・メンバであったことを示すボリューム・シャドウイング世代番号が残ります ( シャドウ・セットの外部でマウントし直していない場合 )。シャドウ・セットの一部であったことがマークされているボリュームは,不慮のデータ抹消を防ぐために,自動的にソフトウェアによる書き込み保護が行われます。これらのボリュームは,システム・サービスの MNT$_FLAGS 項目コードで MNT$M_OVR_SHAMEM オプションを指定しない限り,シャドウ・セットの外部では,書き込み用にマウントすることはできません。
例 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 サービスの説明を参照してください。
オプション | 説明 |
---|---|
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-3 は,$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 は空文字列を返します。 |
シャドウ・セットのメンバすべてのデバイス名を取得するには,$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 が返すまで繰り返します。
前へ | 次へ | 目次 | 索引 |