Top
ETERNUS SF AdvancedCopy Manager V16.9.1 Operation Guide
FUJITSU Storage

C.2.2 Pre-processing When Replication Is Executed

The replication source volume script (RepSrc.pre) and the replication destination volume script (RepDst.pre) are prepared for a pre-processing script, and it is stored in the following directory. Customize these scripts according to the processing requirements.

Replication Source Volume Pre-processing Sample Script (RepSrc.pre)

  1: #!/bin/sh
  2:
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2021
  5:
  6: #
  7: #   Pre-processing 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: cyclemax=3
 28: unmount_cyclenumfile="unmount.cyclenum"
 29:
 30: # Determination postprocessing file name
 31: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ]
 32: then
 33:     # /dev/dsk/c?t?d?s? -> c?t?d?s?
 34:     dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`"
 35: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ]
 36: then
 37:     # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s?
 38:     # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s?
 39:     dev="`echo $device | /usr/bin/cut -d/ -f5`"
 40: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ]
 41: then
 42:     if [ "`echo $device | /usr/bin/grep ":"`" != ""   ]
 43:     then
 44:         # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d?
 45:         dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 46:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 47:         dev="`echo $dev | /usr/bin/sed "s/:/_/"`"
 48:         device="`echo $device | /usr/bin/cut -d: -f1`"
 49:     else
 50:         # /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 51:         dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 52:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 53:     fi
 54: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ]
 55: then
 56:     # /dev/vx/dsk/volume -> _vx_rootdg_volume
 57:     # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume
 58:     dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`"
 59: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ]
 60: then
 61:     # /dev/vx/dmp/device -> _vx_pv_device
 62:     dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`"
 63: else
 64:     exit 0
 65: fi
 66: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre"
 67: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype"
 68:
 69: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
 70:
 71: if [ "$mount_point" != "" ]
 72: # When device was mounted
 73: #
 74: then
 75:
 76: # When device cannot be unmounted
 77: #
 78: #    if [ "$device" = "/dev/dsk/cXtXdXsX" -o "$device" = "/dev/dsk/cYtYdYsY" ]
 79: #    then
 80: #        /usr/sbin/lockfs -w $mount_point > /dev/null 2>&1
 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:                 retry_def=$retry_count
 95:                 sleep_time=1
 96:                 result_flag=1
 97:
 98:                 while [ $retry_count -gt 0 ]
 99:                 do
100:                     /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1
101:                     if [ $? != 0 ]
102:                     then
103:                         if [ $retry_count -eq $retry_def ]
104:                         then
105:                             if [ -f $err_log_path/$unmount_cyclenumfile ]
106:                             then
107:                                 cyclenum=`/usr/bin/cut -c 1 $err_log_path/$unmount_cyclenumfile`
108:                                 cyclenum=`expr $cyclenum + 1 2>/dev/null`
109:                                 if [ $? != 0 ]; then
110:                                     cyclenum='1'
111:                                 fi
112:                                 if [ $cyclenum -gt $cyclemax ]; then
113:                                     cyclenum='1'
114:                                 fi
115:                             else
116:                                 cyclenum='1'
117:                             fi
118:                             echo $cyclenum > $err_log_path/$unmount_cyclenumfile
119:                             : > $err_log_path/"$dev"_$cyclenum.umount
120:                             : > $err_log_path/"$dev"_$cyclenum.fuser
121:                             : > $err_log_path/"$dev"_$cyclenum.ps
122:                         fi
123:
124:                         echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.umount
125:                         echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.fuser
126:                         echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.ps
127:                         /usr/bin/cat $err_log_path/$dev.umount >> $err_log_path/"$dev"_$cyclenum.umount 2>&1
128:                         /usr/sbin/fuser -cu $mount_point >> $err_log_path/"$dev"_$cyclenum.fuser 2>&1
129:                         /usr/bin/ps -ef >> $err_log_path/"$dev"_$cyclenum.ps 2>&1
130:                         echo "" >> $err_log_path/"$dev"_$cyclenum.umount
131:                         echo "" >> $err_log_path/"$dev"_$cyclenum.fuser
132:                         echo "" >> $err_log_path/"$dev"_$cyclenum.ps
133:
134:                         retry_count=`expr $retry_count - 1`
135:                         /usr/bin/sleep $sleep_time
136:                     else
137:                         /usr/bin/rm -f $err_log_path/$dev.umount
138:                         result_flag=0
139:                         break
140:                     fi
141:                 done
142:
143:                 if [ $result_flag != 0 ]
144:                 then
145:                     exit 10
146:                 fi
147:         fi
148:
149:         echo "mount,$mount_point" > $post_file
150:
151: #    fi
152:
153: # When device was not mounted
154: #
155: else
156:     echo "none" > $post_file
157: fi
158:
159: exit 0

Replication Destination Volume Pre-processing Sample Script (RepDst.pre)

  1: #!/bin/sh
  2:
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2021
  5:
  6: #
  7: #   Pre-processing 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: cyclemax=3
 28: unmount_cyclenumfile="unmount.cyclenum"
 29:
 30: # Determination postprocessing file name
 31: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ]
 32: then
 33:     # /dev/dsk/c?t?d?s? -> c?t?d?s?
 34:     dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`"
 35: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ]
 36: then
 37:     # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s?
 38:     # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s?
 39:     dev="`echo $device | /usr/bin/cut -d/ -f5`"
 40: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ]
 41: then
 42:     if [ "`echo $device | /usr/bin/grep ":"`" != ""   ]
 43:     then
 44:         # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d?
 45:         dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 46:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 47:         dev="`echo $dev | /usr/bin/sed "s/:/_/"`"
 48:         device="`echo $device | /usr/bin/cut -d: -f1`"
 49:     else
 50:         # /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 51:         dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 52:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 53:         post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre"
 54:     fi
 55: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ]
 56: then
 57:     # /dev/vx/dsk/volume -> _vx_rootdg_volume
 58:     # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume
 59:     dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`"
 60: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ]
 61: then
 62:     # /dev/vx/dmp/device -> _vx_pv_device
 63:     dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`"
 64: else
 65:     exit 0
 66: fi
 67: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre"
 68:
 69: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
 70:
 71: if [ "$mount_point" != "" ]
 72: # When device was mounted
 73: #
 74: then
 75:
 76:     /usr/sbin/umount $mount_point 2>/dev/null
 77:
 78:     if [ $? != 0 ]
 79:     then
 80:             retry_count=3
 81:             retry_def=$retry_count
 82:             sleep_time=1
 83:             result_flag=1
 84:
 85:             while [ $retry_count -gt 0 ]
 86:             do
 87:                 /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1
 88:                 if [ $? != 0 ]
 89:                 then
 90:                     if [ $retry_count -eq $retry_def ]
 91:                     then
 92:                         if [ -f $err_log_path/$unmount_cyclenumfile ]
 93:                         then
 94:                             cyclenum=`/usr/bin/cut -c 1 $err_log_path/$unmount_cyclenumfile`
 95:                             cyclenum=`expr $cyclenum + 1 2>/dev/null`
 96:                             if [ $? != 0 ]; then
 97:                                 cyclenum='1'
 98:                             fi
 99:                             if [ $cyclenum -gt $cyclemax ]; then
100:                                 cyclenum='1'
101:                             fi
102:                         else
103:                             cyclenum='1'
104:                         fi
105:                         echo $cyclenum > $err_log_path/$unmount_cyclenumfile
106:                         : > $err_log_path/"$dev"_$cyclenum.umount
107:                         : > $err_log_path/"$dev"_$cyclenum.fuser
108:                         : > $err_log_path/"$dev"_$cyclenum.ps
109:                     fi
110:
111:                     echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.umount
112:                     echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.fuser
113:                     echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.ps
114:                     /usr/bin/cat $err_log_path/$dev.umount >> $err_log_path/"$dev"_$cyclenum.umount 2>&1
115:                     /usr/sbin/fuser -cu $mount_point >> $err_log_path/"$dev"_$cyclenum.fuser 2>&1
116:                     /usr/bin/ps -ef >> $err_log_path/"$dev"_$cyclenum.ps 2>&1
117:                     echo "" >> $err_log_path/"$dev"_$cyclenum.umount
118:                     echo "" >> $err_log_path/"$dev"_$cyclenum.fuser
119:                     echo "" >> $err_log_path/"$dev"_$cyclenum.ps
120:
121:                     retry_count=`expr $retry_count - 1`
122:                     /usr/bin/sleep $sleep_time
123:                 else
124:                     /usr/bin/rm -f $err_log_path/$dev.umount
125:                     result_flag=0
126:                     break
127:                 fi
128:             done
129:
130:             if [ $result_flag != 0 ]
131:             then
132:                 exit 10
133:             fi
134:     fi
135:
136:     echo "mount,$mount_point" > $post_file
137:
138: # When device was not mounted
139: #
140: else
141:     echo "none" > $post_file
142: fi
143:
144: exit 0