前処理のシェルスクリプトには複写元ボリューム(RepSrc.Pre)と複写先ボリューム(RepDst.Pre)を用意し、以下のディレクトリ配下に格納されています。処理の必要性に応じてシェルスクリプトをカスタマイズしてください。
非クラスタ運用の場合
/etc/opt/FJSVswsrp/shディレクトリ配下 |
クラスタ運用の場合
/etc/opt/FJSVswsrp/<論理ノード名>/shディレクトリ配下 |
RepSrc.pre(複写元ボリューム前処理のシェルスクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2009 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: # 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/FJSV"`" != "" ] 35: then 36: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 37: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 38: dev="`echo $device | /bin/cut -d/ -f5`" 39: elif [ "`echo $device | /bin/grep "/dev/sfdsk/"`" != "" ] 40: then 41: if [ "`echo $device | /bin/grep ":"`" != "" ] 42: then 43: devnam="`echo $device | /bin/cut -d: -f2-`" 44: # /dev/sfdsk/class/dsk/volume:sd? -> class_volume_sd? 45: dev="`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`" 46: dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`" 47: dev="`echo $dev | /bin/sed "s/:/_/"`" 48: device="`echo $device | /bin/cut -d: -f1`" 49: if [ "`echo $devnam | /bin/grep "/dev/disk/by-id/"`" != "" ] 50: then 51: # /dev/sfdsk/class/dsk/volume:/dev/disk/by-id/<device> -> class_volume__by_id_<device> 52: dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-id\//_by-id_/"`" 53: elif [ "`echo $devnam | /bin/grep "/dev/disk/by-path/"`" != "" ] 54: then 55: # /dev/sfdsk/class/dsk/volume:/dev/disk/by-path/<device> -> class_volume__by_path_<device> 56: dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-path\//_by-path_/"`" 57: fi 58: else 59: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 60: dev="_gds_`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`" 61: dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`" 62: fi 63: elif [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" ] 64: then 65: # "/dev/disk/by-id/<device>" -> "_by-id_<device>" 66: dev="_by-id_`echo $device | /bin/sed "s/\/dev\/disk\/by-id\///"`" 67: elif [ "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ] 68: then 69: # "/dev/disk/by-path/<device>" -> "_by-path_<device>" 70: dev="_by-path_`echo $device | /bin/sed "s/\/dev\/disk\/by-path\///"`" 71: else 72: exit 0 73: fi 74: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre" 75: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype" 76: 77: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 78: 79: if [ "$mount_point" != "" ] 80: # When device was mounted 81: # 82: then 83: 84: if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 2|/bin/grep "^$mount_point\$"|/usr/bin/wc -w` != 1 ]; then 85: # stack mount (multi device on $mount_point) 86: /bin/mount > $err_log_path/$dev.umount 2>&1 87: exit 13 88: fi 89: if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$device\$"|/usr/bin/wc -w` != 1 ]; then 90: # bind mount (device has multi mount point) 91: /bin/mount > $err_log_path/$dev.umount 2>&1 92: exit 13 93: fi 94: 95: /bin/awk "\$2==\"$mount_point\" {print \$3}" /proc/mounts > $fstype_file 96: 97: /bin/umount $mount_point 2>/dev/null 98: 99: if [ $? != 0 ] 100: then 101: retry_count=3 102: sleep_time=1 103: result_flag=1 104: 105: while [ $retry_count -gt 0 ] 106: do 107: /bin/umount $mount_point > $err_log_path/$dev.umount 2>&1 108: if [ $? != 0 ] 109: then 110: retry_count=`expr $retry_count - 1` 111: /bin/sleep $sleep_time 112: else 113: /bin/rm -f $err_log_path/$dev.umount 114: result_flag=0 115: break 116: fi 117: done 118: 119: if [ $result_flag != 0 ] 120: then 121: /sbin/fuser -vum $mount_point> $err_log_path/$dev.fuser 2>&1 122: /bin/ps -ef > $err_log_path/$dev.ps 2>&1 123: exit 10 124: fi 125: fi 126: 127: echo "mount,$mount_point" > $post_file 128: 129: # When device was not mounted 130: # 131: else 132: echo "none" > $post_file 133: fi 134: 135: exit 0 |
RepDst.pre(複写先ボリューム前処理のシェルスクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2009 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 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/FJSV"`" != "" ] 35: then 36: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 37: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 38: dev="`echo $device | /bin/cut -d/ -f5`" 39: elif [ "`echo $device | /bin/grep "/dev/sfdsk/"`" != "" ] 40: then 41: if [ "`echo $device | /bin/grep ":"`" != "" ] 42: then 43: devnam="`echo $device | /bin/cut -d: -f2-`" 44: # /dev/sfdsk/class/dsk/volume:sd? -> class_volume_sd? 45: dev="`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`" 46: dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`" 47: dev="`echo $dev | /bin/sed "s/:/_/"`" 48: device="`echo $device | /bin/cut -d: -f1`" 49: if [ "`echo $devnam | /bin/grep "/dev/disk/by-id/"`" != "" ] 50: then 51: # /dev/sfdsk/class/dsk/volume:/dev/disk/by-id/<device> -> class_volume__by_id_<device> 52: dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-id\//_by-id_/"`" 53: elif [ "`echo $devnam | /bin/grep "/dev/disk/by-path/"`" != "" ] 54: then 55: # /dev/sfdsk/class/dsk/volume:/dev/disk/by-path/<device> -> class_volume__by_path_<device> 56: dev="`echo $dev | /bin/sed "s/\/dev\/disk\/by-path\//_by-path_/"`" 57: fi 58: else 59: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 60: dev="_gds_`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`" 61: dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`" 62: fi 63: elif [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" ] 64: then 65: # "/dev/disk/by-id/<device>" -> "_by-id_<device>" 66: dev="_by-id_`echo $device | /bin/sed "s/\/dev\/disk\/by-id\///"`" 67: elif [ "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ] 68: then 69: # "/dev/disk/by-path/<device>" -> "_by-path_<device>" 70: dev="_by-path_`echo $device | /bin/sed "s/\/dev\/disk\/by-path\///"`" 71: else 72: exit 0 73: fi 74: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 75: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dfstype" 76: 77: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 78: 79: if [ "$mount_point" != "" ] 80: # When device was mounted 81: # 82: then 83: 84: if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 2|/bin/grep "^$mount_point\$"|/usr/bin/wc -w` != 1 ]; then 85: # stack mount (multi device on $mount_point) 86: /bin/mount > $err_log_path/$dev.umount 2>&1 87: exit 13 88: fi 89: if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$device\$"|/usr/bin/wc -w` != 1 ]; then 90: # bind mount (device has multi mount point) 91: /bin/mount > $err_log_path/$dev.umount 2>&1 92: exit 13 93: fi 94: 95: /bin/awk "\$2==\"$mount_point\" {print \$3}" /proc/mounts > $fstype_file 96: 97: /bin/umount $mount_point 2>/dev/null 98: 99: if [ $? != 0 ] 100: then 101: retry_count=3 102: sleep_time=1 103: result_flag=1 104: 105: while [ $retry_count -gt 0 ] 106: do 107: /bin/umount $mount_point > $err_log_path/$dev.umount 2>&1 108: if [ $? != 0 ] 109: then 110: retry_count=`expr $retry_count - 1` 111: /bin/sleep $sleep_time 112: else 113: /bin/rm -f $err_log_path/$dev.umount 114: result_flag=0 115: break 116: fi 117: done 118: 119: if [ $result_flag != 0 ] 120: then 121: /sbin/fuser -vum $mount_point> $err_log_path/$dev.fuser 2>&1 122: /bin/ps -ef > $err_log_path/$dev.ps 2>&1 123: exit 10 124: fi 125: fi 126: 127: echo "mount,$mount_point" > $post_file 128: 129: # When device was not mounted 130: # 131: else 132: echo "none" > $post_file 133: fi 134: 135: exit 0 |