###############################################################
# script: backup.sh
# Author: Shi WJ
# Date: 2008.12.
# Purpose: Backup disk to an compressed image file.
###############################################################
SOURCE_DISK=sda
TARGET_DIR=/media/sdb1/S10-2/`date +"%Y_%m%d"`
# Note: you need to make sure that the source disk is correct, and the
# target directory is changed to correctly reflect your system.
if [ $# -gt 1 ]
then
echo "Usage:"
echo " backup.sh [noClean]"
echo " Without [noClean], cleaning is automatic."
exit -1
fi
CLEAN=Y
if [ $# -eq 1 ]
then
if [ $1 != "noClean" ]
then
echo "Usage:"
echo " backup.sh [noClean]"
echo " Without [noClean], cleaning is automatic."
exit -1
fi
CLEAN=N
echo `date +"%Y/%m/%d %H:%M:%S"` " Starting Disk backup in 'noCleaning' Mode."
else
echo `date +"%Y/%m/%d %H:%M:%S"` " Starting Disk backup in 'Cleaning' Mode."
echo " FYI, './backup.sh noClean' could be used for Non-cleaning mode backup."
fi
echo `date +"%Y/%m/%d %H:%M:%S"` " Source Disk to be backed up: $SOURCE_DISK"
echo `date +"%Y/%m/%d %H:%M:%S"` " The backup image will be located in: $TARGET_DIR"
echo `date +"%Y/%m/%d %H:%M:%S"` " Checking the backup source directory..."
SOURCE_MOUNTED=N
for SOURCE_DIR in /media/${SOURCE_DISK}*
do
if [ -d ${SOURCE_DIR} ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " Source Mounted: ${SOURCE_DIR}"
SOURCE_MOUNTED=Y
fi
done
if [ ${SOURCE_MOUNTED} = "N" ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " No source directory is not mounted. Exiting..."
exit -1
fi
echo `date +"%Y/%m/%d %H:%M:%S"` " Checking the backup target directory..."
if [ ! -d ${TARGET_DIR} ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} does not exist. Creating..."
mkdir ${TARGET_DIR}
if [ $? -eq 0 ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} created."
else
echo `date +"%Y/%m/%d %H:%M:%S"` " Failed to create backup target directory ${TARGET_DIR}. Exiting..."
exit -1
fi
else
echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} exists."
fi
if [ $CLEAN = "Y" ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " Ready to clean the free space in source disk before backup."
for SOURCE_DIR in /media/${SOURCE_DISK}*
do
if [ -d ${SOURCE_DIR} ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` " Cleaning unused space of ${SOURCE_DIR}..."
dd if=/dev/zero of=${SOURCE_DIR}/zerofile bs=512k
rm ${SOURCE_DIR}/zerofile
fi
done
else
echo `date +"%Y/%m/%d %H:%M:%S"` " Source disk cleaning skipped."
fi
echo `date +"%Y/%m/%d %H:%M:%S"` " Backup the entire hard disk to the image file..."
dd if=/dev/sda ibs=512k | gzip > ${TARGET_DIR}/img.gz
echo `date +"%Y/%m/%d %H:%M:%S"` " Backup complete. The image file: ${TARGET_DIR}/img.gz"