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

A.3.1 Pre-processing of Restoration

The name of a script file for pre-processing of a restoration is as follows.

Pre-processing Script for Restoration (OpcRestore.pre)

  1: #!/bin/sh
  2:
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2021
  5:
  6: #
  7: #   Pre-processing of restoration processing
  8: #
  9: #        Argument: $1 Device name of transaction disk
 10: #                  $2 Mount point of transaction disk
 11: #
 12: #   Error number
 13: #        2: Argument error
 14: #       10: umount error
 15:
 16:
 17: # Argument check
 18: case $# in
 19: 1)
 20:     ;;
 21: 2)
 22:     ;;
 23: *)
 24:     exit 2
 25:     ;;
 26: esac
 27:
 28: device="`echo $1`"
 29: mount_point="`echo $2`"
 30: cyclemax=3
 31: unmount_cyclenumfile="unmount.cyclenum"
 32:
 33: # Determination of postprocessing file name
 34:
 35: if [ "$SWSTGNODE" != "" ]
 36: then
 37: swstg_node="/`echo $SWSTGNODE`"
 38: else
 39: swstg_node=""
 40: fi
 41:
 42: err_log_path="/var/opt/FJSVswsts"$swstg_node"/log"
 43:
 44: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ]
 45: then
 46:     # /dev/dsk/c?t?d?s? -> c?t?d?s?
 47:     dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`"
 48: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ]
 49: then
 50:     # /dev/FJSVmphd/dsk/mplb?s? -> /dev/FJSVmphd/dsk/mplb?s?
 51:     # /dev/FJSVmphd/dsk/mphd?s? -> /dev/FJSVmphd/dsk/mphd?s?
 52:     dev="`echo $device | /usr/bin/cut -d/ -f5`"
 53: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ]
 54: then
 55:     if [ "`echo $device | /usr/bin/grep ":"`" != ""   ]
 56:     then
 57:         # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d?
 58:         dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 59:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 60:         dev="`echo $dev | /usr/bin/sed "s/:/_/"`"
 61:         device="`echo $device | /usr/bin/cut -d: -f1`"
 62:     else
 63:         # /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 64:         dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`"
 65:         dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`"
 66:     fi
 67: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ]
 68: then
 69:     # /dev/vx/dsk/volume -> _vx_rootdg_volume
 70:     # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume
 71:     dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`"
 72: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ]
 73: then
 74:     # /dev/vx/dmp/device -> _vx_pv_device
 75:     dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`"
 76: else
 77:     exit 0
 78: fi
 79: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre"
 80: fstype_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".fstype"
 81: bd_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".bd"
 82:
 83: if [ "$mount_point" != "" ]
 84: then
 85:
 86: # When device can be unmounted
 87: #
 88:     /usr/bin/df -ln $mount_point | /usr/bin/cut -f2 -d: | /usr/bin/cut -f2 -d' ' > $fstype_file
 89:     /usr/sbin/umount $mount_point 2> /dev/null
 90:     if [ $? != 0 ]
 91:     then
 92:         retry_count=3
 93:         retry_def=$retry_count
 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:                 if [ $retry_count -eq $retry_def ]
103:                 then
104:                     if [ -f $err_log_path/$unmount_cyclenumfile ]
105:                     then
106:                         cyclenum=`/usr/bin/cut -c 1 $err_log_path/$unmount_cyclenumfile`
107:                         cyclenum=`expr $cyclenum + 1 2>/dev/null`
108:                         if [ $? != 0 ]; then
109:                             cyclenum='1'
110:                         fi
111:                         if [ $cyclenum -gt $cyclemax ]; then
112:                             cyclenum='1'
113:                         fi
114:                     else
115:                         cyclenum='1'
116:                     fi
117:                     echo $cyclenum > $err_log_path/$unmount_cyclenumfile
118:                     : > $err_log_path/"$dev"_$cyclenum.umount
119:                     : > $err_log_path/"$dev"_$cyclenum.fuser
120:                     : > $err_log_path/"$dev"_$cyclenum.ps
121:                 fi
122:
123:                 echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.umount
124:                 echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.fuser
125:                 echo `date '+%Y-%m-%d %T'` >> $err_log_path/"$dev"_$cyclenum.ps
126:                 /usr/bin/cat $err_log_path/$dev.umount >> $err_log_path/"$dev"_$cyclenum.umount 2>&1
127:                 /usr/sbin/fuser -cu $mount_point >> $err_log_path/"$dev"_$cyclenum.fuser 2>&1
128:                 /usr/bin/ps -ef >> $err_log_path/"$dev"_$cyclenum.ps 2>&1
129:                 echo "" >> $err_log_path/"$dev"_$cyclenum.umount
130:                 echo "" >> $err_log_path/"$dev"_$cyclenum.fuser
131:                 echo "" >> $err_log_path/"$dev"_$cyclenum.ps
132:
133:               retry_count=`expr $retry_count - 1`
134:               /usr/bin/sleep $sleep_time
135:           else
136:               /usr/bin/rm -f $err_log_path/$dev.umount
137:               result_flag=0
138:               break
139:           fi
140:       done
141:
142:       if [ $result_flag != 0 ]
143:       then
144:           exit 10
145:       fi
146:   fi
147:   echo "mount" > $post_file
148:
149: # When device was not mounted
150: #
151: else
152:     echo "none" > $post_file
153: fi
154:
155: exit 0

Restore processing is not possible on a mounted transaction volume that cannot be unmounted. Specify a device at the restore destination.