initial commit
This commit is contained in:
commit
c55b2327a1
307
backup.sh
Executable file
307
backup.sh
Executable file
@ -0,0 +1,307 @@
|
|||||||
|
#!/bin/ksh
|
||||||
|
#
|
||||||
|
# Usage: backup.sh --proto=[smb|ssh] --host=[address] --dir=[source dir] --user=[username] --pass=[password]"
|
||||||
|
#
|
||||||
|
# Example: backup.sh --proto=smb --host=192.168.1.2 --dir=Documents --user=admin --pass=1234"
|
||||||
|
# Example: backup.sh --proto=ssh --host=192.168.1.2 --dir=/home/ste/Documents --user=admin"
|
||||||
|
#
|
||||||
|
# Simple backup script used with cron to sync a remote folder with a usb stick using smb or ssh
|
||||||
|
#
|
||||||
|
NORM="\033[0m"
|
||||||
|
BLACK="\033[0;30m"
|
||||||
|
GRAY="\033[1;30m"
|
||||||
|
RED="\033[0;31m"
|
||||||
|
LRED="\033[1;31m"
|
||||||
|
GREEN="\033[0;32m"
|
||||||
|
LGREEN="\033[1;32m"
|
||||||
|
YELLOW="\033[0;33m"
|
||||||
|
LYELLOW="\033[1;33m"
|
||||||
|
BLUE="\033[0;34m"
|
||||||
|
LBLUE="\033[1;34m"
|
||||||
|
PURPLE="\033[0;35m"
|
||||||
|
PINK="\033[1;35m"
|
||||||
|
CYAN="\033[0;36m"
|
||||||
|
LCYAN="\033[1;36m"
|
||||||
|
LGRAY="\033[0;37m"
|
||||||
|
WHITE="\033[1;37m"
|
||||||
|
|
||||||
|
function log {
|
||||||
|
echo -e "`date +'%d/%m/%Y %H:%M:%S'` | $1"
|
||||||
|
echo -e "`date +'%d/%m/%Y %H:%M:%S'` | $1" >> $LOGFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo $1
|
||||||
|
echo
|
||||||
|
echo -e "backup.sh --proto=[smb|ssh] --host=[address] --dir=[source dir] --user=[username] --pass=[password]"
|
||||||
|
echo
|
||||||
|
echo -e "backup.sh --proto=smb --host=192.168.1.220 --dir=backup --user=filio --pass=1234 --delete=yes"
|
||||||
|
echo -e "backup.sh --proto=ssh --host=192.168.1.2 --dir=/home/ste/Documents --user=admin"
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function mount_smb {
|
||||||
|
if mount -t cifs //$HOST/$DIR /mnt/$SRC -o username=$USR,password=$PASS; then
|
||||||
|
log "[ OK ] mount //$HOST/$DIR to /mnt/$SRC"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log "[FAIL] mount //$HOST/$DIR to /mnt/$SRC"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function mount_ssh {
|
||||||
|
if ssh -q -o BatchMode=yes -o ConnectTimeout=10 $USR@$HOST exit; then
|
||||||
|
if ssh $USR@$HOST ls $DIR > /dev/null; then
|
||||||
|
if sshfs -o ro $USR@$HOST:$DIR /mnt/$SRC; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log "[FAIL] mount $USR@$HOST:$DIR to /mnt/$SRC"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "[FAIL] remote dir $DIR not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "[FAIL] ssh $USR@$HOST"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function mount_usb {
|
||||||
|
|
||||||
|
# check all disks in system
|
||||||
|
for item in `sysctl hw.disknames | awk -F= {'print $2'} | sed 's/,/ /g'`;
|
||||||
|
do
|
||||||
|
# get all disks
|
||||||
|
disk=`echo $item | awk -F: {'print $1'};`
|
||||||
|
echo DISKS: $disk
|
||||||
|
|
||||||
|
# get gstab disks
|
||||||
|
disksFstab=$(for item in `cat /etc/fstab | awk -F" " {'print $1'}`; do echo $item; done)
|
||||||
|
set -A disksFstabArray $disksFstab
|
||||||
|
echo FSTAB: ${disksFstabArray[@]}
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
# if ! grep -qs '/mnt/usb ' /proc/mounts; then
|
||||||
|
# for devfile in `ls -1 /dev/sd[a-z]`; do
|
||||||
|
# log "[ OK ] found usb disk $devfile"
|
||||||
|
# if mount ${devfile}1 /mnt/usb; then
|
||||||
|
# [ -d /mnt/usb/backup ] || mkdir /mnt/usb/backup
|
||||||
|
# log "[ OK ] mount ${devfile}1 to /mnt/usb"
|
||||||
|
# return 0
|
||||||
|
# else
|
||||||
|
# log "[FAIL] mount ${devfile}1 to /mnt/usb"
|
||||||
|
# return 1
|
||||||
|
# fi
|
||||||
|
# done
|
||||||
|
# else
|
||||||
|
# log "[FAIL] /mnt/usb already mounted"
|
||||||
|
# return 1
|
||||||
|
# fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#function copy_files {
|
||||||
|
# if [ -d "/mnt/$SRC" ]; then
|
||||||
|
# log "[ OK ] found dir /mnt/$SRC"
|
||||||
|
# cd /mnt/$SRC
|
||||||
|
# log "------- BACKUP STARTED --------"
|
||||||
|
# ls -l /mnt/usb/backup
|
||||||
|
# if [ "$DELETE" == "yes" ]; then
|
||||||
|
# rsync -av --stats \
|
||||||
|
# --temp-dir=/tmp \
|
||||||
|
# --human-readable \
|
||||||
|
# --no-owner \
|
||||||
|
# --no-group \
|
||||||
|
# --exclude '.*' \
|
||||||
|
# --delete \
|
||||||
|
# ./ /mnt/usb/backup | tee $LOGFILE
|
||||||
|
# else
|
||||||
|
# #rsync -av -e "ssh -c arcfour" \
|
||||||
|
# rsync -av --stats \
|
||||||
|
# --temp-dir=/tmp \
|
||||||
|
# --human-readable \
|
||||||
|
# --no-owner \
|
||||||
|
# --no-group \
|
||||||
|
# ./ /mnt/usb/backup | tee $LOGFILE
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# echo >> $LOGFILE
|
||||||
|
# log "------- BACKUP ENDED ----------"
|
||||||
|
# cd /root
|
||||||
|
# return 0
|
||||||
|
# else
|
||||||
|
# log "[FAIL] found dir /mnt/$SRC"
|
||||||
|
# cd /root
|
||||||
|
# return 1
|
||||||
|
# fi
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#function umount_usb {
|
||||||
|
# cd /root
|
||||||
|
#
|
||||||
|
# USBTOTAL=$(df -h | grep sda1 | awk '{print $2}')
|
||||||
|
# USBUSAGE=$(df -h | grep sda1 | awk '{print $5}')
|
||||||
|
# USBUSED=$(df -h | grep sda1 | awk '{print $3}')
|
||||||
|
# USBFREE=$(df -h | grep sda1 | awk '{print $4}')
|
||||||
|
#
|
||||||
|
# log " USB : ${USBUSAGE} from ${USBTOTAL}"
|
||||||
|
# log " USB : used: ${USBUSED} / free: ${USBFREE}"
|
||||||
|
#
|
||||||
|
# cp $LOGFILE /mnt/usb/
|
||||||
|
#
|
||||||
|
# umount /dev/sd[a-z]1 -l &> /dev/null
|
||||||
|
# umount /mnt/usb -l &> /dev/null
|
||||||
|
#
|
||||||
|
# if fusermount -u /mnt/$SRC ; then
|
||||||
|
# log "[ OK ] umount remote dir"
|
||||||
|
# countfiles=$(find /mnt/$SRC -type f | wc -l)
|
||||||
|
# if [ $countfiles -eq 0 ] ; then
|
||||||
|
# rm -rf /mnt/$SRC
|
||||||
|
# log "[ OK ] deleting temporary dir"
|
||||||
|
# else
|
||||||
|
# log "[FAIL] deleting temporary dir"
|
||||||
|
# fi
|
||||||
|
# else
|
||||||
|
# log "[FAIL] umount remote dir"
|
||||||
|
# fi
|
||||||
|
#}
|
||||||
|
|
||||||
|
#function send_mail {
|
||||||
|
# cat $LOGFILE | s-nail -v \
|
||||||
|
# -r "$mail_from" \
|
||||||
|
# -s "Backup Report" \
|
||||||
|
# -S mta=smtps://$mail_server_host:$mail_server_port \
|
||||||
|
# -S smtp-use-starttls \
|
||||||
|
# -S smtp-auth=login \
|
||||||
|
# -S smtp-auth-user="$mail_auth_user" \
|
||||||
|
# -S smtp-auth-password="$mail_auth_pass" \
|
||||||
|
# -S ssl-verify=ignore \
|
||||||
|
# "$mail_to"
|
||||||
|
#}
|
||||||
|
|
||||||
|
function mount_remote {
|
||||||
|
if ping -q -c1 -w2 $HOST > /dev/null 2>&1; then
|
||||||
|
log "[ OK ] ping $HOST"
|
||||||
|
case $PROTO in
|
||||||
|
smb )
|
||||||
|
if mount_smb; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
ssh )
|
||||||
|
if mount_ssh; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
usage ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
log "[FAIL] ping $HOST"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#commands=(rsync sshfs swaks)
|
||||||
|
#for command in "${commands[@]}"
|
||||||
|
#do
|
||||||
|
# if ! command -v ${command} > /dev/null; then
|
||||||
|
# echo -e "Command \e[96m$command\e[39m not found"
|
||||||
|
#
|
||||||
|
# exit
|
||||||
|
# fi
|
||||||
|
#done
|
||||||
|
|
||||||
|
SRC=$$
|
||||||
|
mkdir /mnt/$SRC
|
||||||
|
|
||||||
|
while [ "$1" != "" ]; do
|
||||||
|
PARAM=`echo $1 | awk -F= '{print $1}'`
|
||||||
|
VALUE=`echo $1 | awk -F= '{print $2}'`
|
||||||
|
case $PARAM in
|
||||||
|
--help)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
--mount)
|
||||||
|
usb_mount
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--umount)
|
||||||
|
usb_umount
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--title)
|
||||||
|
TITLE=$VALUE
|
||||||
|
;;
|
||||||
|
--proto)
|
||||||
|
PROTO=$VALUE
|
||||||
|
;;
|
||||||
|
--host)
|
||||||
|
HOST=$VALUE
|
||||||
|
;;
|
||||||
|
--dir)
|
||||||
|
DIR=$VALUE
|
||||||
|
;;
|
||||||
|
--user)
|
||||||
|
USR=$VALUE
|
||||||
|
;;
|
||||||
|
--pass)
|
||||||
|
PASS=$VALUE
|
||||||
|
;;
|
||||||
|
--delete)
|
||||||
|
DELETE=$VALUE
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "ERROR: unknown parameter \"$PARAM\""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -z "$TITLE" ] && echo -e "missing ${RED}--title${NORM} option" && exit
|
||||||
|
[ -z "$PROTO" ] && echo -e "missing ${RED}--proto${NORM} option" && exit
|
||||||
|
[ -z "$DIR" ] && echo -e "missing ${RED}--dir${NORM} option" && exit
|
||||||
|
[ -z "$USR" ] && echo -e "missing ${RED}--user${NORM} option" && exit
|
||||||
|
[ -z "$HOST" ] && echo -e "missing ${RED}--host${NORM} option" && exit
|
||||||
|
if [ "$PROTO" = "smb" ]; then
|
||||||
|
[ -z "$PASS" ] && echo -e "missing ${RED}--pass${NORM} option" && exit
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
LOG="/root/backup"
|
||||||
|
LOGFILE="${LOG}_${TITLE}.log"
|
||||||
|
|
||||||
|
#mail_from="backup@mycompany.org"
|
||||||
|
#mail_to="admin@gmail.com"
|
||||||
|
#mail_header="Subject: Backup Report"
|
||||||
|
#mail_auth_user="backup@mycompany.org"
|
||||||
|
#mail_auth_pass="abc123"
|
||||||
|
#mail_server_host="xyz123.siteground.eu"
|
||||||
|
#mail_server_port="465"
|
||||||
|
|
||||||
|
echo > $LOGFILE
|
||||||
|
if mount_remote; then
|
||||||
|
if mount_usb; then
|
||||||
|
log "[ OK ] backup finished"
|
||||||
|
# if copy_files; then
|
||||||
|
# log "[ OK ] backup finished"
|
||||||
|
# else
|
||||||
|
# log "[FAIL] backup finished"
|
||||||
|
# fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#umount_usb
|
||||||
|
#send_mail
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user