Top
ETERNUS SFAdvancedCopy Manager 14.0 Operator's Guide forTape Server Option

A.4.3 Tape copy pre-processing in Linux

The names of the pre-processing shell scripts used for tape copying are:

Content of shell script

  1: #!/bin/sh
  2: 
  3: # AdvancedCopy Manager
  4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2005-2009
  5: 
  6: #
  7: #   Pre-processing of tape copy processing
  8: #
  9: #       Argument: $1 Device name of backup disk
 10: #                 $2 Reserve
 11: #
 12: #	Error number
 13: #		 2: Argument error
 14: #		10: umount error
 15: #		13: Illegal mount type (bind/stack mount)
 16: 
 17: 
 18: # Argument check
 19: case $# in
 20: 1)
 21: 	;;
 22: 2)
 23: 	;;
 24: *)
 25: 	exit 2
 26: 	;;
 27: esac
 28: 
 29: device="`echo $1`"
 30: 
 31: # Determination post-processing file name
 32: 
 33: if [ "$SWSTGNODE" != "" ]
 34: then
 35: swstg_node="/`echo $SWSTGNODE`"
 36: else
 37: swstg_node=""
 38: fi
 39: 
 40: err_log_path="/var/opt/FJSVswsts"$swstg_node"/log"
 41: 
 42: if [ "`echo $device | /bin/grep "/dev/sd"`" != "" ]
 43: then
 44: 	# /dev/sd? -> sd?
 45: 	dev="`echo $device | /bin/sed "s/\/dev\///"`"
 46: elif [ "`echo $device | /bin/grep "/dev/FJSV"`" != "" ]
 47: then
 48: 	# /dev/FJSVmphd/dsk/mplb?s? -> mplb?s?
 49: 	# /dev/FJSVmphd/dsk/mphd?s? -> mphd?s?
 50: 	dev="`echo $device | /bin/cut -d/ -f5`"
 51: elif [ "`echo $device | /bin/grep "/dev/sfdsk/"`" != "" ]
 52: then
 53: 	# /dev/sfdsk/class/dsk/volume -> _gds_class_volume
 54: 	dev="_gds_`echo $device | /bin/sed "s/\/dev\/sfdsk\///"`"
 55: 	dev="`echo $dev | /bin/sed "s/\/dsk\//_/"`"
 56: elif [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" ]
 57: then
 58: 	# "/dev/disk/by-id/<device>" -> "_by-id_<device>"
 59: 	dev="_by-id_`echo $device | /bin/sed "s/\/dev\/disk\/by-id\///"`"
 60: elif [ "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ]
 61: then
 62: 	# "/dev/disk/by-path/<device>" -> "_by-path_<device>"
 63: 	dev="_by-path_`echo $device | /bin/sed "s/\/dev\/disk\/by-path\///"`"
 64: else
 65: 	exit 0
 66: fi
 67: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre"
 68: 
 69: if [ "`echo $device | /bin/grep "/dev/disk/by-id/"`" != "" \
 70: 	-o "`echo $device | /bin/grep "/dev/disk/by-path/"`" != "" ]
 71: then
 72: 	cdevice="/dev/`/usr/bin/readlink $device | /bin/sed "s/..\/..\///"`"
 73: 	cur_mount_point=`/bin/mount | grep "$cdevice " | cut -f3 -d' '`
 74: else
 75: 	cur_mount_point=`/bin/mount | grep "$device " | cut -f3 -d' '`
 76: fi
 77: if [ "$cur_mount_point" != "" ]
 78: then
 79: 
 80: 	if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 2|/bin/grep "^$cur_mount_point\$"|/usr/bin/wc -w` != 1 ]; then
 81: 		# stack mount (multi device on $cur_mount_point)
 82: 		/bin/mount  > $err_log_path/$dev.umount 2>&1
 83: 		exit 13
 84: 	fi
 85: 	if [ `/bin/cat /proc/mounts |/bin/cut -d' ' -f 1|/bin/grep "^$device\$"|/usr/bin/wc -w` != 1 ]; then
 86: 		# bind mount (device has multi mount point)
 87: 		/bin/mount  > $err_log_path/$dev.umount 2>&1
 88: 		exit 13
 89: 	fi
 90: 
 91: 	/bin/umount $cur_mount_point 2>/dev/null
 92: 	if [ $? != 0 ]
 93: 	then
 94: 		retry_count=3
 95: 		sleep_time=1
 96: 		result_flag=1
 97: 
 98: 		while [ $retry_count -gt 0 ]
 99: 		do
100: 			/bin/umount $cur_mount_point > $err_log_path/$dev.umount 2>&1
101: 			if [ $? != 0 ]
102: 			then
103: 				retry_count=`expr $retry_count - 1`
104: 				/bin/sleep $sleep_time
105: 			else
106: 				/bin/rm -f $err_log_path/$dev.umount
107: 				result_flag=0
108: 				break
109: 			fi
110: 		done
111: 
112: 		if [ $result_flag != 0 ]
113: 		then
114: 			/sbin/fuser -vum $cur_mount_point> $err_log_path/$dev.fuser 2>&1 
115: 			/bin/ps -ef > $err_log_path/$dev.ps 2>&1 
116: 
117: 			exit 10
118: 		fi
119: 	fi
120: 	echo "mount" > $post_file
121: 
122: # When device was not mounted
123: #
124: else
125: 	echo "none" > $post_file
126: fi
127: 
128: exit 0