166 lines
5.4 KiB
Bash
Executable File
166 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
################################################################################
|
|
# #
|
|
# Copyright (C) 2014 Jack-Benny Persson <jack-benny@cyberinfo.se> #
|
|
# #
|
|
# This program is free software; you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation; either version 2 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program; if not, write to the Free Software #
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
|
# #
|
|
################################################################################
|
|
|
|
## Variables ##
|
|
# Define some settings for the script
|
|
BackupDir="dummyfiles" # This is were Proxmox places it's backup files
|
|
TapeDev="/dev/st0" # The device for your Tape drive
|
|
ExtHDD="/dev/sdd1" # The external harddrive
|
|
MntPoint="/mnt" # Where to mount the external harddrive
|
|
ExtHDDdir="Nebula_backups" # Where to put the backup files on the ext. drive
|
|
VMs="???" # Specify which VMs to backup (??? for all VMs)
|
|
|
|
# Backup to
|
|
Where="Tape&HDD" # Tape / HDD / Tape&HDD
|
|
|
|
# Define our binaries in case we don't have a sensible environment
|
|
Ls="/bin/ls"
|
|
Tar="/bin/tar"
|
|
Sort="/usr/bin/sort"
|
|
Tail="/usr/bin/tail"
|
|
Uniq="/usr/bin/uniq"
|
|
Mount="/bin/mount"
|
|
Umount="/bin/umount"
|
|
Mt="/bin/mt"
|
|
Cp="/bin/cp"
|
|
Mkdir="/bin/mkdir"
|
|
|
|
# Get current date & time for markers etc
|
|
CurTime=`date "+%F %X ->"`
|
|
|
|
## Sanity checks ##
|
|
# We need to run as root (for mounting, write to tape etc)
|
|
if [ $EUID -ne 0 ]; then
|
|
echo "$CurTime Missing root privileges, aborting" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
|
|
# Check out binaries
|
|
for i in $Ls $Tar $Sort $Tail $Uniq $Mount $Umount $Mt $Cp $Mkdir; do
|
|
test -x $i
|
|
if [ $? -ne 0 ]; then
|
|
echo "$CurTime Can't execute $i, aborting!" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
done
|
|
|
|
# Check that BackupDir exists
|
|
if [ ! -d $BackupDir ]; then
|
|
echo "$BackupDir dosen't seem to exist, aborting" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
|
|
# Check that our tape drive is on and connected and a tape is inserted
|
|
if [ "$Where" = "Tape" ] || [ "$Where" = "Tape&HDD" ]; then
|
|
if [ ! -e $TapeDev ]; then
|
|
echo "$CurTime No tape device present at $TapeDev" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
|
|
${Mt} -f ${TapeDev} status | grep DR_OPEN &> /dev/null
|
|
if [ $? -eq 0 ]; then
|
|
echo "$CurTime No tape in tape drive $TapeDev" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
fi
|
|
|
|
# Check that our external harddrive is connected and mount point exist
|
|
if [ "$Where" = "HDD" ] || [ "$Where" = "Tape&HDD" ]; then
|
|
if [ ! -b $ExtHDD ]; then
|
|
echo "$CurTime No external harddrive connected to $ExtHDD" \
|
|
> /dev/stderr
|
|
exit 2
|
|
elif [ ! -d $MntPoint ]; then
|
|
echo "$CurTime Mount point $MntPoint doesn't exist, aborting" \
|
|
> /dev/stderr
|
|
exit 2
|
|
fi
|
|
fi
|
|
|
|
|
|
## Main ##
|
|
cd ${BackupDir} # We do this to avoid slashes etc
|
|
|
|
# Mount our external harddisk if we want to make backups to it
|
|
if [ "$Where" = "HDD" ] || [ "$Where" = "Tape&HDD" ]; then
|
|
$Mount $ExtHDD $MntPoint
|
|
if [ $? -ne 0 ]; then
|
|
echo "$CurTime Couldn't mount $ExtHDD on ${MntPoint}, aborting"\
|
|
> /dev/stderr
|
|
exit 2
|
|
fi
|
|
|
|
if [ ! -d "${MntPoint}/${ExtHDDdir}" ]; then
|
|
printf "$CurTime ${MntPoint}/${ExtHDDdir} dosen't exist" \
|
|
> /dev/stderr
|
|
printf ", aborting\n" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
fi
|
|
|
|
# Get the latest Proxmox backup date
|
|
Dates=`$Ls | awk -F - '{ print $4 }'`
|
|
Latest=`echo "$Dates" | sort | uniq | tail -n1`
|
|
|
|
# Start the actual backup/copy of files
|
|
if [ "$Where" = "HDD" ] || [ "$Where" = "Tape&HDD" ]; then
|
|
#echo "Backup to external harddrive $ExtHDD" # Uncomment for testing
|
|
#$Ls vzdump-*-${VMs}-${Latest}* # and debugging
|
|
|
|
# Create a separate directory for each backup and copy the files
|
|
if [ -d ${MntPoint}/${ExtHDDdir}/${Latest} ]; then
|
|
printf "${MntPoint}/${ExtHDDdir}/${Latest} already exist, "
|
|
printf "aborting\n" > /dev/stderr
|
|
exit 2
|
|
fi
|
|
$Mkdir ${MntPoint}/${ExtHDDdir}/${Latest}
|
|
echo "Copying files to $ExtHDD"
|
|
$Cp -v vzdump-*-${VMs}-${Latest}* ${MntPoint}/${ExtHDDdir}/${Latest}
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Something went wrong with backuping up to $ExtHDD"
|
|
exit 2
|
|
fi
|
|
|
|
# Cleanup (unmount drive)
|
|
$Umount $ExtHDD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Couln't unmount $ExtHDD, please do it manually" \
|
|
> /dev/stderr
|
|
fi
|
|
fi
|
|
|
|
if [ "$Where" = "Tape" ] || [ "$Where" = "Tape&HDD" ]; then
|
|
#echo "Backup to tape drive $TapeDev" # Uncomment for testing
|
|
#$Ls vzdump-*-${VMs}-${Latest}* # and debugging
|
|
echo ""
|
|
echo "Writing tape backup"
|
|
tar cvf $TapeDev vzdump-*-${VMs}-${Latest}*
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Something went wrong when backing up to tape drive" \
|
|
> /dev/stderr
|
|
fi
|
|
fi
|
|
|
|
exit 0
|