DSL Ideas and Suggestions :: Add exclusion file to backup/restore
I would like to see the following changes made to the backup/restore script (filetool.sh). Now the script backs up files and directories listed in filetool.lst and only excludes Cache. I would like to add the ability to exclude files or directories within the listed directories. To do that I added an exclusion file (xfiletool.lst) and added Cache to it. This would allow you to add the whole home directory of dsl and any other users to filetool.lst and exclude files inside them that are large and not changing by adding them to xfiletool.lst. One such file is XUL.mfasl under the .mozilla directory. If it is not there it gets recreated at runtime. Backing up that file adds upwards of .5MB to the backup file. It sometimes gets much larger. If you have added users and are backing up their home directories as well this can be huge. There are probably other files like this that others are aware of.
******************************************************************************
The following is the filetool.sh script. I commented out the original lines and
added my change directly below.
******************************************************************************
#!/bin/bash
# Original script by Robert Shingledecker for John Andrews DSL
# © Robert Shingledecker 2003,2004,2005
# A simple script to save/restore configs, directories, etc defined by the user
# in the file filetool.lst
. /etc/init.d/dsl-functions
HOME="/home/dsl"
if [ -z $1 ] ; then
echo "Usage: filetool.sh {backup|restore}"
echo -n "Press enter to coninue:" ; read ans
exit 1
fi
DEVICE="$3"
if [ -z $DEVICE ]; then
#echo "Get the device name from /opt/.backup_device
if [ -e /opt/.backup_device ]; then
if [ -n /opt/.backup_device ]; then
DEVICE=`cat /opt/.backup_device`
fi
fi
fi
get_mountpoint $DEVICE
if [ -z "$MOUNTPOINT" ]; then
echo "Invalid device $DEVICE"
echo -n "Press enter to coninue:" ; read ans
exit 1
fi
if [ $MOUNTED == "no" ]; then
sudo mount $MOUNTPOINT
if [ "$?" != 0 ]; then
echo "Unable to mount device $DEVICE"
echo -n "Press enter to coninue:" ; read ans
exit 1
fi
fi
echo `basename "$DEVICE"` > /opt/.backup_device
if [ $1 == "backup" ] ; then
if [ -z $2 ]; then
# tar -C / -T $HOME/filetool.lst --exclude=Cache -czvf $MOUNTPOINT/backup.tar.gz
tar -C / -T $HOME/filetool.lst --exclude-from=$HOME/xfiletool.lst -czvf $MOUNTPOINT/backup.tar.gz
echo -n "Press enter to coninue:" ; read ans
else
echo -n "${BLUE}Backing up files to $MOUNTPOINT ${NORMAL}"
# tar -C / -T $HOME/filetool.lst --exclude=Cache -czf $MOUNTPOINT/backup.tar.gz 2>/dev/null &
# rotdash $!
tar -C / -T $HOME/filetool.lst --exclude-from=$HOME/xfiletool.lst -czf $MOUNTPOINT/backup.tar.gz 2>/dev/null &
rotdash $!
if [ -f /etc/sysconfig/des ]; then
KEY=$(cat /etc/sysconfig/des)
des -E -3 -k "$KEY" "$MOUNTPOINT/backup.tar.gz" "$MOUNTPOINT/backup.des"
rm -f "$MOUNTPOINT/backup.tar.gz"
fi
echo "${BLUE}Done.${NORMAL}"
fi
if [ $MOUNTED == "no" ]; then
sudo umount $MOUNTPOINT
fi
exit 0
fi
if [ $1 == "restore" ] ; then
if [ -f /etc/sysconfig/des ]; then
TARGETFILE="backup.des"
else
TARGETFILE="backup.tar.gz"
fi
if [ ! -f $MOUNTPOINT/$TARGETFILE ] ; then
if [ $MOUNTED == "no" ]; then
sudo umount $MOUNTPOINT
fi
fi
if [ -z $2 ]; then
tar -C / -zxvf $MOUNTPOINT/backup.tar.gz
echo -n "Press enter to coninue:" ; read ans
else
echo -n "${BLUE}Restoring backup files from $MOUNTPOINT ${NORMAL}"
if [ -f /etc/sysconfig/des ]; then
KEY=$(cat /etc/sysconfig/des)
des -D -3 -k "$KEY" "$MOUNTPOINT/backup.des" "$MOUNTPOINT/backup.tar.gz"
fi
tar -C / -zxf $MOUNTPOINT/backup.tar.gz 2>/dev/null &
rotdash $!
if [ -f /etc/sysconfig/des ]; then
rm -f "$MOUNTPOINT/backup.tar.gz"
fi
echo "${BLUE}Done.${NORMAL}"
fi
if [ $MOUNTED == "no" ]; then
sudo umount $MOUNTPOINT
fi
exit 0
fi
echo "I don't understand the command line parameter: $1"
echo "Usage: filetool.sh {backup|restore}"
echo -n "Press enter to coninue:" ; read ans
exit 1
****************************************************************
The following is the contents of my filetool.lst file.
I backup my added user hawki home directory also.
***************************************************************
opt/ppp
opt/bootlocal.sh
opt/powerdown.sh
opt/.mydsl_dir
home/dsl
home/hawki
etc/group
etc/passwd
etc/shadow
etc/sudoers
***************************************************************
The following is the contents of my xfiletool.lst file.
This excludes Cache and XUL.mfasl from the backup file for
both users.
***************************************************************
Cache
XUL.mfasl
Very cool. So the only difference is adding --exclude-from?
hawki, Very Nice! Thanks for sharing.
mikshaw, yes the excude and exclude-from is the only change.
A simple sed command will produce the new script.
sed 's~=Cache~-from=$HOME/xfiletool.lst~' /usr/sbin/filetool.lst > filetool.lst
Then to try out the "new" filetool.lst from /home/dsl
./filetool.lst backup
Hi
Thanks for the quick response. Yes the --exclude-from= is the change. In fact it looks like -X does the same thing.
It makes a big difference on backup size in some cases.
Thanks again
I wonder if adding the -u (--update) argument to tar in filetool.sh would make the backup faster and wear the usb stick less
Next Page...
original here.