added backup scripts
This commit is contained in:
parent
461c639da9
commit
f02f7d03d3
2 changed files with 176 additions and 0 deletions
59
homebackup.sh
Executable file
59
homebackup.sh
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# (C) 2010 Stefan Brand <seiichiro0185.org>
|
||||
#
|
||||
# homebackup.sh: incremental homedir backup using rsync and hardlinks
|
||||
#
|
||||
# usage:
|
||||
# local usage: homebackup.sh /backups/home
|
||||
# remote usage: homebackup.sh user@someserver:/backups/home
|
||||
#
|
||||
# more info is also here: http://www.seiichiro0185.org/doku.php/linux:backupscripts
|
||||
|
||||
_EXCLUDEFILE="$HOME/.hbexcludes"
|
||||
_BASEDIR="$1"
|
||||
|
||||
if [ "${_BASEDIR}" == "" ]
|
||||
then
|
||||
echo "The first argument has to be the base backup directory!"
|
||||
echo "exiting"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -e "${_EXCLUDEFILE}" ]
|
||||
then
|
||||
touch "${_EXCLUDEFILE}"
|
||||
fi
|
||||
|
||||
_SSH=$(echo "${_BASEDIR}" | grep -e '.*@.*:.*' | sed -e 's/:.*$//g')
|
||||
|
||||
if [ "${_SSH}" == "" ]
|
||||
then
|
||||
# Local Backup
|
||||
|
||||
DIRNAME="$(basename $HOME)-$(date +%Y%m%d-%H%M)"
|
||||
BACKUPDIR=$(echo "${_BASEDIR}/${DIRNAME}/" | sed -e "s#//#/#g")
|
||||
LAST=$(echo "${_BASEDIR}/last" | sed -e "s#//#/#g")
|
||||
|
||||
mkdir -p "$BACKUPDIR"
|
||||
|
||||
rsync -av --exclude-from="${_EXCLUDEFILE}" --link-dest="../last" "$HOME/" "$BACKUPDIR"
|
||||
|
||||
cd "$BACKUPDIR"
|
||||
ln -snf "${DIRNAME}" "$LAST"
|
||||
|
||||
else
|
||||
# Remote Backup
|
||||
|
||||
DIRNAME="$(basename $HOME)-$(date +%Y%m%d-%H%M)"
|
||||
REMOTEDIR=$(echo "${_BASEDIR}" | sed -e 's/^.*://g')
|
||||
BACKUPDIR=$(echo "${REMOTEDIR}/${DIRNAME}/" | sed -e "s#//#/#g")
|
||||
|
||||
ssh ${_SSH} mkdir -p "$BACKUPDIR"
|
||||
|
||||
rsync -av --exclude-from="${_EXCLUDEFILE}" --link-dest="../last/" "$HOME/" "${_SSH}:${BACKUPDIR}"
|
||||
|
||||
ssh ${_SSH} "cd \"${BACKUPDIR}\" && ln -sfn \"${DIRNAME}\" \"${REMOTEDIR}\"/last"
|
||||
|
||||
fi
|
||||
|
117
sysbackup-tar.sh
Executable file
117
sysbackup-tar.sh
Executable file
|
@ -0,0 +1,117 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# (C) Stefan Brand <seiichiro@seiichiro0185.org> 2008
|
||||
#
|
||||
# sysbackup-tar.sh: little script to backup your running system into a tar-file
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
# SYSMOUNTS - this array should include all system partitions. If your system for example has
|
||||
# /, /boot, /usr and /opt on different partitions it should look like this:
|
||||
# SYSMOUNTS=( "/" "/boot" "/usr" "/opt" )
|
||||
# Please note: partitions need to be given in correct order, meaning / has always to be the first
|
||||
# If you for example have /usr and /usr/local on seperate partitions you will have to give / first,
|
||||
# then /usr and last /usr/local
|
||||
|
||||
SYSMOUNTS=( "/" "/boot" )
|
||||
|
||||
# DOMOUNT - this array should include all partitions that are not mountet by default, like /boot
|
||||
# Syntax is the same as for SYSMOUNTS
|
||||
|
||||
DOMOUNTS=( "/boot" )
|
||||
|
||||
# EXCLUDES - this array contains patterns for files/directories that should not be included in
|
||||
# the backup. An example for this is tmp/*
|
||||
|
||||
EXCLUDES=( "tmp/*" "var/cache/pacman/*" )
|
||||
|
||||
## End Configuration
|
||||
|
||||
## Program -- NO CHANGES ARE NEEDED AFTER THIS LINE --
|
||||
|
||||
_BASEDIR="$1"
|
||||
_OPTNAME="${2:-backup}"
|
||||
|
||||
## Checks
|
||||
|
||||
if [ $UID -ne 0 ]
|
||||
then
|
||||
echo "You have to be root to run this!"
|
||||
echo "exiting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${_BASEDIR}" == "" || "${_BASEDIR}" == "--help" || "${_BASEDIR}" == "-h" || "${_BASEDIR}" == "-?" ]]
|
||||
then
|
||||
echo "USAGE: $0 <backup dir> [<backup name>]"
|
||||
echo "exiting"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d "${_BASEDIR}" ]
|
||||
then
|
||||
echo "ERROR: No valid Backup directory given!"
|
||||
echo "USAGE: $0 <backup dir> [<backup name>]"
|
||||
echo "exiting"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
## Functions
|
||||
|
||||
function prepare()
|
||||
{
|
||||
mkdir /tmp/backup$$
|
||||
|
||||
for index in $(seq 0 $(( ${#DOMOUNTS[@]} - 1 )))
|
||||
do
|
||||
mount "${DOMOUNTS[$index]}"
|
||||
done
|
||||
|
||||
for index in $(seq 0 $(( ${#SYSMOUNTS[@]} - 1 )))
|
||||
do
|
||||
mount -o ro,bind "${SYSMOUNTS[$index]}" "/tmp/backup$$${SYSMOUNTS[$index]}"
|
||||
done
|
||||
|
||||
for index in $(seq 0 $(( ${#EXCLUDES[@]} - 1 )))
|
||||
do
|
||||
echo "${EXCLUDES[$index]}" >> /tmp/excludes$$
|
||||
done
|
||||
|
||||
BACKUPFILE=$(echo "${_BASEDIR}/${_OPTNAME}-system-$(date +%Y%m%d).tar.gz" | sed -e "s#//#/#g")
|
||||
}
|
||||
|
||||
function dobackup()
|
||||
{
|
||||
cd /tmp/backup$$/
|
||||
tar -cvzpf "${BACKUPFILE}" -X /tmp/excludes$$ *
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
cd /
|
||||
for index in $(seq $(( ${#SYSMOUNTS[@]} - 1 )) -1 0)
|
||||
do
|
||||
UMOUNT=$(echo "/tmp/backup$$${SYSMOUNTS[$index]}" | sed -e 's#/$##')
|
||||
umount "$UMOUNT"
|
||||
done
|
||||
|
||||
|
||||
for index in $(seq $(( ${#DOMOUNTS[@]} - 1 )) -1 0)
|
||||
do
|
||||
umount "${DOMOUNTS[$index]}"
|
||||
done
|
||||
|
||||
rmdir /tmp/backup$$
|
||||
rm -f /tmp/excludes$$
|
||||
}
|
||||
|
||||
## Main Program
|
||||
|
||||
trap cleanup TERM INT
|
||||
|
||||
prepare
|
||||
dobackup
|
||||
sleep 3
|
||||
cleanup
|
||||
exit 0
|
Loading…
Reference in a new issue