Tach,
Irgendwelche Einwände zu rsync. Falls nein würde ich mich da mal tiefer einarbeiten um eine Ergebnisse hier zu präsentieren.
Mit rsync würde ich einen Ansatz mit Hard Links nutzen; dann muss man nur inkrementell sichern, aber jedes Backup ist ein vollständiges.
Was meinst du mir tar, das ich doch einfach nur ein Programm zu packen von Dateien, was hat das mit Datensicherung zu tun?
Nein, tar ist ein Programm um Daten auf ein Band zu schreiben (tar=tape archive) und damit das originäre UNIX-Backup-Programm.
Wie oben schon gesagt sehe ich großes Potential bei rsync in der Kommandozeile, sricht irgendwas dagegen sich da mal intensiv einzuarbeiten?
Wenn du die Zeit hast, nein; rsync ist ein großartiges Tool.
Meine gegenwärtige Lösung sieht grob so aus:
#/usr/bin/env bash
function log(){
echo "`date --iso-8601=seconds` [$HOSTNAME]: $1"
}
BACKUP_DIR="/backup/data"
# ionice is not available on very old systems and doesn't work in openvz-virtualisation
grep "envID" /proc/self/status >/dev/null; if [ $? -eq 1 ] || [ `grep "envID" /proc/self/status|cut -d":" -f2` -eq 0 ] && [ -f /usr/bin/ionice ];then
IONICE="ionice -c3"
fi
RSYNC_OPTIONS='-aDHXS --prune-empty-dirs'
# locking
LOCK=/var/run/backup.pid
touch $LOCK
read lastPID < $LOCK
[ ! -z "$lastPID" -a -d /proc/$lastPID ] && echo "already running" >&2 && exit
echo $$ > $LOCK
# random wait period to alleviate the TOCTTOU with the ps command later on
sleep $[ ( $RANDOM % 600 ) ]s
# let's go
log "starting backup"
# remember the starting date
DATE=`date +%F`
# find the last backup
LINKDEST=
ssh $HOSTNAME@backup "ls $BACKUP_DIR/$HOSTNAME/" && LINKDEST="--link-dest=$BACKUP_DIR/$HOSTNAME/"`ssh $HOSTNAME@backup "ls -1 $BACKUP_DIR/$HOSTNAME/|tail -1"`"/"
# stuff to do before the backup
[ -e /etc/backup/before.sh ] && bash /etc/backup/before.sh
log "preliminary script finished"
# global waiting; only two backups are allowed to run at any given time
while [ `ssh $HOSTNAME@backup "/opt/bin/procps-ps -A -o args"|grep rsync|sort|uniq|wc -l` -ge 3 ]; do
sleep $[ ( $RANDOM % 300 ) ]s 5m
done
log "starting rsync"
# run the backup
$IONICE rsync \
$RSYNC_OPTIONS \
--rsync-path='/opt/bin/rsync --fake-super' \
$LINKDEST \
--exclude-from /etc/backup/exclude \
--include-from /etc/backup/include \
--include='*/' \
--exclude='*' \
/ \
$HOSTNAME@backup:$BACKUP_DIR/$HOSTNAME/$DATE
log "finished rsync"
#end locking
rm $LOCK
Dazu kommen dann noch Dinge, die sich um die Logdateien kümmern, alte Backups löschen, Configdateien, Scripte die jeweils vor dem Backup ausgeführt werden und Datenbankdumps etc erstellen, …
mfg
Woodfighter