#!/bin/sh # # Written by: # Brent L. Bates # ViGYAN, Inc. # 30 Research Drive # Hampton, VA 23666-2315 # blbates@vigyan.com # #set -x #set -v LEVEL=0 TAPEDOMAIN=vigyan.com TAPEHOST=`hostname -s`.${TAPEDOMAIN} TAPELABEL_START='Backups:ViGYAN:'${1}':Tape_' echo "Starting date: "`/bin/date` TAPEHOST_OS=`uname -s` if [ ${TAPEHOST_OS} = 'IRIX' -o ${TAPEHOST_OS} = 'IRIX64' ]; then # # SGI # TAPE=/dev/nrtapec /usr/sbin/renice -n +10 $$ TAPE_STATUS='mt -f ${TAPE} status 2>&1 | grep Media |sed -e "s/^.*Media.*:[ ]*//" |sed -e "s/[ ][ ]*.*//' UNLOAD='echo "Rewinding Tape." ; mt -f ${TAPE} rewind ; echo "Offlining Tape." ; mt -f ${TAPE} offline ; sleep 2 ; if [ `eval ${TAPE_STATUS}` != 'Not' ]; then mt -f ${TAPE} unload; fi' if [ x`eval ${TAPE_STATUS}` != 'xNot' ]; then TAPE_UNLOADED="No" else TAPE_UNLOADED="Yes" fi elif [ ${TAPEHOST_OS} = 'Linux' ]; then # # Linux # SIZE=12288000 TAPE=/dev/nst0 /usr/bin/renice +10 $$ TAPE_STATUS='mt -f ${TAPE} status 2>&1 | grep DR_OPEN |tr "[\ ]" "[\\n]" |grep DR_OPEN' UNLOAD='echo "Rewinding Tape." ; mt -f ${TAPE} rewind ; echo "Offlining Tape." ; mt -f ${TAPE} offline ; sleep 2 ; if [ 'x'`eval ${TAPE_STATUS}` != 'xDR_OPEN' ]; then mt -f ${TAPE} offline; fi' if [ x`eval ${TAPE_STATUS}` != 'xDR_OPEN' ]; then TAPE_UNLOADED="No" else TAPE_UNLOADED="Yes" fi else # # SunOS # TAPE=/dev/exabyte /usr/etc/renice +10 $$ UNLOAD="echo "Rewinding Tape." ; mt -f ${TAPE} rewind ; echo "Offlining Tape." ; mt -f ${TAPE} offline" fi if [ ${TAPE_UNLOADED} = 'Yes' ]; then echo 'No tape loaded.' echo "Ending date: "`/bin/date` exit 1 fi mt -f ${TAPE} rewind if [ $? -ne 0 ]; then echo 'Something is wrong with tape or tape drive.' echo "Ending date: "`/bin/date` exit 1 fi if [ ${TAPEHOST_OS} = 'IRIX' -o ${TAPEHOST_OS} = 'IRIX64' ]; then # # SGI # # Move to header partition # mt -f ${TAPE} sppart 1 mt -f ${TAPE} rewind elif [ ${TAPEHOST_OS} = 'Linux' ]; then # # Linux # # Make sure tape drive is in proper mode. # echo "Rewinding Tape." mt -f ${TAPE} rewind if [ `uname -r` = '2.2.14-12' ]; then # # Settings for old kernel. # if [ ${AIT} != 'y' ] ; then echo "Setting tape parameters: stsetoptions buffer-writes can-partitions" mt -f ${TAPE} stsetoptions buffer-writes can-partitions echo "Setting: defcompression 1" mt -f ${TAPE} defcompression 1 echo "Setting: datcompression 1" mt -f ${TAPE} datcompression 1 fi else # # Settings for newer kernels. # if [ ${AIT} = 'y' ] ; then echo "NOT setting: setblk 0 (Variable block size)" # echo "Setting: setblk 0 (Variable block size)" # mt -f ${TAPE} setblk 0 else echo "Setting tape parameters: stsetoptions scsi2logical can-partitions" mt -f ${TAPE} stsetoptions scsi2logical can-partitions echo "Clearing tape parameters: stclearoptions async-writes" mt -f ${TAPE} stclearoptions async-writes echo "Setting: setblk 0 (Variable block size)" mt -f ${TAPE} setblk 0 echo "Setting: defcompression 1" mt -f ${TAPE} defcompression 1 fi fi if [ ${AIT} != 'y' ] ; then echo "Setting: compression" mt -f ${TAPE} compression # # Move to header partition # echo "Moving to partition 1." mt -f ${TAPE} setpartition 1 fi echo "Rewinding Tape." mt -f ${TAPE} rewind else # # SunOS # mt -f ${TAPE} rewind fi if [ ${AIT} = 'y' ] ; then # # Set a dummy header for xfsdump to use. # HEADER=${TAPELABEL_START}"#:Level_"${LEVEL} else # # Get then check header # HEADER=`dd if=${TAPE} bs=1k cbs=1k conv=unblock` START=`echo ${HEADER} |sed -e 's/:Tape_.*/:Tape_/'` if [ $? -eq 0 ]; then if [ "${HEADER:-'NOHEADER'}" = 'NOHEADER' ]; then echo 'No Header on Tape' echo 'Header should be:' ${TAPELABEL_START}"#:Level_"${LEVEL} eval ${UNLOAD} echo "Ending date: "`/bin/date` exit 1 elif [ "${START}" = "${TAPELABEL_START}" ]; then echo 'Header verified:'${HEADER} mt -f ${TAPE} rewind if [ ${TAPEHOST_OS} != 'IRIX' -a ${TAPEHOST_OS} != 'IRIX64' -a ${TAPEHOST_OS} != 'Linux' ]; then echo ${HEADER} | dd of=${TAPE} bs=1k cbs=1k conv=block mt -f ${TAPE} rewind echo ' Header re-written; beginning dump' fi else echo 'Wrong tape' echo 'Header found was: ' ${HEADER} echo 'Header should be: ' ${TAPELABEL_START}"#:Level_"${LEVEL} eval ${UNLOAD} echo "Ending date: "`/bin/date` exit 1 fi else echo 'Error reading header.' echo "Ending date: "`/bin/date` exit 1 fi fi if [ ${TAPEHOST} = ${1}'.'${TAPEDOMAIN} ]; then REMOTE_COMMAND= TAPE_ARGS=${TAPE} else REMOTE_COMMAND="rsh ${1}" TAPE_ARGS="'guest@'${TAPEHOST}':'${TAPE}" fi REMOTE_OS=`${REMOTE_COMMAND} uname -s ` if [ $? -ne 0 ]; then echo 'Remote system ${1} is down. No backup made.' echo "Ending date: "`/bin/date` exit 1 fi if [ ${REMOTE_OS} = 'IRIX' -o ${REMOTE_OS} = 'IRIX64' ]; then if [ ${1} = 'indra' ]; then DISKS=`${REMOTE_COMMAND} df -l | grep dev | awk '{ print $2"_"$7 }' | sort -r ` else DISKS=`${REMOTE_COMMAND} df -l | grep dev | awk '{ print $2"_"$7 }'` fi # XFSDUMP="/usr/sbin/xfsdump -l ${LEVEL} -f ${TAPE_ARGS} -p 600 -F -M ${HEADER} -Y 5" XFSDUMP="/usr/sbin/xfsdump -e -o -l ${LEVEL} -f ${TAPE_ARGS} -p 600 -F -M ${HEADER} -Y 5" # XFSDUMP="/usr/sbin/xfsdump -l ${LEVEL} -f ${TAPE_ARGS} -b 8192 -m -p 600 -F -M ${HEADER}" # XFSDUMP="/usr/sbin/xfsdump -l ${LEVEL} -f ${TAPE_ARGS} -b 245760 -m -p 600 -F -M ${HEADER}" # DUMP="/usr/sbin/dump ${LEVEL}'ucCbf' 3m 20 ${TAPE_ARGS}" DUMP="/usr/sbin/dump ${LEVEL}ucdsbf 54000 6000 24 ${TAPE_ARGS}" elif [ ${REMOTE_OS} = 'Linux' ]; then DISKS=`${REMOTE_COMMAND} df -l -T -x tmpfs | grep dev | sort -n -r -k4 | awk '{ print $2"_"$7 }'` # XFSDUMP="/usr/sbin/xfsdump -e -v excluded_files=debug,general=debug,proc=debug,drive=debug,media=debug,inomap=verbose -o -l ${LEVEL} -f ${TAPE_ARGS} -p 600 -F -M ${HEADER} -Y 5" XFSDUMP="/usr/sbin/xfsdump -e -v excluded_files=debug -o -l ${LEVEL} -f ${TAPE_ARGS} -p 600 -F -M ${HEADER} -Y 5" # DUMP="/sbin/dump -${LEVEL} -b 64 -B ${SIZE} -f ${TAPE_ARGS} -u" # DUMP="/sbin/dump -${LEVEL} -b 32 -B ${SIZE} -f ${TAPE_ARGS} -u" # DUMP="/sbin/dump -${LEVEL} -a -b 16 -f ${TAPE_ARGS} -u" DUMP="/sbin/dump -${LEVEL} -a -b 64 -f ${TAPE_ARGS} -u" # dump 0uBf ${SIZE} ${DEVICE} / >& /tmp/dump-output else # DISKS=`${REMOTE_COMMAND} df -t 4.2 | grep dev | egrep -v sr0 | awk '{ print $2"_"$6 }'` # XFSDUMP="" # DUMP="/etc/dump ${LEVEL}ucCbf 3m 20 ${TAPE_ARGS}" DISKS=`${REMOTE_COMMAND} /bin/df -nlF ufs | awk '{ print $3"_"$1 }'` XFSDUMP="" DUMP="/usr/sbin/ufsdump ${LEVEL}ucbf 20 ${TAPE_ARGS}" fi #DISKS="xfs_/disk2 xfs_/disk4 xfs_/" echo 'From machine' ${1} 'Dumping: ' ${DISKS} if [ ${TAPEHOST_OS} = 'IRIX' -o ${TAPEHOST_OS} = 'IRIX64' ]; then # # SGI # # Move to data partition # mt -f ${TAPE} sppart 0 mt -f ${TAPE} rewind elif [ ${TAPEHOST_OS} = 'Linux' ]; then # # Linux # # Move to data partition # if [ ${AIT} != 'y' ] ; then mt -f ${TAPE} setpartition 0 fi mt -f ${TAPE} rewind else # # SunOS # mt -f ${TAPE} rewind mt -f ${TAPE} fsf 1 fi for LINE in ${DISKS} do echo ${LINE} FILE_TYPE=`echo ${LINE} |sed -e 's/_/ /'` PARTITION=`echo ${FILE_TYPE} | awk '{print $2}'` FILE_TYPE=`echo ${FILE_TYPE} | awk '{print $1}'` if [ ${FILE_TYPE} = 'xfs' ]; then # echo "${REMOTE_COMMAND} ${XFSDUMP} -L ${PARTITION} ${PARTITION}" ${REMOTE_COMMAND} ${XFSDUMP} -L ${PARTITION} ${PARTITION} elif [ ${FILE_TYPE} = 'ext2' -o ${FILE_TYPE} = 'ext3' ]; then # echo "${REMOTE_COMMAND} ${DUMP} ${PARTITION}" ${REMOTE_COMMAND} ${DUMP} ${PARTITION} elif [ ${FILE_TYPE} = 'efs' ]; then # echo "${REMOTE_COMMAND} ${DUMP} ${PARTITION}" ${REMOTE_COMMAND} ${DUMP} ${PARTITION} elif [ ${FILE_TYPE} = 'vfat' ]; then echo "Not backing up VFAT file system." elif [ ${FILE_TYPE} = 'iso9660' ]; then echo "Not backing up ISO-9660 file system." else # echo "${REMOTE_COMMAND} ${DUMP} ${PARTITION}" ${REMOTE_COMMAND} ${DUMP} ${PARTITION} fi done eval ${UNLOAD} echo "Ending date: "`/bin/date`