ETERNUS SF AdvancedCopy Manager 運用手引書 13.1 -Solaris- |
目次
索引
![]() ![]() |
付録C レプリケーションの前後処理 | > C.2 レプリケーションの前後処理 |
前処理スクリプトには複写元ボリューム(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-2007 5: 6: # 7: # Preprocessing 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: 28: # Determination postprocessing file name 29: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 30: then 31: # /dev/dsk/c?t?d?s? -> c?t?d?s? 32: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 33: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 34: then 35: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 36: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 37: dev="`echo $device | /usr/bin/cut -d/ -f5`" 38: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 39: then 40: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 41: then 42: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 43: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 44: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 45: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 46: device="`echo $device | /usr/bin/cut -d: -f1`" 47: else 48: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 49: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 50: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 51: fi 52: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 53: then 54: # /dev/vx/dsk/volume -> _vx_rootdg_volume 55: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 56: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 57: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 58: then 59: # /dev/vx/dmp/device -> _vx_pv_device 60: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 61: else 62: exit 0 63: fi 64: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre" 65: fstype_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".sfstype" 66: 67: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 68: 69: if [ "$mount_point" != "" ] 70: # When device was mounted 71: # 72: then 73: 74: # When device cannot be unmounted 75: # 76: #if [ "$device" = "/dev/dsk/cXtXdXsX" -o "$device" = "/dev/dsk/cYtYdYsY" ] 77: #then 78: #/usr/sbin/lockfs -w $mount_point > /dev/null 2>&1 79: #sync 80: #sync 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: 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: retry_count=`expr $retry_count - 1` 103: /usr/bin/sleep $sleep_time 104: else 105: /usr/bin/rm -f $err_log_path/$dev.umount 106: result_flag=0 107: break 108: fi 109: done 110: 111: if [ $result_flag != 0 ] 112: then 113: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 114: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 115: exit 10 116: fi 117: fi 118: 119: echo "mount,$mount_point" > $post_file 120: 121: #fi 122: 123: # When device was not mounted 124: # 125: else 126: echo "none" > $post_file 127: fi 128: 129: exit 0 |
RepDst.pre(複写先ボリューム前処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Preprocessing 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: 28: # Determination postprocessing file name 29: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 30: then 31: # /dev/dsk/c?t?d?s? -> c?t?d?s? 32: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 33: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 34: then 35: # /dev/FJSVmphd/dsk/mplb?s? -> mplb?s? 36: # /dev/FJSVmphd/dsk/mphd?s? -> mphd?s? 37: dev="`echo $device | /usr/bin/cut -d/ -f5`" 38: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 39: then 40: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 41: then 42: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 43: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 44: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 45: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 46: device="`echo $device | /usr/bin/cut -d: -f1`" 47: else 48: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 49: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 50: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 51: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 52: fi 53: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 54: then 55: # /dev/vx/dsk/volume -> _vx_rootdg_volume 56: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 57: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 58: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 59: then 60: # /dev/vx/dmp/device -> _vx_pv_device 61: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 62: else 63: exit 0 64: fi 65: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 66: 67: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 68: 69: if [ "$mount_point" != "" ] 70: # When device was mounted 71: # 72: then 73: 74: /usr/sbin/umount $mount_point 2>/dev/null 75: 76: if [ $? != 0 ] 77: then 78: retry_count=3 79: sleep_time=1 80: result_flag=1 81: 82: while [ $retry_count -gt 0 ] 83: do 84: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 85: if [ $? != 0 ] 86: then 87: retry_count=`expr $retry_count - 1` 88: /usr/bin/sleep $sleep_time 89: else 90: /usr/bin/rm -f $err_log_path/$dev.umount 91: result_flag=0 92: break 93: fi 94: done 95: 96: if [ $result_flag != 0 ] 97: then 98: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 99: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 100: exit 10 101: fi 102: fi 103: 104: echo "mount,$mount_point" > $post_file 105: 106: # When device was not mounted 107: # 108: else 109: echo "none" > $post_file 110: fi 111: 112: exit 0 |
マウントされているがアンマウントしたくない複写元ボリュームに対しては、以下のカスタマイズ例を参考にしてスクリプトをカスタマイズしてください。
アンマウントしたくない複写元ボリュームについて
複写元ボリューム前処理スクリプト(RepSrc.pre)の76〜81、85、121行目のコメント(“#”)をエディタ等で消去し、76行目のif文で対象となる複写元ボリューム名を指定してください。
アンマウントしたくない複写元ボリュームに対する複写先ボリュームについて
複写先ボリューム後処理スクリプト(RepDst.post)の84〜136行目のコメント(“#”)をエディタ等で消去し、84行目のif文で対象となる複写先ボリューム名を指定してください。
この操作は、ファイルシステムが以下の場合のみ可能です。
ufs
SafeFILE(シングルパーティション構成)
カスタマイズしたスクリプトによる複写元ボリュームの前後処理の動作は、以下のようになります。
複写元ボリュームの状態 |
複写元前処理 |
複写元後処理 |
---|---|---|
マウントされている |
複写元ボリュームへの更新を抑止します |
複写元ボリュームへの更新抑止を解除します |
カスタマイズしたスクリプトによる複写先ボリュームの後処理の動作は、以下のようになります。
複写先後処理 |
---|
複写先ボリュームの整合性を確認します |
標準のスクリプトを使用した運用では、アドバンスト・コピー(EC/OPC)の前にファイルシステムをアンマウントすることにより、ファイルシステムのキャッシュの書き出しと、その後の更新が抑止されるため、ファイルシステム全体のデータの整合性が保証されます。
スクリプトをカスタマイズして、ファイルシステムのアンマウントを行わない場合は、lockfs -wを使用してファイルシステムのキャッシュのフラッシュと、その後の更新を抑止しますが、Write Open中のファイル(オンラインバックアップをサポートしているOracleのデータベーススペースは除きます)については、ファイル内容の保証はされません。
また、メタデータ更新中のプロセスがある場合は、lockfsの仕様上、ファイルシステム自体のデータ整合性も保障されません。
したがって、ファイルシステムのアンマウントを行わない場合のデータ整合性については、運用で考慮・対処する必要があります。
目次
索引
![]() ![]() |