ETERNUS SF AdvancedCopy Manager 運用手引書 13.0 -AIX- |
目次
索引
![]() ![]() |
本章では、AdvancedCopy Managerのレプリケーションの前後処理を行うシェルスクリプトについて説明します。
レプリケーションの前後処理のシェルスクリプトは、レプリケーション(複製)処理の前後で起動されます。
これらのシェルスクリプトには、AdvancedCopy Managerが、複製元ボリュームおよび複製先ボリュームに必要な処理を記述します。
この章では、前後処理の設定について説明します。
AdvancedCopy Managerでのレプリケーションの前後処理は、複製元/複製先ボリュームの双方に対して実施する必要がありますが、その目的は異なります。
複製元ボリュームに対する前後処理
複製元データを一時的に整合性の保証された状態で凍結することを目的としています。前処理で複製元データを一時的に凍結し、複製作成後、後処理で凍結状態を解除します。
複製先ボリュームに対する前後処理
レプリケーション(複製)処理中にアプリケーションが複製先ボリュームにアクセスさせないことを目的としています。前処理で複製先データをアクセス禁止状態とし、複製作成後、後処理でアクセス禁止状態を解除します。
前後処理で行う具体的な処理は、そのボリュームのデータ内容によって異なります。次章では、ファイルシステムとデータベースの前後処理についてそれぞれ説明します。
ファイルシステムの前後処理とは、ファイルシステムのアンマウント/マウント処理です。複製元ボリュームに対する前後処理は、複製元データを保証するためのものです。複製先ボリュームに対する前後処理は、同期処理実行中やスナップショットコピー時に他プロセスからのアクセスを不可能にするためのものです。ボリュームがマウントされていなく、かつ非活性の場合は、前後処理は実施されません。
ファイルシステムの前後処理の実施状況を以下に示します。この表は、前後処理が実行されるかどうかは、コマンド種別によって異なり、さらに、そのコマンドを実行したときのコピー状態によっても異なることを示しています。ただし,論理ボリューム(ボリュームグループ)の場合はカスタマイズしていない状態ではアンマウント/マウント処理動作しません。ボリュームグループの場合は,必ず前後処理スクリプトをカスタマイズしてください。
コマンド |
コピー状態 |
複製元/複製先 |
前処理 |
後処理 |
---|---|---|---|---|
複製開始コマンド |
未コピー状態または 複製確立状態 |
複製元 |
× |
× |
複製先 |
○--(1) |
× |
||
複製作成コマンド |
等価性維持状態 |
複製元 |
○ |
○ |
複製先 |
× |
○--(2) |
||
複製解除コマンド |
等価性維持状態 |
複製元 |
○ |
○ |
複製先 |
× |
○--(2) |
||
複製確立状態 |
複製元 |
× |
× |
|
複製先 |
× |
× |
||
コピー中 |
複製元 |
× |
× |
|
複製先 |
× |
× |
||
スナップショット複製作成コマンド |
未コピー状態 |
複製元 |
○ |
○ |
複製先 |
○ |
○ |
(1)で行った前処理に対する後処理は(2)で行われます。(2)の後処理では、(1)の前処理でアンマウントしたマウントポイントに再マウントを行います。
ファイルシステムの前後処理は、カスタマイズ可能なようにスクリプトになっています。レプリケーション管理コマンドを実施した際に、上の表にしたがって起動されます。また、サーバ間レプリケーションの場合、接続されていないボリュームの前後処理は、TCP/IPによるリモート実行でこれらのスクリプトが実行されます。
図 B.1 に前後処理の動作イメージを示します。
前後処理で標準の前後処理以外で必要な処理がある場合はそれぞれのスクリプトをカスタマイズしてください。
スクリプトをカスタマイズする場合、エラーコードは以下の規約に従ってください。
エラーコード |
用途 |
---|---|
0-99 |
使用不可(AdvancedCopy Managerが予約) |
100-255 |
使用可能 |
レプリケーション対象がファイルシステムが構築された論理ボリュームを含むボリュームグループの場合は、本マニュアルの『レプリケーション対象がボリュームグループの場合』を参照し、ファイルシステムが構築された全ての論理ボリュームに対してアンマウント/マウントが実施されるように前後処理スクリプトをカスタマイズする必要があります。
データベースの前後処理については、AdvancedCopy Managerでは機能を提供しませんので、AdvancedCopy Managerコマンド実行の前後で独自に実施する必要があります。
前処理スクリプトには複写元ボリューム(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, 2004-2006 5: 6: # 7: # Preprocessing of Replication(Source) processing 8: # 9: # Argument: $1 Device name of Source disk 10: # $2 Reserve 11: # 12: # Error number 13: # 2: Argument error(system error) 14: # 10: umount error 15: # 99: Script not customize 16: 17: # Argument check 18: case $# in 19: 2) 20: ;; 21: *) 22: exit 2 23: ;; 24: esac 25: 26: device=$1 27: 28: # Determination of postprocessing file name 29: if [ "`echo $device | /usr/bin/grep "/dev/hdisk"`" != "" ] 30: then 31: dev_type="lvm_pv" 32: # /dev/hdisk? -> hdisk? 33: dev="`echo $device | /usr/bin/awk -F\/ '{ print $3 }'`" 34: 35: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 36: then 37: dev_type="vxvm_pv" 38: # /dev/vx/dmp/device -> device 39: dev="`echo $device | /usr/bin/awk -F\/ '{ print $5 }'`" 40: 41: elif [ "`echo $device | /usr/bin/grep "/dev/"`" != "" ] 42: then 43: dev_type="lvm_vg" 44: # /dev/VG_Name -> VG_Name 45: dev="`echo $device | /usr/bin/awk -F\/ '{ print $3 }'`" 46: 47: else 48: # Other Volume 49: exit 0 50: fi 51: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".spre" 52: 53: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 54: 55: # When the Source disk is a volume group ################################### 56: if [ "$dev_type" = "lvm_vg" ] 57: then 58: 59: # Devices are volume group and script not customize 60: exit 99 61: 62: # When devices of volume group can be unmounted 63: # Specify the name of volume group to unmount 64: if [ "$device" = "/dev/vg**" ] 65: then 66: echo "mount" > $post_file 67: 68: # Unmount all logical volumes of the volume group 69: mount_point="/**" 70: /usr/sbin/umount $mount_point 2>/dev/null 71: if [ $? != 0 ] 72: then 73: retry_count=3 74: sleep_time=1 75: result_flag=1 76: 77: while [ $retry_count -gt 0 ] 78: do 79: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 80: if [ $? != 0 ] 81: then 82: retry_count=`expr $retry_count - 1` 83: /usr/bin/sleep $sleep_time 84: else 85: /usr/bin/rm -f $err_log_path/$dev.umount 86: result_flag=0 87: break 88: fi 89: done 90: 91: if [ $result_flag != 0 ] 92: then 93: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 94: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 95: exit 10 96: fi 97: fi 98: 99: # mount_point="/**" 100: # /usr/sbin/umount $mount_point 2>/dev/null 101: # if [ $? != 0 ] 102: # then 103: # retry_count=3 104: # sleep_time=1 105: # result_flag=1 106: # 107: # while [ $retry_count -gt 0 ] 108: # do 109: # /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 110: # if [ $? != 0 ] 111: # then 112: # retry_count=`expr $retry_count - 1` 113: # sleep $sleep_time 114: # else 115: # rm -f $err_log_path/$dev.umount 116: # result_flag=0 117: # break 118: # fi 119: # done 120: # 121: # if [ $result_flag != 0 ] 122: # then 123: # /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 124: # /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 125: # exit 10 126: # fi 127: # fi 128: fi 129: 130: # When the Source disk is a VxVM physical volume ############################# 131: elif [ "$dev_type" = "vxvm_pv" ] 132: then 133: # Nothing is done to VxVM physical volume. 134: echo "none" > $post_file 135: 136: # When the Source disk is a LVM physical volume ############################## 137: elif [ "$dev_type" = "lvm_pv" ] 138: then 139: # Nothing is done to LVM physical volume. 140: echo "none" > $post_file 141: fi 142: 143: exit 0 |
RepDst.pre(複写先ボリューム前処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2004-2006 5: 6: # 7: # Preprocessing of Replication(Destination) processing 8: # 9: # Argument: $1 Device name of Destination disk 10: # $2 Reserve 11: # 12: # Error number 13: # 2: Argument error 14: # 10: umount error 15: # 50: varyoffvg error 16: # 99: Script not customize 17: 18: # Argument check 19: case $# in 20: 2) 21: ;; 22: *) 23: exit 2 24: ;; 25: esac 26: 27: device=$1 28: 29: # Determination of postprocessing file name 30: if [ "`echo $device | /usr/bin/grep "/dev/hdisk"`" != "" ] 31: then 32: dev_type="lvm_pv" 33: # /dev/hdisk? -> hdisk? 34: dev="`echo $device | /usr/bin/awk -F\/ '{ print $3 }'`" 35: 36: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 37: then 38: dev_type="vxvm_pv" 39: # /dev/vx/dmp/device -> device 40: dev="`echo $device | /usr/bin/awk -F\/ '{ print $5 }'`" 41: 42: elif [ "`echo $device | /usr/bin/grep "/dev/"`" != "" ] 43: then 44: dev_type="lvm_vg" 45: # /dev/VG_Name -> VG_Name 46: dev="`echo $device | /usr/bin/awk -F\/ '{ print $3 }'`" 47: 48: else 49: # Other Volume 50: exit 0 51: fi 52: 53: post_file="/etc/opt/FJSVswsrp/"$SWSTGNODE"/data/DEFAULT/"$dev".dpre" 54: 55: /usr/bin/rm -rf $post_file 2> /dev/null 56: 57: err_log_path="/var/opt/FJSVswsrp/"$SWSTGNODE"/log" 58: 59: # When the Destination disk is a volume group ############################# 60: if [ "$dev_type" = "lvm_vg" ] 61: then 62: 63: # Devices are volume group and script not customize 64: exit 99 65: 66: # When devices of volume group can be unmounted 67: # Specify the name of volume group to unmount 68: if [ "$device" = "/dev/vg**" ] 69: then 70: printf "mount," > $post_file 71: 72: # Unmount all logical volumes of the volume group 73: mount_point="/**" 74: /usr/sbin/umount $mount_point 2>/dev/null 75: if [ $? != 0 ] 76: then 77: retry_count=3 78: sleep_time=1 79: result_flag=1 80: 81: while [ $retry_count -gt 0 ] 82: do 83: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 84: if [ $? != 0 ] 85: then 86: retry_count=`expr $retry_count - 1` 87: /usr/bin/sleep $sleep_time 88: else 89: /usr/bin/rm -f $err_log_path/$dev.umount 90: result_flag=0 91: break 92: fi 93: done 94: 95: if [ $result_flag != 0 ] 96: then 97: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 98: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 99: exit 10 100: fi 101: fi 102: 103: # mount_point="/**" 104: # /usr/sbin/umount $mount_point 2>/dev/null 105: # if [ $? != 0 ] 106: # then 107: # retry_count=3 108: # sleep_time=1 109: # result_flag=1 110: # 111: # while [ $retry_count -gt 0 ] 112: # do 113: # /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 114: # if [ $? != 0 ] 115: # then 116: # retry_count=`expr $retry_count - 1` 117: # sleep $sleep_time 118: # else 119: # rm -f $err_log_path/$dev.umount 120: # result_flag=0 121: # break 122: # fi 123: # done 124: # 125: # if [ $result_flag != 0 ] 126: # then 127: # /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 128: # /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 129: # exit 10 130: # fi 131: # fi 132: 133: fi 134: 135: # varyoff destination volume group 136: ACTIVE_VGS=`/usr/sbin/lsvg -o` 137: for i in $ACTIVE_VGS 138: do 139: if [ "$dev" = "$i" ] 140: then 141: /usr/sbin/varyoffvg $i 2> /dev/null 142: if [ $? != 0 ] 143: then 144: /usr/sbin/varyoffvg $i > $err_log_path/$dev.varyoffvg 2>&1 145: if [ $? != 0 ] 146: then 147: exit 50 148: fi 149: fi 150: printf "varyon" >> $post_file 151: break 152: fi 153: done 154: 155: # When the Destination disk is a VxVM physical volume ######################### 156: elif [ "$dev_type" = "vxvm_pv" ] 157: then 158: # Nothing is done to VxVM physical volume. 159: echo "none," > $post_file 160: 161: # When the Destination disk is a LVM physical volume ########################## 162: elif [ "$dev_type" = "lvm_pv" ] 163: then 164: # Nothing is done to LVM physical volume. 165: echo "none," > $post_file 166: 167: fi 168: 169: exit 0 |
後処理スクリプトには複写元ボリューム(RepSrc.Post)と複写先ボリューム(RepDst.Post)を用意し、以下のディレクトリ配下に格納されています。処理の必要性に応じてスクリプトをカスタマイズしてください。
非クラスタ運用の場合
/etc/opt/FJSVswsrp/shディレクトリ配下
クラスタ運用の場合
/etc/opt/FJSVswsrp/<論理ノード名>/shディレクトリ配下
RepSrc.post(複写元ボリューム後処理スクリプト)
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2004-2006 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/vg**" ] 69: then 70: mount_error=0 71: # Mount all logical volumes of the volume group 72: lvname="/dev/**" 73: lv_mount_point="/**" 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/**" 106: # lv_mount_point="/**" 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-2006 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/vg**" ] 181: then 182: pvname="hdisk**" 183: 184: # decide conversion of LV name 185: /usr/bin/rm -rf $conv_file 2> /dev/null 186: echo "Srclv****:Dstlv*****" >> $conv_file 187: echo "Dstlv****:Dstlv*****" >> $conv_file 188: # echo "Srclv****:Dstlv*****" >> $conv_file 189: # echo "Dstlv****:Dstlv*****" >> $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/vg**" ] 205: then 206: 207: # decide new mount point 208: lvname="/dev/**" 209: src_mount_point="/**" 210: dst_mount_point="/**" 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/**" 225: # src_mount_point="/**" 226: # dst_mount_point="/**" 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: |
ファイルシステムが構築された論理ボリュームを含むボリュームグループがレプリケーション対象の場合は、前後処理スクリプトを修正する必要があります。
複写元ボリューム前処理スクリプトの64〜128行目、および複写元ボリューム後処理スクリプトの68〜142行目について、ファイルシステムが構築された全ての論理ボリュームに対して、アンマウント/マウント処理が行われるように記述を適宜修正してください。("*"で示す箇所は実際の環境に合わせて変更してください。また、複写元ボリューム前処理スクリプトの99〜127行目および、複写元ボリューム後処理スクリプトの105〜136行目のコメントをはずし、これらの処理をボリューム数分記述してください。)
複写先ボリューム前処理スクリプトの68〜133行目、および複写先ボリューム後処理スクリプトの180〜201,204〜240行目について、ファイルシステムが構築された全ての論理ボリュームに対して、アンマウント/マウント処理が行われるように記述を適宜修正してください。("*"で示す箇所は実際の環境に合わせて変更してください。
また、複写先ボリューム前処理スクリプトの103〜131行目および、複写先ボリューム後処理スクリプトの188〜189,224〜238行目のコメントをはずし、これらの処理をボリューム数分記述してください。)
複写先ボリューム後処理スクリプトの編集方法は以下の通りです。
182行目は、複写先ボリュームの物理ボリューム名を記述してください。
186行目のクオートの中は、複写元ボリュームと複写先ボリュームの論理ボリューム名の対応関係を記述します。 “複写元ボリュームの論理ボリューム名:複写先ボリュームの論理ボリューム名”の形式で記述してください。なお複写元ボリューム内に複数の論理ボリュームが存在する場合は、論理ボリュームの数分186行目の内容を記述してください。
187行目のクオートの中は、複写先ボリュームの論理ボリューム名を記述します。 “複写先ボリュームの論理ボリューム名:複写先ボリュームの論理ボリューム名”の形式で記述してください。なお複写先ボリューム内に複数の論理ボリュームが存在する場合は、論理ボリュームの数分187行目の内容を記述してください。
208行目は、複写先ボリュームの論理ボリューム名を記述してください。
209行目は、208行目に記述した論理ボリュームについて、複写元ボリュームにおけるマウントポイントを記述してください。
210行目は、208行目に記述した論理ボリュームについて、複写先ボリュームにおけるマウントポイントを記述してください。
スクリプトに対して必要な修正を実施後,複写元ボリューム前処理スクリプトの60行目及び複写先ボリューム前処理スクリプトの64行目のexit文をコメント("#")化してください。
また、ファイルシステムが構築されていない論理ボリュームを含むボリュームグループがレプリケーション対象の場合は、上記修正に加えて、複写先ボリューム後処理スクリプトの212〜217行目の処理をコメント("#")化してください。
カスタマイズをしていない状態では、ボリュームグループに対する前処理はエラーとなります。
mountコマンドなどのOSコマンドのパラメーターやオプションなどは運用に合わせて,適宜修正してください。
複写先のボリュームグループを活性化する運用を行っている場合、複写先ボリュームの後処理スクリプトにおいて、LVM管理情報の書き換え(recreatevg)を実施します。この処理には時間がかかる場合があります。
VERITAS Cluster Serverでクラスタ運用を行う場合で、複写先,複写元ボリュームのマウントポイントがクラスタ業務に登録されている場合は前後処理スクリプトのカスタマイズが必要となります。
前後処理スクリプト内のアンマウント/マウント処理を、マウントポイントリソースのオフライン/オンライン処理に変更してください。
また、マウントポイントリソースのオフライン/オンラインを行ってから、実際にボリュームがアンマウント/マウントされるまでに時間差があります。そのため実際にアンマウント/マウントされるまで待ち合わせる処理(sleepやdfコマンドの結果を監視するなど)をオフライン/オンラインの成否を判定する個所の後に追加してください。
以下に前後処理スクリプトのカスタマイズ例を示します。
[例] 複写元ボリューム前処理スクリプト(RepSrc.pre)のアンマウント処理変更
[70,79,100,109行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] 複写元ボリューム前処理スクリプト(RepSrc.pre)のアンマウント待ち処理の追加
[98,128行目]
(追加) |
mount_status="mounted" |
[例] 複写先ボリューム前処理スクリプト(RepDst.pre)のアンマウント処理変更
[74,83,104,113行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] 複写先ボリューム前処理スクリプト(RepDst.pre)のアンマウント待ち処理追加
[102,132行目]
(追加) |
mount_status="mounted" |
[例] 複写元ボリューム後処理スクリプト(RepSrc.post)のマウント処理変更
[77,86,110,119行目]
(変更前) |
/usr/sbin/mount $lvname $lv_mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] 複写元ボリューム後処理スクリプト(RepSrc.post)のマウント待ち処理追加
[104,137行目]
(追加) |
mount_status="not_mounted" |
[例] 複写先ボリューム後処理スクリプト(RepDst.post)のマウント処理変更
[72,81行目]
(変更前) |
/usr/sbin/mount $lvname $lv_mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] 複写先ボリューム後処理スクリプト(RepDst.post)のマウント待ち処理追加
[99行目]
(追加) |
mount_status="not_mounted" |
目次
索引
![]() ![]() |