ETERNUS SF AdvancedCopy Manager 運用手引書 13.0 -Solaris- |
目次
索引
![]() ![]() |
本章では、AdvancedCopy Managerのバックアップおよびリストアの前後処理を行うシェルスクリプトについて説明します。
バックアップ/リストアの前後処理のシェルスクリプトは、バックアップ実行コマンドまたはリストア実行コマンドを実施した際に、バックアップ/リストア処理の前後で起動されます。
これらのシェルスクリプトには、AdvancedCopy Managerが、業務ボリュームのバックアップおよびリストアを行う際に必要な処理を記述します。
この章では、前後処理の設定について説明します。
AdvancedCopy Managerでのバックアップは、基本的に業務ボリュームがアンマウントされた状態で処理を行う必要があります。
そのため、通常、前処理では、業務ボリューム名からそのボリュームのマウント状態を獲得し、次の処理を行います。
業務ボリュームの状態 |
前処理 |
---|---|
マウントされている |
業務ボリュームをアンマウントします。(注) |
アンマウントされている |
何も処理しません。 |
(注)ただし、都合によりどうしても業務ボリュームをアンマウントできない場合は、『業務ボリュームをアンマウントしたくない場合』を参照し、前処理のシェルスクリプトをカスタマイズしてください。
後処理は、前処理で行った処理によって何をするのかを判断します。
前処理 |
後処理 |
---|---|
業務ボリュームをアンマウントした。 |
業務ボリュームをマウントし直します。 |
何も処理しなかった。 |
何も処理しません。 |
データベースとして使用している業務ボリュームのように、最初から業務ボリュームがマウントされていない場合は、前後処理ともに何も処理しません。
この他にも、特殊な前後処理が必要な場合は、シェルスクリプトに処理を追加する必要があります。
スクリプトをカスタマイズする場合、エラーコードは以下の規約に従ってください。
エラーコード |
用途 |
---|---|
0-99 |
使用不可(AdvancedCopy Managerが予約) |
100-255 |
使用可能 |
後処理に失敗した場合は、資源情報の整合性が不完全になっている可能性がありますので、本マニュアルの『資源整合コマンド(swstsrsemtch)』を実施してください。
バックアップ実行時の前処理のシェルスクリプト名は、以下の通りです。
非クラスタ運用の場合
/etc/opt/FJSVswsts/sh/OpcBackup.pre
クラスタ運用の場合
/etc/opt/FJSVswsts/<論理ノード名>/sh/OpcBackup.pre
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Preprocessing of backup processing 8: # 9: # Argument: $1 Device name of transaction disk 10: # $2 Mount point of transaction disk 11: # $3 Device name of backup disk 12: # 13: # Error number 14: # 2: Argument error 15: # 10: umount error 16: 17: 18: # Argument check 19: case $# in 20: 1) 21: ;; 22: 2) 23: ;; 24: 3) 25: ;; 26: *) 27: exit 2 28: ;; 29: esac 30: 31: device="`echo $1`" 32: mount_point="`echo $2`" 33: bk_device="`echo $3`" 34: 35: # Determination postprocessing file name 36: 37: if [ "$SWSTGNODE" != "" ] 38: then 39: swstg_node="/`echo $SWSTGNODE`" 40: else 41: swstg_node="" 42: fi 43: 44: err_log_path="/var/opt/FJSVswsts"$swstg_node"/log" 45: 46: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 47: then 48: # /dev/dsk/c?t?d?s? -> c?t?d?s? 49: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 50: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 51: then 52: # /dev/FJSVmphd/dsk/mplb?s? -> /dev/FJSVmphd/dsk/mplb?s? 53: # /dev/FJSVmphd/dsk/mphd?s? -> /dev/FJSVmphd/dsk/mphd?s? 54: dev="`echo $device | /usr/bin/cut -d/ -f5`" 55: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 56: then 57: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 58: then 59: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 60: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 61: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 62: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 63: device="`echo $device | /usr/bin/cut -d: -f1`" 64: else 65: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 66: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 67: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 68: fi 69: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 70: then 71: # /dev/vx/dsk/volume -> _vx_rootdg_volume 72: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 73: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 74: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 75: then 76: # /dev/vx/dmp/device -> _vx_pv_device 77: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 78: else 79: exit 0 80: fi 81: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre" 82: fstype_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".fstype" 83: bd_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".bd" 84: 85: if [ "$mount_point" != "" ] 86: then 87: 88: # When device cannot be unmounted 89: # 90: # if [ "$device" = "/dev/dsk/c*t*d*s*" ] 91: # then 92: # /usr/sbin/lockfs -w $mount_point > /dev/null 2>&1 93: # if [ "$bk_device" != "" ] 94: # then 95: # echo $bk_device > $bd_file 96: # fi 97: # df -ln $mount_point | cut -f2 -d: | cut -f2 -d' ' > $fstype_file 98: # sync 99: # sync 100: # echo "fsck" > $post_file 101: # 102: # When device can be unmounted 103: # 104: # else 105: /usr/bin/df -ln $mount_point | /usr/bin/cut -f2 -d: | /usr/bin/cut -f2 -d' ' > $fstype_file 106: /usr/sbin/umount $mount_point 2>/dev/null 107: if [ $? != 0 ] 108: then 109: retry_count=3 110: sleep_time=1 111: result_flag=1 112: 113: while [ $retry_count -gt 0 ] 114: do 115: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 116: if [ $? != 0 ] 117: then 118: retry_count=`expr $retry_count - 1` 119: /usr/bin/sleep $sleep_time 120: else 121: /usr/bin/rm -f $err_log_path/$dev.umount 122: result_flag=0 123: break 124: fi 125: done 126: 127: if [ $result_flag != 0 ] 128: then 129: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 130: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 131: 132: exit 10 133: fi 134: fi 135: echo "mount" > $post_file 136: 137: # fi 138: 139: # When device was not mounted 140: # 141: else 142: echo "none" > $post_file 143: fi 144: 145: exit 0 |
マウントされているがアンマウントしたくない業務ボリュームに対しては、90〜100、104、137行目のコメント(“#”)をエディタ等で消去し、90行目のif文で対象となるデバイスを指示してください。
この操作は、ファイルシステムが以下の場合のみ可能です。
ufs
SafeFILE(シングルパーティション構成)
カスタマイズしたスクリプトによる前処理の動作は、以下のようになります。
業務ボリュームの状態 |
前処理 |
---|---|
マウントされている |
業務ボリュームへの更新を抑止します |
カスタマイズしたスクリプトによる後処理の動作は、以下のようになります。
前処理 |
後処理 |
---|---|
業務ボリュームへの更新を抑止した |
業務ボリュームへの更新抑止を解除します バックアップボリュームの整合性を確認します |
標準のスクリプトを使用した運用では、アドバンスト・コピー(EC/OPC)の前にファイルシステムをアンマウントすることにより、ファイルシステムのキャッシュの書き出しと、その後の更新が抑止されるため、ファイルシステム全体のデータの整合性が保証されます。
スクリプトをカスタマイズして、ファイルシステムのアンマウントを行わない場合は、lockfs -wを使用してファイルシステムのキャッシュのフラッシュと、その後の更新を抑止しますが、Write Open中のファイル(オンラインバックアップをサポートしているOracleのデータベーススペースは除きます)については、ファイル内容の保証はされません。
また、メタデータ更新中のプロセスがある場合は、lockfsの仕様上、ファイルシステム自体のデータ整合性も保障されません。
したがって、ファイルシステムのアンマウントを行わない場合のデータ整合性については、運用で考慮・対処する必要があります。
バックアップ実行時の後処理のシェルスクリプト名は、以下の通りです。
非クラスタ運用の場合
/etc/opt/FJSVswsts/sh/OpcBackup.post
クラスタ運用の場合
/etc/opt/FJSVswsts/<論理ノード名>/sh/OpcBackup.post
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Postprocessing of backup processing 8: # 9: # Argument: $1 Device name of transaction disk 10: # $2 Mount point of transaction disk 11: # 12: # Error number 13: # 2: Argument error 14: # 11: mount error 15: # 12: fsck error 16: 17: # Argument check 18: case $# in 19: 1) 20: ;; 21: 2) 22: ;; 23: *) 24: exit 2 25: ;; 26: esac 27: 28: device="`echo $1`" 29: mount_point="`echo $2`" 30: 31: # Determination of postprocessing 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 | /usr/bin/grep "/dev/dsk/"`" != "" ] 43: then 44: # /dev/dsk/c?t?d?s? -> c?t?d?s? 45: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 46: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 47: then 48: # /dev/FJSVmphd/dsk/mplb?s? -> /dev/FJSVmphd/dsk/mplb?s? 49: # /dev/FJSVmphd/dsk/mphd?s? -> /dev/FJSVmphd/dsk/mphd?s? 50: dev="`echo $device | /usr/bin/cut -d/ -f5`" 51: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 52: then 53: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 54: then 55: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 56: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 57: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 58: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 59: device="`echo $device | /usr/bin/cut -d: -f1`" 60: else 61: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 62: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 63: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 64: fi 65: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 66: then 67: # /dev/vx/dsk/volume -> _vx_rootdg_volume 68: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 69: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 70: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 71: then 72: # /dev/vx/dmp/device -> _vx_pv_device 73: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 74: else 75: exit 0 76: fi 77: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre" 78: fstype_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".fstype" 79: bd_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".bd" 80: 81: # Confirmation of postprocessing 82: if [ ! -r $post_file ] 83: then 84: exit 0 85: fi 86: post="`/usr/bin/cat $post_file`" 87: 88: # Confirmation of FStype 89: if [ ! -r $fstype_file ] 90: then 91: fs="" 92: else 93: fs="`/usr/bin/cat $fstype_file`" 94: fi 95: 96: # No processing 97: if [ "$post" = "none" ] 98: then 99: /usr/bin/rm -rf $post_file 2> /dev/null 100: /usr/bin/rm -rf $fstype_file 2> /dev/null 101: exit 0 102: fi 103: 104: # mount processing 105: if [ "$post" = "mount" ] 106: then 107: /usr/bin/df -l $device > /dev/null 2>&1 108: if [ $? != 0 ] 109: then 110: if [ ! -r $fstype_file ] 111: then 112: /usr/sbin/mount $device $mount_point 2> /dev/null 113: else 114: if [ "$fs" = "" ] 115: then 116: /usr/sbin/mount $device $mount_point 2> /dev/null 117: else 118: /usr/sbin/mount -F $fs $device $mount_point 2> /dev/null 119: fi 120: fi 121: if [ $? != 0 ] 122: then 123: retry_count=3 124: sleep_time=1 125: result_flag=1 126: 127: while [ $retry_count -gt 0 ] 128: do 129: if [ ! -r $fstype_file ] 130: then 131: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 132: else 133: if [ "$fs" = "" ] 134: then 135: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 136: else 137: /usr/sbin/mount -F $fs $device $mount_point > $err_log_path/$dev.mount 2>&1 138: fi 139: fi 140: if [ $? != 0 ] 141: then 142: retry_count=`expr $retry_count - 1` 143: /usr/bin/sleep $sleep_time 144: else 145: /usr/bin/rm -f $err_log_path/$dev.mount 146: result_flag=0 147: break 148: fi 149: done 150: 151: if [ $result_flag != 0 ] 152: then 153: exit 11 154: fi 155: fi 156: fi 157: /usr/bin/rm -rf $post_file 2> /dev/null 158: /usr/bin/rm -rf $fstype_file 2> /dev/null 159: exit 0 160: fi 161: 162: # fsck processing 163: if [ "$post" = "fsck" ] 164: then 165: /usr/sbin/lockfs -u $mount_point > /dev/null 2>&1 166: if [ -r $bd_file ] 167: then 168: bk_device="`/usr/bin/cat $bd_file`" 169: fsck_dev="`echo $bk_device | /usr/bin/sed "s/\/dsk\//\/rdsk\//"`" 170: if [ ! -r $fstype_file ] 171: then 172: /usr/sbin/fsck -m $fsck_dev > /dev/null 2>&1 173: else 174: if [ "$fs" = "" ] 175: then 176: /usr/sbin/fsck -m $fsck_dev > /dev/null 2>&1 177: else 178: if [ "$fs" = "sfxfs" ] 179: then 180: /usr/sbin/sfxadm $fsck_dev > /dev/null 2>&1 181: /usr/sbin/fsck -y -F $fs -o p,log $fsck_dev > /dev/null 2>&1 182: else 183: /usr/sbin/fsck -m -F $fs $fsck_dev > /dev/null 2>&1 184: fi 185: fi 186: fi 187: if [ $? != 0 ] 188: then 189: if [ "$fs" = "" ] 190: then 191: result="`/usr/sbin/fsck -n $fsck_dev |/usr/bin/grep \?`" 192: else 193: result="`/usr/sbin/fsck -n -F $fs $fsck_dev |/usr/bin/grep \?`" 194: fi 195: if [ "$result" = "FILE SYSTEM STATE IN SUPERBLOCK IS WRONG; FIX? no" ] 196: then 197: if [ "$fs" = "" ] 198: then 199: /usr/sbin/fsck -y $fsck_dev > $err_log_path/$dev.fsck 2>&1 200: else 201: /usr/sbin/fsck -y -F $fs $fsck_dev > $err_log_path/$dev.fsck 2>&1 202: fi 203: if [ $? != 0 ] 204: then 205: exit 12 206: else 207: /usr/bin/rm -f $err_log_path/$dev.fsck 208: fi 209: else 210: echo "$result" > $err_log_path/$dev.fsck 2>&1 211: exit 12 212: fi 213: fi 214: fi 215: /usr/bin/rm -rf $post_file 2> /dev/null 216: /usr/bin/rm -rf $fstype_file 2> /dev/null 217: /usr/bin/rm -rf $bd_file 2> /dev/null 218: exit 0 219: fi 220: 221: exit 0 |
VERITAS Cluster Serverでクラスタ運用を行う場合で、業務ボリュームのマウントポイントがクラスタ業務に登録されている場合は、前後処理スクリプトのカスタマイズが必要となります。
前後処理スクリプト内のマウント/アンマウント処理を、マウントポイントリソースのオフライン/オンライン処理に変更してください。
また、マウントポイントリソースのオフライン/オンラインを行ってから、実際にボリュームがアンマウント/マウントされるまでに時間差があります。そのため実際にアンマウント/マウントされるまで待ち合わせる処理(sleepやdfコマンドの結果を監視するなど)をオフライン/オンラインの成否を判定する個所の後に追加してください。
以下に前後処理スクリプトのカスタマイズ例を示します。
[例] バックアップ前処理スクリプト(OpcBackup.pre)のアンマウント処理変更
[106,115行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] バックアップ前処理スクリプト(OpcBackup.pre)のアンマウント待ち処理追加
[135行目]
(追加) |
while /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
[例] バックアップ後処理スクリプト(OpcBackup.post)のマウント処理変更
[112,116,118,131,135,137行目]
(変更前) |
/usr/sbin/mount $device $mount_point 又は /usr/sbin/mount -F $fs $device $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] バックアップ後処理スクリプト(OpcBackup.post)のマウント待ち処理追加
[157行目]
(追加) |
until /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
AdvancedCopy Managerでのリストアは、業務ボリュームがアンマウントされた状態で処理を行う必要があります。
そのため、通常、前処理では、業務ボリューム名からそのボリュームのマウント状態を獲得し、次の処理を行います。
業務ボリュームの状態 |
前処理 |
---|---|
マウントされている |
業務ボリュームをアンマウントします。 |
アンマウントされている |
何も処理しません。 |
後処理は、前処理で行った処理によって何をするのかを判断します。
前処理 |
後処理 |
---|---|
業務ボリュームをアンマウントした。 |
業務ボリュームをマウントし直します。 |
何も処理しなかった。 |
何も処理しません。 |
この他にも、特殊な前後処理が必要な場合は、シェルスクリプトに処理を追加する必要があります。
スクリプトをカスタマイズする場合、エラーコードは以下の規約に従ってください。
エラーコード |
用途 |
---|---|
0-99 |
使用不可(AdvancedCopy Managerが予約) |
100-255 |
使用可能 |
後処理に失敗した場合は、資源情報の整合性が不完全になっている可能性がありますので、本マニュアルの『資源整合コマンド(swstsrsemtch)』を実施してください。
リストア実行時の前処理のシェルスクリプト名は、以下の通りです。
非クラスタ運用の場合
/etc/opt/FJSVswsts/sh/OpcRestore.pre
クラスタ運用の場合
/etc/opt/FJSVswsts/<論理ノード名>/sh/OpcRestore.pre
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Preprocessing of restoration processing 8: # 9: # Argument: $1 Device name of transaction disk 10: # $2 Mount point of transaction disk 11: # 12: # Error number 13: # 2: Argument error 14: # 10: umount error 15: 16: 17: # Argument check 18: case $# in 19: 1) 20: ;; 21: 2) 22: ;; 23: *) 24: exit 2 25: ;; 26: esac 27: 28: device="`echo $1`" 29: mount_point="`echo $2`" 30: 31: # Determination of postprocessing 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 | /usr/bin/grep "/dev/dsk/"`" != "" ] 43: then 44: # /dev/dsk/c?t?d?s? -> c?t?d?s? 45: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 46: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 47: then 48: # /dev/FJSVmphd/dsk/mplb?s? -> /dev/FJSVmphd/dsk/mplb?s? 49: # /dev/FJSVmphd/dsk/mphd?s? -> /dev/FJSVmphd/dsk/mphd?s? 50: dev="`echo $device | /usr/bin/cut -d/ -f5`" 51: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 52: then 53: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 54: then 55: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 56: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 57: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 58: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 59: device="`echo $device | /usr/bin/cut -d: -f1`" 60: else 61: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 62: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 63: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 64: fi 65: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 66: then 67: # /dev/vx/dsk/volume -> _vx_rootdg_volume 68: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 69: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 70: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 71: then 72: # /dev/vx/dmp/device -> _vx_pv_device 73: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 74: else 75: exit 0 76: fi 77: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre" 78: fstype_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".fstype" 79: bd_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".bd" 80: 81: if [ "$mount_point" != "" ] 82: then 83: 84: # When device can be unmounted 85: # 86: /usr/bin/df -ln $mount_point | /usr/bin/cut -f2 -d: | /usr/bin/cut -f2 -d' ' > $fstype_file 87: /usr/sbin/umount $mount_point 2> /dev/null 88: if [ $? != 0 ] 89: then 90: retry_count=3 91: sleep_time=1 92: result_flag=1 93: 94: while [ $retry_count -gt 0 ] 95: do 96: /usr/sbin/umount $mount_point > $err_log_path/$dev.umount 2>&1 97: if [ $? != 0 ] 98: then 99: retry_count=`expr $retry_count - 1` 100: /usr/bin/sleep $sleep_time 101: else 102: /usr/bin/rm -f $err_log_path/$dev.umount 103: result_flag=0 104: break 105: fi 106: done 107: 108: if [ $result_flag != 0 ] 109: then 110: /usr/sbin/fuser -cu $mount_point> $err_log_path/$dev.fuser 2>&1 111: /usr/bin/ps -ef > $err_log_path/$dev.ps 2>&1 112: 113: exit 10 114: fi 115: fi 116: echo "mount" > $post_file 117: 118: # When device was not mounted 119: # 120: else 121: echo "none" > $post_file 122: fi 123: 124: exit 0 |
マウントされているがアンマウントできない業務ボリュームに対しては、リストアはできません。リストア先のデバイスを指示してください。
リスト実行時の後処理のシェルスクリプト名は、以下の通りです。
非クラスタ運用の場合
/etc/opt/FJSVswsts/sh/OpcRestore.post
クラスタ運用の場合
/etc/opt/FJSVswsts/<論理ノード名>/sh/OpcRestore.post
1: #!/bin/sh 2: 3: # AdvancedCopy Manager 4: # All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006 5: 6: # 7: # Postprocessing of restoration processing 8: # 9: # Argument: $1 Device name of transaction disk 10: # $2 Mount point of transaction disk 11: # 12: # Error number 13: # 2: Argument error 14: # 11: mount error 15: 16: # Argument check 17: case $# in 18: 1) 19: ;; 20: 2) 21: ;; 22: *) 23: exit 2 24: ;; 25: esac 26: 27: device="`echo $1`" 28: mount_point="`echo $2`" 29: 30: # Determination of postprocessing file name 31: 32: if [ "$SWSTGNODE" != "" ] 33: then 34: swstg_node="/`echo $SWSTGNODE`" 35: else 36: swstg_node="" 37: fi 38: 39: err_log_path="/var/opt/FJSVswsts"$swstg_node"/log" 40: 41: if [ "`echo $device | /usr/bin/grep "/dev/dsk/"`" != "" ] 42: then 43: # /dev/dsk/c?t?d?s? -> c?t?d?s? 44: dev="`echo $device | /usr/bin/sed "s/\/dev\/dsk\///"`" 45: elif [ "`echo $device | /usr/bin/grep "/dev/FJSV"`" != "" ] 46: then 47: # /dev/FJSVmphd/dsk/mplb?s? -> /dev/FJSVmphd/dsk/mplb?s? 48: # /dev/FJSVmphd/dsk/mphd?s? -> /dev/FJSVmphd/dsk/mphd?s? 49: dev="`echo $device | /usr/bin/cut -d/ -f5`" 50: elif [ "`echo $device | /usr/bin/grep "/dev/sfdsk/"`" != "" ] 51: then 52: if [ "`echo $device | /usr/bin/grep ":"`" != "" ] 53: then 54: # /dev/sfdsk/class/dsk/volume:c?t?d? -> class_volume_c?t?d? 55: dev="`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 56: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 57: dev="`echo $dev | /usr/bin/sed "s/:/_/"`" 58: device="`echo $device | /usr/bin/cut -d: -f1`" 59: else 60: # /dev/sfdsk/class/dsk/volume -> _gds_class_volume 61: dev="_gds_`echo $device | /usr/bin/sed "s/\/dev\/sfdsk\///"`" 62: dev="`echo $dev | /usr/bin/sed "s/\/dsk\//_/"`" 63: fi 64: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dsk/"`" != "" ] 65: then 66: # /dev/vx/dsk/volume -> _vx_rootdg_volume 67: # /dev/vx/dsk/disk-group/volume -> _vx_disk-group_volume 68: dev=_vx_"`echo $device | /usr/bin/awk -F\/ '{ if (NF == 6) { print $5"_"$6 } else print "rootdg_"$5 }'`" 69: elif [ "`echo $device | /usr/bin/grep "/dev/vx/dmp/"`" != "" ] 70: then 71: # /dev/vx/dmp/device -> _vx_pv_device 72: dev=_vx_pv_"`echo $device | /usr/bin/cut -d/ -f5`" 73: else 74: exit 0 75: fi 76: post_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".pre" 77: fstype_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".fstype" 78: bd_file="/etc/opt/FJSVswsts"$swstg_node"/data/DEFAULT/"$dev".bd" 79: 80: # Confirmation of postprocessing 81: if [ ! -r $post_file ] 82: then 83: exit 0 84: fi 85: post="`/usr/bin/cat $post_file`" 86: 87: # Confirmation of FStype 88: if [ ! -r $fstype_file ] 89: then 90: fs="" 91: else 92: fs="`/usr/bin/cat $fstype_file`" 93: fi 94: 95: # No processing 96: if [ "$post" = "none" ] 97: then 98: /usr/bin/rm -rf $post_file 2> /dev/null 99: /usr/bin/rm -rf $fstype_file 2> /dev/null 100: exit 0 101: fi 102: 103: # mount processing 104: if [ "$post" = "mount" ] 105: then 106: /usr/bin/df -l $device > /dev/null 2>&1 107: if [ $? != 0 ] 108: then 109: if [ ! -r $fstype_file ] 110: then 111: /usr/sbin/mount $device $mount_point 2> /dev/null 112: else 113: if [ "$fs" = "" ] 114: then 115: /usr/sbin/mount $device $mount_point 2> /dev/null 116: else 117: if [ "$fs" = "sfxfs" ] 118: then 119: dev="`echo $device | /usr/bin/sed "s/\/dsk\//\/rdsk\//"`" 120: /usr/sbin/sfxadm $dev > /dev/null 2>&1 121: fi 122: /usr/sbin/mount -F $fs $device $mount_point 2> /dev/null 123: fi 124: fi 125: if [ $? != 0 ] 126: then 127: retry_count=3 128: sleep_time=1 129: result_flag=1 130: 131: while [ $retry_count -gt 0 ] 132: do 133: if [ ! -r $fstype_file ] 134: then 135: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 136: else 137: if [ "$fs" = "" ] 138: then 139: /usr/sbin/mount $device $mount_point > $err_log_path/$dev.mount 2>&1 140: else 141: if [ "$fs" = "sfxfs" ] 142: then 143: dev="`echo $device | /usr/bin/sed "s/\/dsk\//\/rdsk\//"`" 144: /usr/sbin/sfxadm $dev > $err_log_path/$dev.sfxadm 2>&1 145: fi 146: /usr/sbin/mount -F $fs $device $mount_point > $err_log_path/$dev.mount 2>&1 147: fi 148: fi 149: if [ $? != 0 ] 150: then 151: retry_count=`expr $retry_count - 1` 152: /usr/bin/sleep $sleep_time 153: else 154: /usr/bin/rm -f $err_log_path/$dev.mount 155: result_flag=0 156: break 157: fi 158: done 159: 160: if [ $result_flag != 0 ] 161: then 162: exit 11 163: fi 164: fi 165: fi 166: /usr/bin/rm -rf $post_file 2> /dev/null 167: /usr/bin/rm -rf $fstype_file 2> /dev/null 168: exit 0 169: fi 170: 171: exit 0 |
VERITAS Cluster Serverでクラスタ運用を行う場合で、業務ボリュームのマウントポイントがクラスタ業務に登録されている場合は、前後処理のカスタマイズが必要となります。
前後処理スクリプト内のマウント/アンマウント処理を、マウントポイントリソースのオフライン/オンライン処理に変更してください。
また、マウントポイントリソースのオフライン/オンラインを行ってから、実際にボリュームがアンマウント/マウントされるまでに時間差があります。そのため実際にアンマウント/マウントされるまで待ち合わせる処理(sleepやdfコマンドの結果を監視するなど)をオフライン/オンラインの成否を判定する個所の後に追加してください。
以下に前後処理スクリプトの変更例を示します
[例] リストア前処理スクリプト(OpcRestore.pre)のアンマウント処理変更
[87,96行目]
(変更前) |
/usr/sbin/umount $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -offline リソース名 -sys システム名 |
[例] リストア前処理スクリプト(OpcRestore.pre)のアンマウント待ち処理追加
[116行目]
(追加) |
while /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
[例] リストア後処理スクリプト(OpcRestore.post)のマウント処理変更
[111,115,122,135,139,146行目]
(変更前) |
/usr/sbin/mount $device $mount_point 又は /usr/sbin/mount -F $fs $device $mount_point |
(変更後) |
/opt/VRTSvcs/bin/hares -online リソース名 -sys システム名 |
[例] リストア後処理スクリプト(OpcRestore.post)のマウント待ち処理追加
[166行目]
(追加) |
until /usr/sbin/df -l "$device">/dev/null 2>&1; do :; done |
目次
索引
![]() ![]() |