ページのトップに戻る
ETERNUS SFAdvancedCopy Manager 13.4 運用手引書

B.2.3 レプリケーション実行時の後処理

後処理のシェルスクリプトには複写元ボリューム(RepSrc.Post)と複写先ボリューム(RepDst.Post)を用意し、以下のディレクトリ配下に格納されています。処理の必要性に応じてシェルスクリプトをカスタマイズしてください。

RepSrc.post(複写元ボリューム後処理のシェルスクリプト)

  1: #!/bin/sh
  2: 
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2004-2007
  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/hdisk"`" != "" ]
 28: then
 29:     dev_type="lvm_pv"
 30:     # /dev/hdisk? -> hdisk?
 31:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $3 }'`"
 32: 
 33: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ]
 34: then
 35:     dev_type="vxvm_pv"
 36:     # /dev/vx/dmp/device -> device
 37:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $5 }'`"
 38: 
 39: elif [ "`echo $device | /usr/bin/grep "/dev/"`" != "" ]
 40: then
 41:     dev_type="lvm_vg"
 42:     # /dev/VG_Name -> VG_Name
 43:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $3 }'`"
 44: 
 45: else
 46:     # Other Volume
 47:     exit 0
 48: fi
 49: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre"
 50: 
 51: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
 52: 
 53: # Confirmation of postprocessing
 54: if [ ! -r $post_file ]
 55: then
 56:         exit 0
 57: fi
 58: 
 59: post="`/usr/bin/cat $post_file`"
 60: 
 61: # mount processing
 62: if [ "$post" = "mount" ]
 63: then
 64: 
 65: # When devices of volume group can be unmounted
 66: #Specify the name of volume group to mount
 67: 
 68:         if [ "$device" = "/dev/vgXX" ]
 69:         then
 70:                 mount_error=0
 71:                 # Mount all logical volumes of the volume group
 72:                 lvname="/dev/XX"
 73:                 lv_mount_point="/XX"
 74:                 mount_status=`/usr/sbin/mount | /usr/bin/nawk -v lv=${lvname} 'lv==$1{flag=1; exit;} END{if(flag==1) print "mounted"; else print "not_mounted";}'`
 75:                 if [ $mount_status = "not_mounted" ]
 76:                 then
 77:                         /usr/sbin/mount $lvname $lv_mount_point 2> /dev/null
 78:                         if [ $? != 0 ]
 79:                         then
 80:                                 retry_count=3
 81:                                 sleep_time=1
 82:                                 result_flag=1
 83: 
 84:                                 while [ $retry_count -gt 0 ]
 85:                                 do
 86:                                     /usr/sbin/mount $lvname $lv_mount_point > $err_log_path/$dev.mount 2>&1
 87:                                     if [ $? != 0 ]
 88:                                     then
 89:                                         retry_count=`expr $retry_count - 1`
 90:                                         /usr/bin/sleep $sleep_time
 91:                                     else
 92:                                         /usr/bin/rm -f $err_log_path/$dev.mount
 93:                                         result_flag=0
 94:                                         break
 95:                                     fi
 96:                                 done
 97: 
 98:                                 if [ $result_flag != 0 ]
 99:                                 then
100:                                     mount_error=1
101:                                 fi
102:                         fi
103:                 fi
104: 
105: #                lvname="/dev/XX"
106: #                lv_mount_point="/XX"
107: #                mount_status=`/usr/sbin/mount | /usr/bin/nawk -v lv=${lvname} 'lv==$1{flag=1; exit;} END{if(flag==1) print "mounted"; else print "not_mounted";}'`
108: #                if [ $mount_status = "not_mounted" ]
109: #                then
110: #                        /usr/sbin/mount $lvname $lv_mount_point 2>/dev/null
111: #                        if [ $? != 0 ]
112: #                        then
113: #                                retry_count=3
114: #                                sleep_time=1
115: #                                result_flag=1
116: #
117: #                                while [ $retry_count -gt 0 ]
118: #                                do
119: #                                    /usr/sbin/mount $lvname $lv_mount_point > $err_log_path/$dev.mount 2>&1
120: #                                    if [ $? != 0 ]
121: #                                    then
122: #                                        retry_count=`expr $retry_count - 1`
123: #                                        /usr/bin/sleep $sleep_time
124: #                                    else
125: #                                        rm -f $err_log_path/$dev.mount
126: #                                        result_flag=0
127: #                                        break
128: #                                    fi
129: #                                done
130: #
131: #                                if [ $result_flag != 0 ]
132: #                                then
133: #                                    mount_error=1
134: #                                fi
135: #                        fi
136: #                fi
137: 
138:                 if [ $mount_error != 0 ]
139:                 then
140:                         exit 11
141:                 fi
142:         fi
143: fi
144: 
145: /usr/bin/rm -rf $post_file 2> /dev/null
146: exit 0

RepDst.post(複写先ボリューム後処理のシェルスクリプト)

  1: #!/bin/sh
  2: 
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2004-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: #              53: chdev error
 15: #              54: exportvg error
 16: #              56: recreatevg error
 17: #              52: chfs error
 18: 
 19: # Reconstruct volume group function.
 20: ReconstructVG ()
 21: {
 22: 
 23:         # delete PV temporally.
 24:         /usr/sbin/chdev -l $pvname -a pv=clear > /dev/null 2>&1
 25:         if [ $? != 0 ]
 26:         then
 27:                 /usr/sbin/chdev -l $pvname -a pv=clear > $err_log_path/$dev.chdev 2>&1
 28:                 if [ $? != 0 ]
 29:                 then
 30:                     return 53
 31:                 else
 32:                     /usr/bin/rm -f $err_log_path/$dev.chdev
 33:                 fi
 34:         fi
 35: 
 36:         # export destination volume group
 37:         /usr/sbin/exportvg $dev > /dev/null 2>&1
 38:         if [ $? != 0 ]
 39:         then
 40:                 /usr/sbin/exportvg $dev > $err_log_path/$dev.exportvg 2>&1
 41:                 if [ $? != 0 ]
 42:                 then
 43:                     return 54
 44:                 else
 45:                     /usr/bin/rm -f $err_log_path/$dev.exportvg 
 46:                 fi
 47:         fi
 48: 
 49:         # recreate destination volume group
 50:         prefix="/fs"
 51:         /usr/sbin/recreatevg -l $conv_file -L $prefix -y $dev $pvname > /dev/null 2>&1
 52:         if [ $? != 0 ]
 53:         then
 54:                 /usr/sbin/recreatevg -l $conv_file -L $prefix -y $dev $pvname > $err_log_path/$dev.recreatevg 2>&1
 55:                 if [ $? != 0 ]
 56:                 then
 57:                     return 56
 58:                 else
 59:                     /usr/bin/rm -f $err_log_path/$dev.recreatevg
 60:                 fi
 61:         fi
 62:         
 63:         return 0
 64: }
 65: 
 66: # Mount Logical Volume function
 67: MountLV ()
 68: {
 69:         mount_status=`/usr/sbin/mount | /usr/bin/nawk -v lv=${lvname} 'lv==$1{flag=1; exit;} END{if(flag==1) print "mounted"; else print "not_mounted";}'`
 70:         if [ $mount_status = "not_mounted" ]
 71:         then
 72:                 /usr/sbin/mount $lvname $dst_mount_point 2> /dev/null
 73:                 if [ $? != 0 ]
 74:                 then
 75:                     retry_count=3
 76:                     sleep_time=1
 77:                     result_flag=1
 78: 
 79:                     while [ $retry_count -gt 0 ]
 80:                     do
 81:                         /usr/sbin/mount $lvname $dst_mount_point > $err_log_path/$dev.mount 2>&1
 82:                         if [ $? != 0 ]
 83:                         then
 84:                             retry_count=`expr $retry_count - 1`
 85:                             /usr/bin/sleep $sleep_time
 86:                         else
 87:                             /usr/bin/rm -f $err_log_path/$dev.mount
 88:                             result_flag=0
 89:                             break
 90:                         fi
 91:                     done
 92: 
 93:                     if [ $result_flag != 0 ]
 94:                     then
 95:                         exit 11
 96:                     fi
 97:                 fi
 98:         fi
 99: }
100: 
101: # Change mount point function
102: ChangeMountPoint ()
103: {
104:         /usr/sbin/chfs -m $dst_mount_point $prefix$src_mount_point > /dev/null 2>&1
105:         if [ $? != 0 ]
106:         then
107:                 /usr/sbin/chfs -m $dst_mount_point $prefix$dst_mount_point > /dev/null 2>&1
108:                 if [ $? != 0 ]
109:                 then
110:                     /usr/sbin/chfs -m $dst_mount_point $prefix$dst_mount_point > $err_log_path/$dev.chfs 2>&1
111:                     if [ $? != 0 ]
112:                     then
113:                         exit 52
114:                     else
115:                         /usr/bin/rm -f $err_log_path/$dev.chfs
116:                     fi
117:                 fi
118:         fi
119: }
120: 
121: ###############################
122: #
123: # RepDst.post Main process.
124: #
125: ###############################
126: 
127: # Argument check
128: case $# in
129: 1)
130:         ;;
131: *)
132:         exit 2
133:         ;;
134: esac
135: 
136: device=$1
137: 
138: # Determination of postprocessing file name
139: if [ "`echo $device | /usr/bin/grep "/dev/hdisk"`" != "" ]
140: then
141:     dev_type="lvm_pv"
142:     # /dev/hdisk? -> hdisk?
143:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $3 }'`"
144: 
145: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ]
146: then
147:     dev_type="vxvm_pv"
148:     # /dev/vx/dmp/device -> device
149:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $5 }'`"
150: 
151: elif [ "`echo $device | /usr/bin/grep "/dev/"`" != "" ]
152: then
153:     dev_type="lvm_vg"
154:     # /dev/VG_Name -> VG_Name
155:     dev="`echo $device | /usr/bin/awk -F¥/ '{ print $3 }'`"
156: 
157: else
158:     # Other Volume
159:     exit 0
160: fi
161: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre"
162: conv_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".tmp"
163: 
164: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log"
165: 
166: # Confirmation of postprocessing
167: if [ ! -r $post_file ]
168: then
169:         exit 0
170: fi
171: # When the Destination disk is a volume group #############################
172: if [ "$dev_type" = "lvm_vg" ]
173: then
174: 
175:         post="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f1`"
176:         vg_status="`/usr/bin/cat $post_file | /usr/bin/cut -d',' -f2`"
177: 
178:         if [ "$vg_status" = "varyon" ]
179:         then
180:                 if [ "$device" = "/dev/vgXX" ]
181:                 then
182:                         pvname="hdiskXX"
183: 
184:                         # decide conversion of LV name
185:                         /usr/bin/rm -rf $conv_file 2> /dev/null
186:                         echo "SrclvXXXX:DstlvXXXXX" >> $conv_file
187:                         echo "DstlvXXXX:DstlvXXXXX" >> $conv_file
188: #                        echo "SrclvXXXX:DstlvXXXXX" >> $conv_file
189: #                        echo "DstlvXXXX:DstlvXXXXX" >> $conv_file
190: 
191:                         # Reconstruct Volume Group
192:                         ReconstructVG
193:                         result=$?
194:                         if [ $result != 0 ]
195:                         then
196:                                 exit $result
197:                         fi
198: 
199:                         # delete tmpfile
200:                         /usr/bin/rm -rf $conv_file 2> /dev/null
201:                 fi
202:         fi
203: 
204:         if [ "$device" = "/dev/vgXX" ]
205:         then
206: 
207:                 # decide new mount point
208:                 lvname="/dev/XX"
209:                 src_mount_point="/XX"
210:                 dst_mount_point="/XX"
211: 
212:                 if [ "$vg_status" = "varyon" ]
213:                 then
214:                         # Change mount point
215:                         ChangeMountPoint
216:                 fi
217: 
218:                 if [ "$post" = "mount" ]
219:                 then
220:                         # Mount all logical volumes of the volume group
221:                         MountLV
222:                 fi
223: 
224: #                lvname="/dev/XX"
225: #                src_mount_point="/XX"
226: #                dst_mount_point="/XX"
227: #        
228: #                if [ "$vg_status" = "varyon" ]
229: #                then
230: #                        # Change mount point
231: #                        ChangeMountPoint
232: #                fi
233: #        
234: #                if [ "$post" = "mount" ]
235: #                then
236: #                        # Mount all logical volumes of the volume group
237: #                        MountLV
238: #                fi
239: 
240:         fi
241: fi
242: 
243: /usr/bin/rm -rf $post_file 2> /dev/null
244: exit 0
245: