ETERNUS SF AdvancedCopy Manager 運用手引書 13.0 -Solaris- |
目次
索引
![]() ![]() |
本章では、AdvancedCopy Managerのレプリケーションの前後処理を行うシェルスクリプトについて説明します。
レプリケーションの前後処理のシェルスクリプトは、レプリケーション(複製)処理の前後で起動されます。
これらのシェルスクリプトには、AdvancedCopy Managerが、複製元ボリュームおよび複製先ボリュームに必要な処理を記述します。
この章では、前後処理の設定について説明します。
AdvancedCopy Managerでのレプリケーションの前後処理は、複製元/複製先ボリュームの双方に対して実施する必要がありますが、その目的は異なります。
複製元ボリュームに対する前後処理
複製元データを一時的に整合性の保証された状態で凍結することを目的としています。前処理で複製元データを一時的に凍結し、複製作成後、後処理で凍結状態を解除します。
複製先ボリュームに対する前後処理
レプリケーション(複製)処理中にアプリケーションが複製先ボリュームにアクセスさせないことを目的としています。前処理で複製先データをアクセス禁止状態とし、複製作成後、後処理でアクセス禁止状態を解除します。
前後処理で行う具体的な処理は、そのボリュームのデータ内容によって異なります。次章では、ファイルシステムとデータベースの前後処理についてそれぞれ説明します。
ファイルシステムの前後処理とは、ファイルシステムのアンマウント/マウント処理です。複製元ボリュームに対する前後処理は、複製元データを保証するためのものです。複製先ボリュームに対する前後処理は、同期処理実行中やスナップショットコピー時に他プロセスからのアクセスを不可能にするためのものです。ボリュームがマウントされていない場合は、前後処理は実施されません。
ファイルシステムの前後処理の実施状況を以下に示します。この表は、前後処理が実行されるかどうかは、コマンド種別によって異なり、さらに、そのコマンドを実行したときのコピー状態によっても異なることを示しています。
コマンド |
コピー状態 |
複製元/複製先 |
前処理 |
後処理 |
---|---|---|---|---|
複製開始コマンド (swsrpstartsync) |
未コピー状態または 複製確立状態 |
複製元 |
× |
× |
複製先 |
○--(1) |
× |
||
複製作成コマンド (swsrpmake) |
等価性維持状態 |
複製元 |
○ |
○ |
複製先 |
× |
○--(2) |
||
複製解除コマンド (swsrpcancel) |
等価性維持状態 |
複製元 |
○ |
○ |
複製先 |
× |
○--(2) |
||
複製確立状態 |
複製元 |
× |
× |
|
複製先 |
× |
× |
||
コピー中 |
複製元 |
× |
× |
|
複製先 |
× |
× |
||
スナップショット複製作成コマンド (swsrpmake) |
未コピー状態 |
複製元 |
○ |
○ |
複製先 |
○ |
○ |
(1)で行った前処理に対する後処理は(2)で行われます。(2)の後処理では、(1)の前処理でアンマウントしたマウントポイントに再マウントを行います。
ファイルシステムの前後処理は、カスタマイズ可能なようにスクリプトになっています。レプリケーション管理コマンドを実施した際に、上の表にしたがって起動されます。また、サーバ間レプリケーションの場合、接続されていないボリュームの前後処理は、TCP/IPによるリモート実行でこれらのスクリプトが実行されます。
図 C.1 に前後処理の動作イメージを示します。
前後処理で標準の前後処理以外で必要な処理がある場合はそれぞれのスクリプトをカスタマイズしてください。
スクリプトをカスタマイズする場合、エラーコードは以下の規約に従ってください。
エラーコード |
用途 |
---|---|
0-99 |
使用不可(AdvancedCopy Managerが予約) |
100-255 |
使用可能 |
データベースの前後処理については、AdvancedCopy Managerでは機能を提供しませんので、AdvancedCopy Managerコマンド実行の前後で独自に実施する必要があります。
前処理スクリプトには複写元ボリューム(RepSrc.Pre)と複写先ボリューム(RepDst.Pre)を用意し、以下のディレクトリ配下に格納されています。処理の必要性に応じてスクリプトをカスタマイズしてください。
非クラスタ運用の場合
/etc/opt/FJSVswsrp/shディレクトリ配下
クラスタ運用の場合
/etc/opt/FJSVswsrp/<論理ノード名>/shディレクトリ配下
RepSrc.pre(複写元ボリューム前処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Preprocessing of Replication(Source) processing 8: # 9: # Argument: $1 Device name of Source disk 10: # $2 Mount point of Source disk 11: # 12: # Error number 13: # 2: Argument error 14: # 10: umount error 15: 16: # Argument check 17: case $# in 18: 2) 19: ;; 20: *) 21: exit 2 22: ;; 23: esac 24: 25: device=$1 26: mount_point=$2 27: 28: # Determination postprocessing file name 29: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 30: then 31: # /dev/dsk/c?t?d?s? -> c?t?d?s? 32: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 33: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 34: then 35: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 36: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 37: dev="`echo $device | /usr/bin/cut -d/ -f5`" 38: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 39: then 40: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 41: then 42: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 43: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 44: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 45: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 46: device="`echo $device | /usr/bin/cut -d: -f1`" 47: else 48: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 49: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 50: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 51: fi 52: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 53: then 54: # /dev/vx/dsk/volume -> _vx_rootdg_volume 55: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 56: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 57: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 58: then 59: # /dev/vx/dmp/device -> _vx_pv_device 60: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 61: else 62: exit 0 63: fi 64: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre" 65: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype" 66: 67: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 68: 69: if [ "$mount_point" != "" ] 70: # When device was mounted 71: # 72: then 73: 74: # When device cannot be unmounted 75: # 76: # if [ "$device" = "/dev/dsk/c*t*d*s*" ] 77: # then 78: # /usr/sbin/lockfs -w $mount_point > /dev/null 2>&1 79: # sync 80: # sync 81: # echo "lockfs,$mount_point" > $post_file 82: # 83: # When device can be unmounted 84: # 85: # else 86: # 87: /usr/bin/df -ln $mount_point | /usr/bin/cut -f2 -d: | /usr/bin/cut -f2 -d' ' > $fstype_file 88: 89: /usr/sbin/umount $mount_point 2>/dev/null 90: 91: if [ $? != 0 ] 92: then 93: retry_count=3 94: sleep_time=1 95: result_flag=1 96: 97: while [ $retry_count -gt 0 ] 98: do 99: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 100: if [ $? != 0 ] 101: then 102: retry_count=`expr $retry_count - 1` 103: /usr/bin/sleep $sleep_time 104: else 105: /usr/bin/rm -f $err_log_path/$dev.umount 106: result_flag=0 107: break 108: fi 109: done 110: 111: if [ $result_flag != 0 ] 112: then 113: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 114: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 115: exit 10 116: fi 117: fi 118: 119: echo "mount,$mount_point" > $post_file 120: 121: # fi 122: 123: # When device was not mounted 124: # 125: else 126: echo "none" > $post_file 127: fi 128: 129: exit 0 |
RepDst.pre(複写先ボリューム前処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Preprocessing of Replication(Destination) processing 8: # 9: # Argument: $1 Device name of Destination disk 10: # $2 Mount point of Destination disk 11: # 12: # Error number 13: # 2: Argument error(system error) 14: # 10: umount error 15: 16: # Argument check 17: case $# in 18: 2) 19: ;; 20: *) 21: exit 2 22: ;; 23: esac 24: 25: device=$1 26: mount_point=$2 27: 28: # Determination postprocessing file name 29: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 30: then 31: # /dev/dsk/c?t?d?s? -> c?t?d?s? 32: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 33: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 34: then 35: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 36: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 37: dev="`echo $device | /usr/bin/cut -d/ -f5`" 38: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 39: then 40: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 41: then 42: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 43: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 44: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 45: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 46: device="`echo $device | /usr/bin/cut -d: -f1`" 47: else 48: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 49: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 50: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 51: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 52: fi 53: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 54: then 55: # /dev/vx/dsk/volume -> _vx_rootdg_volume 56: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 57: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 58: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 59: then 60: # /dev/vx/dmp/device -> _vx_pv_device 61: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 62: else 63: exit 0 64: fi 65: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 66: 67: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 68: 69: if [ "$mount_point" != "" ] 70: # When device was mounted 71: # 72: then 73: 74: /usr/sbin/umount $mount_point 2>/dev/null 75: 76: if [ $? != 0 ] 77: then 78: retry_count=3 79: sleep_time=1 80: result_flag=1 81: 82: while [ $retry_count -gt 0 ] 83: do 84: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 85: if [ $? != 0 ] 86: then 87: retry_count=`expr $retry_count - 1` 88: /usr/bin/sleep $sleep_time 89: else 90: /usr/bin/rm -f $err_log_path/$dev.umount 91: result_flag=0 92: break 93: fi 94: done 95: 96: if [ $result_flag != 0 ] 97: then 98: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 99: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 100: exit 10 101: fi 102: fi 103: 104: echo "mount,$mount_point" > $post_file 105: 106: # When device was not mounted 107: # 108: else 109: echo "none" > $post_file 110: fi 111: 112: exit 0 |
マウントされているがアンマウントしたくない複写元ボリュームに対しては、以下のカスタマイズ例を参考にしてスクリプトをカスタマイズしてください。
アンマウントしたくない複写元ボリュームについて
複写元ボリューム前処理スクリプト(RepSrc.pre)の76〜81、85、121行目のコメント("#")をエディタ等で消去し、76行目のif文で対象となる複写元ボリューム名を指定してください。
アンマウントしたくない複写元ボリュームに対する複写先ボリュームについて
複写先ボリューム後処理スクリプト(RepDst.post)の84〜136行目のコメント("#")をエディタ等で消去し、84行目のif文で対象となる複写先ボリューム名を指定してください。
この操作は、ファイルシステムが以下の場合のみ可能です。
ufs
SafeFILE(シングルパーティション構成)
カスタマイズしたスクリプトによる複写元ボリュームの前後処理の動作は、以下のようになります。
複写元ボリュームの状態 |
複写元前処理 |
複写元後処理 |
---|---|---|
マウントされている |
複写元ボリュームへの更新を抑止します |
複写元ボリュームへの更新抑止を解除します |
カスタマイズしたスクリプトによる複写先ボリュームの後処理の動作は、以下のようになります。
複写先後処理 |
複写先ボリュームの整合性を確認します |
標準のスクリプトを使用した運用では、アドバンスト・コピー(EC/OPC)の前にファイルシステムをアンマウントすることにより、ファイルシステムのキャッシュの書き出しと、その後の更新が抑止されるため、ファイルシステム全体のデータの整合性が保証されます。
スクリプトをカスタマイズして、ファイルシステムのアンマウントを行わない場合は、lockfs -wを使用してファイルシステムのキャッシュのフラッシュと、その後の更新を抑止しますが、Write Open中のファイル(オンラインバックアップをサポートしているOracleのデータベーススペースは除きます)については、ファイル内容の保証はされません。
また、メタデータ更新中のプロセスがある場合は、lockfsの仕様上、ファイルシステム自体のデータ整合性も保障されません。
したがって、ファイルシステムのアンマウントを行わない場合のデータ整合性については、運用で考慮・対処する必要があります。
後処理スクリプトには複写元ボリューム(RepSrc.Post)と複写先ボリューム(RepDst.Post)を用意し、以下のディレクトリ配下に格納されています。処理の必要性に応じてスクリプトをカスタマイズしてください。
非クラスタ運用の場合
/etc/opt/FJSVswsrp/shディレクトリ配下
クラスタ運用の場合
/etc/opt/FJSVswsrp/<論理ノード名>/shディレクトリ配下
RepSrc.post(複写元ボリューム後処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Postprocessing of Replication(Source) processing 8: # 9: # Argument: $1 Device name of Source disk 10: # 11: # Error number 12: # 2: Argument error 13: # 11: mount error 14: 15: # Argument check 16: case $# in 17: 1) 18: ;; 19: *) 20: exit 2 21: ;; 22: esac 23: 24: device=$1 25: 26: # Determination of postprocessing file name 27: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 28: then 29: # /dev/dsk/c?t?d?s? -> c?t?d?s? 30: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 31: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 32: then 33: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 34: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 35: dev="`echo $device | /usr/bin/cut -d/ -f5`" 36: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 37: then 38: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 39: then 40: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 41: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 42: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 43: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 44: device="`echo $device | /usr/bin/cut -d: -f1`" 45: else 46: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 47: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 48: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 49: fi 50: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 51: then 52: # /dev/vx/dsk/volume -> _vx_rootdg_volume 53: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 54: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 55: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 56: then 57: # /dev/vx/dmp/device -> _vx_pv_device 58: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 59: else 60: exit 0 61: fi 62: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre" 63: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype" 64: 65: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 66: 67: # Confirmation of postprocessing 68: if [ ! -r $post_file ] 69: then 70: exit 0 71: fi 72: post="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f1`" 73: mount_point="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f2`" 74: 75: # Confirmation of FStype 76: if [ ! -r $fstype_file ] 77: then 78: fs="" 79: else 80: fs="`/usr/bin/cat $fstype_file`" 81: fi 82: 83: # No processing 84: if [ "$post" = "none" ] 85: then 86: /usr/bin/rm -rf $post_file 2> /dev/null 87: /usr/bin/rm -rf $fstype_file 2> /dev/null 88: exit 0 89: fi 90: 91: # mount processing 92: if [ "$post" = "mount" ] 93: then 94: /usr/bin/df -l $device > /dev/null 2>&1 95: if [ $? != 0 ] 96: then 97: if [ ! -r $fstype_file ] 98: then 99: /usr/sbin/mount $device $mount_point 2> /dev/null 100: else 101: if [ "$fs" = "" ] 102: then 103: /usr/sbin/mount $device $mount_point 2> /dev/null 104: else 105: /usr/sbin/mount -F $fs $device $mount_point 2> /dev/null 106: fi 107: fi 108: if [ $? != 0 ] 109: then 110: retry_count=3 111: sleep_time=1 112: result_flag=1 113: 114: while [ $retry_count -gt 0 ] 115: do 116: if [ ! -r $fstype_file ] 117: then 118: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 119: else 120: if [ "$fs" = "" ] 121: then 122: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 123: else 124: /usr/sbin/mount -F $fs $device $mount_point > $err_log_path/$dev.mount 2>&1 125: fi 126: fi 127: if [ $? != 0 ] 128: then 129: retry_count=`expr $retry_count - 1` 130: /usr/bin/sleep $sleep_time 131: else 132: /usr/bin/rm -f $err_log_path/$dev.mount 133: result_flag=0 134: break 135: fi 136: done 137: 138: if [ $result_flag != 0 ] 139: then 140: exit 11 141: fi 142: fi 143: fi 144: /usr/bin/rm -rf $post_file 2> /dev/null 145: /usr/bin/rm -rf $fstype_file 2> /dev/null 146: exit 0 147: fi 148: 149: # lockfs processing 150: if [ "$post" = "lockfs" ] 151: then 152: /usr/sbin/lockfs -u $mount_point > /dev/null 2>&1 153: /usr/bin/rm -rf $post_file 2> /dev/null 154: /usr/bin/rm -rf $fstype_file 2> /dev/null 155: exit 0 156: fi 157: 158: exit 0 |
RepDst.post(複写先ボリューム後処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Postprocessing of Replication(Destination) processing 8: # 9: # Argument: $1 Device name of Destination disk 10: # 11: # Error number 12: # 2: Argument error 13: # 11: mount error 14: # 12: fsck error 15: 16: # Argument check 17: case $# in 18: 1) 19: ;; 20: *) 21: exit 2 22: ;; 23: esac 24: 25: device=$1 26: 27: # Determination of postprocessing file name 28: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 29: then 30: # /dev/dsk/c?t?d?s? -> c?t?d?s? 31: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 32: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 33: then 34: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 35: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 36: dev="`echo $device | /usr/bin/cut -d/ -f5`" 37: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 38: then 39: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 40: then 41: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 42: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 43: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 44: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 45: device="`echo $device | /usr/bin/cut -d: -f1`" 46: else 47: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 48: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 49: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 50: fi 51: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 52: then 53: # /dev/vx/dsk/volume -> _vx_rootdg_volume 54: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 55: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 56: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 57: then 58: # /dev/vx/dmp/device -> _vx_pv_device 59: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 60: else 61: exit 0 62: fi 63: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 64: 65: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 66: 67: # Confirmation of postprocessing 68: if [ ! -r $post_file ] 69: then 70: exit 0 71: fi 72: post="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f1`" 73: mount_point="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f2`" 74: 75: # Confirmation of FStype 76: fs="`/usr/sbin/fstyp $device 2> /dev/null`" 77: if [ $? != 0 ] 78: then 79: fs="" 80: fi 81: 82: # When source device cannot be unmounted, fsck for destination device is needed 83: # 84: #if [ "$device" = "/dev/dsk/c*t*d*s*" ] 85: #then 86: # fsck_dev="`echo $device | sed "s/\/dsk\//\/rdsk\//"`" 87: # 88: # if [ "$fs" = "" ] 89: # then 90: # fsck -m $fsck_dev > /dev/null 2>&1 91: # else 92: # if [ "$fs" = "sfxfs" ] 93: # then 94: # sfxadm $fsck_dev > /dev/null 2>&1 95: # fsck -y -F $fs -o p,log $fsck_dev > /dev/null 2>&1 96: # else 97: # fsck -m -F $fs $fsck_dev > /dev/null 2>&1 98: # fi 99: # fi 100: # if [ $? != 0 ] 101: # then 102: # if [ "$fs" = "" ] 103: # then 104: # result="`fsck -n $fsck_dev |grep \?`" 105: # else 106: # result="`fsck -n -F $fs $fsck_dev |grep \?`" 107: # fi 108: # if [ "$result" = "FILE SYSTEM STATE IN SUPERBLOCK IS WRONG; FIX? no" ] 109: # then 110: # if [ "$fs" = "" ] 111: # then 112: # fsck -y $fsck_dev > /dev/null 2>&1 113: # else 114: # fsck -y -F $fs $fsck_dev > /dev/null 2>&1 115: # fi 116: # if [ $? != 0 ] 117: # then 118: # if [ "$fs" = "" ] 119: # then 120: # fsck -y $fsck_dev > $err_log_path/$dev.fsck 2>&1 121: # else 122: # fsck -y -F $fs $fsck_dev > $err_log_path/$dev.fsck 2>&1 123: # fi 124: # if [ $? != 0 ] 125: # then 126: # exit 12 127: # else 128: # rm -f $err_log_path/$dev.fsck 129: # fi 130: # fi 131: # else 132: # echo "$result" > $err_log_path/$dev.fsck 133: # exit 12 134: # fi 135: # fi 136: #fi 137: 138: # No processing 139: if [ "$post" = "none" ] 140: then 141: /usr/bin/rm -rf $post_file 2> /dev/null 142: exit 0 143: fi 144: 145: # mount processing 146: if [ "$post" = "mount" ] 147: then 148: /usr/bin/df -l $device > /dev/null 2>&1 149: if [ $? != 0 ] 150: then 151: if [ "$fs" = "" ] 152: then 153: /usr/sbin/mount $device $mount_point 2> /dev/null 154: else 155: if [ "$fs" = "sfxfs" ] 156: then 157: dev="`echo $device | /usr/bin/sed "s/\/dsk\//\/rdsk\//"`" 158: /usr/sbin/sfxadm $dev > /dev/null 2>&1 159: fi 160: /usr/sbin/mount -F $fs $device $mount_point 2> /dev/null 161: fi 162: if [ $? != 0 ] 163: then 164: retry_count=3 165: sleep_time=1 166: result_flag=1 167: 168: while [ $retry_count -gt 0 ] 169: do 170: if [ "$fs" = "" ] 171: then 172: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 173: else 174: if [ "$fs" = "sfxfs" ] 175: then 176: dev="`echo $device | /usr/bin/sed "s/\/dsk\//\/rdsk\//"`" 177: /usr/sbin/sfxadm $dev > $err_log_path/$dev.sfxadm 2>&1 178: fi 179: /usr/sbin/mount -F $fs $device $mount_point > $err_log_path/$dev.sfxadm 2>&1 180: fi 181: if [ $? != 0 ] 182: then 183: retry_count=`expr $retry_count - 1` 184: /usr/bin/sleep $sleep_time 185: else 186: result_flag=0 187: break 188: fi 189: done 190: 191: if [ $result_flag != 0 ] 192: then 193: exit 11 194: fi 195: fi 196: fi 197: /usr/bin/rm -rf $post_file 2> /dev/null 198: exit 0 199: fi 200: 201: exit 0 |
VERITAS Cluster Serverでクラスタ運用を行う場合で、複写先,複写元ボリュームのマウントポイントがクラスタ業務に登録されている場合は前後処理スクリプトのカスタマイズが必要となります。
前後処理スクリプト内のアンマウント/マウント処理を、マウントポイントリソースのオフライン/オンライン処理に変更してください。
また、マウントポイントリソースのオフライン/オンラインを行ってから、実際にボリュームがアンマウント/マウントされるまでに時間差があります。そのため実際にアンマウント/マウントされるまで待ち合わせる処理(sleepやdfコマンドの結果を監視するなど)をオフライン/オンラインの成否を判定する個所の後に追加してください。
以下に前後処理スクリプトのカスタマイズ例を示します。
[例] 複写元ボリューム前処理スクリプト(RepSrc.pre)のアンマウント処理変更
[89,99行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] 複写元ボリューム前処理スクリプト(RepSrc.pre)のアンマウント待ち処理の追加
[118行目]
(追加) |
while /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
[例] 複写先ボリューム前処理スクリプト(RepDst.pre)のアンマウント処理変更
[74,84行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] 複写先ボリューム前処理スクリプト(RepDst.pre)のアンマウント待ち処理追加
[103行目]
(追加) |
while /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
[例] 複写元ボリューム後処理スクリプト(RepSrc.post)のマウント処理変更
[99,103,105,118,122,124行目]
(変更前) |
/usr/sbin/mount $device $mount_point又は /usr/sbin/mount -F $fs $device $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] 複写元ボリューム後処理スクリプト(RepSrc.post)のマウント待ち処理追加
[144行目]
(追加) |
until /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
[例] 複写先ボリューム後処理スクリプト(RepDst.post)のマウント処理変更
[153,160,172,179行目]
(変更前) |
/usr/sbin/mount $device $mount_point 又は /usr/sbin/mount -F $fs $device $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] 複写先ボリューム後処理スクリプト(RepDst.post)のマウント待ち処理追加
[197行目]
(追加) |
until /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
目次
索引
![]() ![]() |