Hi,
I have the following script that does a backup via cpio to an NFS mount. The problem is that I only seem to be getting root. I'm not sure what I'm doing wrong here but it is not working. Following is the entire script. I've highlighted the areas where I think I have a problem or are at least relevant, I think.
#!/bin/sh
#
# Set configuration variables
#
NFSMOUNT='/mnt/nfs'
BACKUP_LOG='/usr/local/backup_logs'
EXCLUDE_FS='/mnt/nfs'
HARDWARE_LOG='/var/adm/messages'
export NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG
# Get date in MMDDYY format
MDY=`date +%m%d%y`
if [ ! -d ${BACKUP_LOG} -o ! -w ${BACKUP_LOG} ]; then
echo "${BACKUP_LOG} doesn't exist or isn't writable"
exit 1
fi
echo "### Backup starting at `date`"
# LOG_START is the number of lines in our hardware log
# when the backup began. We're not concerned with anything
# that occurred before now.
LOG_START=`wc -l < ${HARDWARE_LOG}`
# Strip leading and trailing spaces
LOG_START=`expr ${LOG_START}`
BACKUPTYPE="cpio"
# Get list of unix file systems to back up
MOUNTEDSYSTEMS=`df -F ufs | cut -d' ' -f1 | sort`
# Remove excluded file systems from list
for FS in $MOUNTEDSYSTEMS
do
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
# Add entry to list
*) case "${FILESYSTEMS}" in
# List is empty so this is the first entry
'') FILESYSTEMS="${FS}";;
# List contains entries so append to list
*) FILESYSTEMS="${FILESYSTEMS} ${FS}";;
esac;;
esac
done
cd /
if [ "$BACKUPTYPE" = "dump" ]; then
# Backup using dump
for FS in ${FILESYSTEMS}
do
echo "Dumping ${FS} ${NFSMOUNT}" | \
tee -a ${BACKUP_LOG}/bu.ufsdump.${MDY}
/usr/sbin/ufsdump 0fu ${NFSMOUNT} ${FS} 2>&1 | \
# we're only concerned with the last two lines of output
#to determine if this was a successful dump
tee -a ${BACKUP_LOG}/bu.ufsdump.${MDY} | tail -3
# Count dump of file system
FS_COUNT=`expr ${FS_COUNT} + 1`
done
else
#Backup using cpio
for FS in ${FILESYSTEMS}
do
echo "Writing cpio archive of ${FS} to ${NFSMOUNT}" |\
tee -a ${BACKUP_LOG}/bu.cpio.${MDY}.err \
>> ${BACKUP_LOG}/bu.cpio.${MDY}
# The output of find will always be relative to root
find .${FS} -print -xdev | \
# Use sed to change "./" back to "/" so Solaris cpio won't bark
sed -e 's/^\.\/$/\//' | \
cpio -oc -O ${NFSMOUNT}/`hostname`.${MDY} \
2>> ${BACKUP_LOG}/bu.cpio.${MDY}.err \
1>> ${BACKUP_LOG}/bu.cpio.${MDY}
# count cpio archive of file system
FS_COUNT=`expr ${FS_COUNT} + 1`
done
cat ${BACKUP_LOG}/bu.cpio.${MDY}.err
fi
# Display filesystem information that was just backed up
echo "### Currently mounted file systems:"
df -k ${FILESYSTEMS}
echo "###"
LOG_END=`wc -l < ${HARDWARE_LOG}`
# strip leading and trailing spaces
LOG_END=`expr ${LOG_END}`
if [ "${LOG_BEGIN}" -ne "${LOG_END}" ]; then
# Report errors in log during backup
# add additional grep lines to remove normal messages appearing in your
# system logging script
echo "### System logs generated during backup:"
cat ${HARDWARE_LOG} | \
sed -e "1,${LOG_START}d" | \
grep -v "connect from " | \
grep v "refused connection from " | \
nawk '{ print substr($0,1,78) }; \
length > 78 { print " " substr ($0,79) }'
echo "###"
fi
# Remove old log files
if [ "${BACKUPTYPE}" = "cpio" ]; then
cd ${BACKUP_LOG}
find . -mtime +14 -follow -exec rm {} \;
ls -lt ${BACKUP_LOG}/*
echo
fi
echo "Backup Finished at " `date`