#/bin/sh
##########################################################################
# 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"
echo "gzip
-dc $TARGET_DIR/img.gz | dd of=/dev/sda obs=512k &" >
$TARGET_DIR/restore.sh
echo `date
+"%Y/%m/%d %H:%M:%S"` " restore.sh created
${TARGET_DIR}/restore.sh"
echo "Good-bye"
exit 0
|