分类:
2008-04-25 08:11:04
之所以使用管道文件,是为了节省本地存储空间,备份文件直接传到远端的存储上(这个存储被NIM MASTER使用),本地无需驻留。
之所以不直接使用NIM MASTER备份所有LPAR的方式,原因有三:
1、存储是NAS,我们是通过NFS方式使其被NIM MASTER使用的,此时Define一个mksysb Resource,是不可能CREATE system backup image的,因为NFS过的文件系统不能再被NFS一次。
2、即使存储是SAN,对于做过mirrorvg的rootvg,恢复到其它机器或LPAR时,问题也多多。在LPAR本地做mksysb,就可以先修改/image.data,取消镜像信息。
3、NIM MASTER不能远程备份非rootvg。
cat <<'!!!' >/usr/bin/backup.ksh
#!/usr/bin/ksh
#DATE: 2008-04-16
#email:
#blog: http://blog.chinaunix.net/index.php?blogId=739 http://www.cublog.cn/u/739/
#第一部分——请根据需要改变如下环境变量
FTPUSER=zbackup
FTPPASSWD=XXXX
VLAN=`host $(hostname) |awk -F. '{print $(NF-1); exit}'`
CLIENT=`host $(hostname) | awk '{print $3"_"$1; exit}'`
TIMESTAMP=`date +"%y%m%d"`
case "$VLAN" in
"72")
FTPSERVER=99.1.72.231
TARGETDIR=/uat_backup/$CLIENT
]
]
;;
"73")
FTPSERVER=99.1.73.231
TARGETDIR=/st_backup/$CLIENT
]
]
;;
*)
exit 1
;;
esac
LOG=${CLIENT}_backup_${TIMESTAMP}.log
ERRLOG=${CLIENT}_backup_${TIMESTAMP}.err
FILE=${CLIENT}_rootvg_${TIMESTAMP}
#第二部分——清理使用管道文件的进程
ps -ef | awk '/backup_pipe/ && !/grep/ {system ("kill -9 "$2)}'
#第三部分——生成无镜像信息的/image.data文件
mkszfile
export IFS='\\'
while read line;do
if [ "`echo $line |awk '{print $1}'`" = "COPIES=" ]
then
copys=`echo $line |awk '{print $2}'`
fi
echo $line |awk 'BEGIN{OFS=FS="= "}{if($1 ~ "PP$") print $1,$2/copys; else print $0}' copys=$copys
donesed '/COPIES/s/[23]/1/g' >/image.data.new
cat /image.data.new > /image.data
#第四部分——检查FTP SERVER上的文件系统是否mount,如果发现错误,发邮件给管理员
cd /tmp
>$LOG
>$ERRLOG
echo `date` check whether the FS on server is mounted or not >> $LOG
ftp -n >>$LOG 2>>$ERRLOG <open $FTPSERVER 21
user $FTPUSER $FTPPASSWD
cd $TARGETDIR
bye
!!
grep -q exist $LOG
if [ $? == 0 ]
then
cat $LOG $ERRLOG | mail -s "`basename $0` ERROR on $CLIENT at `date +'%y-%m-%d %H:%M'`" -c "$CC" $SENDTO
exit 2
fi
#第五部分——做mksysb备份,并FTP上传mksysb备份文件到异地
#做mksysb备份,排除文件为/etc/exclude.rootvg
PIPENAME=/backup_pipe_rootvg
ls $PIPENAME 2>/dev/null || mknod $PIPENAME p
echo `date` rootvg backup start > $LOG
mksysb -e $PIPENAME >> $LOG 2>$ERRLOG &
#FTP上传mksysb备份文件到异地
echo `date` ${FILE} ftp start >> $LOG
ftp -n >> $LOG 2>>$ERRLOG <open $FTPSERVER 21
user $FTPUSER $FTPPASSWD
bin
cd $TARGETDIR
put "|dd if=$PIPENAME" $FILE
bye
!!
echo `date` ${FILE} ftp stop >> $LOG
#第六部分——做非rootvg备份,并FTP上传savevg备份文件到异地
cd /tmp
for VGNAME in `lsvg -o | egrep -v '(rootvg|backvg)'` ; do
#做savevg备份,排除文件为/etc/exclude.${VGNAME}
FILE=${CLIENT}_${VGNAME}_${TIMESTAMP}
PIPENAME=/backup_pipe_${VGNAME}
ls $PIPENAME 2>/dev/null || mknod $PIPENAME p
echo `date` ${VGNAME} backup start >> $LOG
savevg -f$PIPENAME -i -e ${VGNAME} >> $LOG 2>>$ERRLOG &
#FTP上传savevg备份文件到异地
echo `date` ${FILE} ftp start >> $LOG
ftp -n >> $LOG 2>>$ERRLOG <<-!!
open $FTPSERVER 21
user $FTPUSER $FTPPASSWD
bin
cd $TARGETDIR
put "|dd if=$PIPENAME" $FILE
bye
!!
echo `date` ${FILE} ftp stop >> $LOG
done
#第七部分——检查LOG,如果发现错误,发邮件给管理员
ps -ef | awk '/backup_pipe/' >>$ERRLOG
#if [ -s $ERRLOG ]
if [ `grep -vw records $ERRLOG | wc -l` -gt 0 ]
then
cat $LOG $ERRLOG | mail -s "`basename $0` ERROR on $CLIENT at `date +'%y-%m-%d %H:%M'`" -c "$CC" $SENDTO
fi
!!!
chmod +x /usr/bin/backup.ksh
========================================================================
任何形式的转载,请写明出处:
email:
blog: http://blog.chinaunix.net/index.php?blogId=739 http://www.cublog.cn/u/739/
========================================================================
chinaunix网友2008-07-22 16:35:16
今天又有变化了 mkszfile cp /image.data /image.data.new && awk '{a[$1]=$2} /COPIES=/{$1="\t"$1;$2=1} /PP=/{$1="\t"$1;$2=a["LPs="]};{print}' /image.data.new >/image.data
chinaunix网友2008-07-11 14:17:33
第三部分——生成无镜像信息的/image.data文件,可以改成现在的样子了: mkszfile cp /image.data /image.data.new && awk '{a[$1]=$2} /COPIES=/{$2=1} /PP=/{$2=a["LPs="]};{print}' /image.data.new >/image.data 详见http://www.loveunix.net/thread-86964-1-1.html的讨论。