ETERNUS SF AdvancedCopy Manager 運用手引書 13.1 -Solaris- |
目次
索引
![]() ![]() |
付録C レプリケーションの前後処理 | > C.2 レプリケーションの前後処理 |
後処理スクリプトには複写元ボリューム(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-2007 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/cXtXdXsX" -o "$device" = "/dev/dsk/cYtYdYsY" ] 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 |
目次
索引
![]() ![]() |