Top
ETERNUS SF AdvancedCopy Manager V15.0 Operation Guide

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. Please customize these scripts according to the processing requirements.

In the case of non-cluster operation
/etc/opt/FJSVswsrp/sh
In the case of cluster operation
/etc/opt/FJSVswsrp/<logical node name>/sh

C.2.2.1 Replication source volume pre-processing sample script (RepSrc.pre)

  1: #!/bin/sh
  2: 
  3: # AdvancedCopy Manager
  4: # Copyright FUJITSU LIMITED, 2002-2012
  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: #       13: Illegal mount type (stack/bind mount)
 16: 
 17: # Argument check
 18: case $# in
 19: 2)
 20:     ;;
 21: *)
 22:     exit 2
 23:     ;;
 24: esac
 25: 
 26: device=$1
 27: mount_point=$2
 28: 
 29: # Determination postprocessing file name
 30: if [ "`echo $device | /bin/grep "/dev/sd"`" != "" ]
 31: then
 32:     # /dev/sd? -> sd?
 33:     dev="`echo $device | /bin/sed "s/\/dev\///"`"
 34: elif [ "`echo $device | /bin/grep "/dev/vd"`" != "" ]
 35: then
 36:     # /dev/vd? -> vd?
 37:     dev="`echo $device | /bin/sed "s/\/dev\///"`"
 38: elif [ "`echo $device | /bin/grep "/dev/FJSV"`" != "" ]
 39: then
 40:     # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s?
 41:     # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s?
 42:     dev="`echo $device | /bin/cut -d/ -f5`"
 43: elif [ "`echo $device | /bin/grep "/dev/sfdsk/"`" != "" ]
 44: then
 45:     if [ "`echo $device | /bin/grep ":"`" != ""   ]
 46:     then
 47:         devnam="`echo $device | /bin/cut -d: -f2-`"
 48:         # /dev/sfdsk/class/dsk/volume:sd? -> class_volume_sd?
 49:         dev="`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`"
 50:         dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`"
 51:         dev="`echo $dev | /bin/sed "s/:/_/"`"
 52:         device="`echo $device | /bin/cut -d: -f1`"
 53:         if [ "`echo $devnam | /bin/grep "/dev/disk/by-id/"`" != "" ]
 54:         then
 55:             # /dev/sfdsk/class/dsk/volume:/dev/disk/by-id/<device> -> class_volume__by_id_<device>
 56:             dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-id\//_by-id_/"`"
 57:         elif [ "`echo $devnam | /bin/grep "/dev/disk/by-path/"`" != "" ]
 58:         then
 59:             # /dev/sfdsk/class/dsk/volume:/dev/disk/by-path/<device> -> class_volume__by_path_<device>
 60:             dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-path\//_by-path_/"`"
 61:         fi
 62:     else
 63:         # /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 64:         dev="_gds_`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`"
 65:         dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`"
 66:     fi
 67: elif [ "`echo $device | /bin/grep "/dev/vx/dmp/"`" != "" ]
 68: then
 69:    # /dev/vx/dmp/device -> _vx_pv_device
 70:    dev="_vx_pv_`echo $device | /bin/sed "s/\/dev\/vx\/dmp\///"`"
 71: elif [ "`echo $device | /bin/grep "/dev/mapper/"`" != "" ]
 72: then
 73:    # "/dev/mapper/<device>" -> "_mapper_<device>"
 74:    dev="_mapper_`echo $device | /bin/sed "s/\/dev\/mapper\///"`"
 75: elif [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" ]
 76: then
 77:     # "/dev/disk/by-id/<device>" -> "_by-id_<device>"
 78:     dev="_by-id_`echo $device | /bin/sed "s/\/dev\/disk\/by-id\///"`"
 79: elif [ "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ]
 80: then
 81:     # "/dev/disk/by-path/<device>" -> "_by-path_<device>"
 82:     dev="_by-path_`echo $device | /bin/sed "s/\/dev\/disk\/by-path\///"`"
 83: else
 84:     exit 0
 85: fi
 86: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre"
 87: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype"
 88: 
 89: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
 90: 
 91: if [ "$mount_point" != "" ]
 92: # When device was mounted
 93: #
 94: then
 95: 
 96:         if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 2|/bin/grep "^$mount_point\$"|/usr/bin/wc -w` != 1 ]; then
 97:                 # stack mount (multi device on $mount_point)
 98:                 /bin/mount  > $err_log_path/$dev.umount 2>&1
 99:                 exit 13
100:         fi
101:         if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$device\$"|/usr/bin/wc -w` != 1 ]; then
102:                 cdevice="/dev/`/usr/bin/readlink $device | /bin/sed "s/..\/..\///"`"
103:                 if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$cdevice\$"|/usr/bin/wc -w` != 1 ]; then
104:                         # bind mount (device has multi mount point)
105:                         /bin/mount  > $err_log_path/$dev.umount 2>&1
106:                         exit 13
107:                 fi
108:         fi
109: 
110:     /bin/awk "\$2==\"$mount_point\" {print \$3}" /proc/mounts > $fstype_file
111: 
112:     /bin/umount $mount_point 2>/dev/null
113: 
114:     if [ $? != 0 ]
115:     then
116:             retry_count=3
117:             sleep_time=1
118:             result_flag=1
119: 
120:             while [ $retry_count -gt 0 ]
121:             do
122:                 /bin/umount $mount_point > $err_log_path/$dev.umount 2>&1
123:                 if [ $? != 0 ]
124:                 then
125:                     retry_count=`expr $retry_count - 1`
126:                     /bin/sleep $sleep_time
127:                 else
128:                     /bin/rm -f $err_log_path/$dev.umount
129:                     result_flag=0
130:                     break
131:                 fi
132:             done
133: 
134:             if [ $result_flag != 0 ]
135:             then
136:                 /sbin/fuser -vum $mount_point> $err_log_path/$dev.fuser 2>&1 
137:                 /bin/ps -ef > $err_log_path/$dev.ps 2>&1 
138:                 exit 10
139:             fi
140:     fi
141: 
142:     echo "mount,$mount_point" > $post_file
143: 
144: # When device was not mounted
145: #
146: else
147:     echo "none" > $post_file
148: fi
149: 
150: exit 0

C.2.2.2 Replication destination volume pre-processing sample script (RepDst.pre)

  1: #!/bin/sh
  2: 
  3: # AdvancedCopy Manager
  4: # Copyright FUJITSU LIMITED, 2002-2012
  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
 14: #       10: umount error
 15: #       13: Illegal mount type (bind/stack mount)
 16: 
 17: # Argument check
 18: case $# in
 19: 2)
 20:     ;;
 21: *)
 22:     exit 2
 23:     ;;
 24: esac
 25: 
 26: device=$1
 27: mount_point=$2
 28: 
 29: # Determination postprocessing file name
 30: if [ "`echo $device | /bin/grep "/dev/sd"`" != "" ]
 31: then
 32:     # /dev/sd? -> sd?
 33:     dev="`echo $device | /bin/sed "s/\/dev\///"`"
 34: elif [ "`echo $device | /bin/grep "/dev/vd"`" != "" ]
 35: then
 36:     # /dev/vd? -> vd?
 37:     dev="`echo $device | /bin/sed "s/\/dev\///"`"
 38: elif [ "`echo $device | /bin/grep "/dev/FJSV"`" != "" ]
 39: then
 40:     # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s?
 41:     # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s?
 42:     dev="`echo $device | /bin/cut -d/ -f5`"
 43: elif [ "`echo $device | /bin/grep "/dev/sfdsk/"`" != "" ]
 44: then
 45:     if [ "`echo $device | /bin/grep ":"`" != ""   ]
 46:     then
 47:         devnam="`echo $device | /bin/cut -d: -f2-`"
 48:        # /dev/sfdsk/class/dsk/volume:sd? -> class_volume_sd?
 49:         dev="`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`"
 50:         dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`"
 51:         dev="`echo $dev | /bin/sed "s/:/_/"`"
 52:         device="`echo $device | /bin/cut -d: -f1`"
 53:         if [ "`echo $devnam | /bin/grep "/dev/disk/by-id/"`" != "" ]
 54:         then
 55:             # /dev/sfdsk/class/dsk/volume:/dev/disk/by-id/<device> -> class_volume__by_id_<device>
 56:             dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-id\//_by-id_/"`"
 57:         elif [ "`echo $devnam | /bin/grep "/dev/disk/by-path/"`" != "" ]
 58:         then
 59:             # /dev/sfdsk/class/dsk/volume:/dev/disk/by-path/<device> -> class_volume__by_path_<device>
 60:             dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-path\//_by-path_/"`"
 61:         fi
 62:     else
 63:         # /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 64:         dev="_gds_`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`"
 65:         dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`"
 66:     fi
 67: elif [ "`echo $device | /bin/grep "/dev/vx/dmp/"`" != "" ]
 68: then
 69:    # /dev/vx/dmp/device -> _vx_pv_device
 70:    dev="_vx_pv_`echo $device | /bin/sed "s/\/dev\/vx\/dmp\///"`"
 71: elif [ "`echo $device | /bin/grep "/dev/mapper/"`" != "" ]
 72: then
 73:    # "/dev/mapper/<device>" -> "_mapper_<device>"
 74:    dev="_mapper_`echo $device | /bin/sed "s/\/dev\/mapper\///"`"
 75: elif [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" ]
 76: then
 77:     # "/dev/disk/by-id/<device>" -> "_by-id_<device>"
 78:     dev="_by-id_`echo $device | /bin/sed "s/\/dev\/disk\/by-id\///"`"
 79: elif [ "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ]
 80: then
 81:     # "/dev/disk/by-path/<device>" -> "_by-path_<device>"
 82:     dev="_by-path_`echo $device | /bin/sed "s/\/dev\/disk\/by-path\///"`"
 83: else
 84:     exit 0
 85: fi
 86: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre"
 87: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dfstype"
 88: 
 89: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
 90: 
 91: if [ "$mount_point" != "" ]
 92: # When device was mounted
 93: #
 94: then
 95: 
 96:         if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 2|/bin/grep "^$mount_point\$"|/usr/bin/wc -w` != 1 ]; then
 97:                 # stack mount (multi device on $mount_point)
 98:                 /bin/mount  > $err_log_path/$dev.umount 2>&1
 99:                 exit 13
100:         fi
101:         if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$device\$"|/usr/bin/wc -w` != 1 ]; then
102:                 cdevice="/dev/`/usr/bin/readlink $device | /bin/sed "s/..\/..\///"`"
103:                 if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$cdevice\$"|/usr/bin/wc -w` != 1 ]; then
104:                         # bind mount (device has multi mount point)
105:                         /bin/mount  > $err_log_path/$dev.umount 2>&1
106:                         exit 13
107:                 fi
108:         fi
109: 
110:     /bin/awk "\$2==\"$mount_point\" {print \$3}" /proc/mounts > $fstype_file
111: 
112:     /bin/umount $mount_point 2>/dev/null
113: 
114:     if [ $? != 0 ]
115:     then
116:             retry_count=3
117:             sleep_time=1
118:             result_flag=1
119: 
120:             while [ $retry_count -gt 0 ]
121:             do
122:                 /bin/umount $mount_point > $err_log_path/$dev.umount 2>&1
123:                 if [ $? != 0 ]
124:                 then
125:                     retry_count=`expr $retry_count - 1`
126:                     /bin/sleep $sleep_time
127:                 else
128:                     /bin/rm -f $err_log_path/$dev.umount
129:                     result_flag=0
130:                     break
131:                 fi
132:             done
133: 
134:             if [ $result_flag != 0 ]
135:             then
136:                 /sbin/fuser -vum $mount_point> $err_log_path/$dev.fuser 2>&1 
137:                 /bin/ps -ef > $err_log_path/$dev.ps 2>&1 
138:                 exit 10
139:             fi
140:     fi
141: 
142:     echo "mount,$mount_point" > $post_file
143: 
144: # When device was not mounted
145: #
146: else
147:     echo "none" > $post_file
148: fi
149: 
150: exit 0