前処理シェルスクリプトには、複写元ボリューム用(RepSrc.pre)と複写先ボリューム用(RepDst.pre)の2種類があり、それぞれのスクリプトは以下のディレクトリに格納されています。必要に応じて、カスタマイズしてください。
クラスタ運用でない場合
/etc/opt/FJSVswsrp/shディレクトリ
クラスタ運用の場合
/etc/opt/FJSVswsrp/logicalNodeName/shディレクトリ複写元ボリューム用の前処理シェルスクリプト(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複写先ボリューム用の前処理シェルスクリプト(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