#!/bin/bash
+### Script macht ein Backup von verschiedenen Pfaden
+### auf verschiedenen Rechner und Syncronisiert das Backup
# Informationen fuer den Sicherungsserver
sicherungspfad="/images/backup"
sicherungsordner="einfach-sicherung"
# Sicherungsordner auf dem Sicherungsserver erstellen
-if [ ! -d $sicherungspfad/$sicherungsordner ]
-then
+if [ ! -d $sicherungspfad/$sicherungsordner ]; then
mkdir $sicherungspfad/$sicherungsordner
fi
-for remoterechner in $(cat rechner.txt)
-do
+for remoterechner in $(cat rechner.txt); do
remoteuser="root"
# Sicherungsordner vom Remote-Host
# auf dem Sicherungsserver erstellen
- if [ ! -d $sicherungspfad/$sicherungsordner/$remoterechner ]
- then
+ if [ ! -d $sicherungspfad/$sicherungsordner/$remoterechner ]; then
mkdir $sicherungspfad/$sicherungsordner/$remoterechner
fi
# Sicherung fuer die jeweils angegebenen Pfade
# in pfad.txt erstellen inkl. logs
- for pfad in $(cat pfad-$remoterechner.txt)
- do
- echo
- echo "Rechner $remoterechner; Pfad $pfad wird gesichert"
- echo
- rsync -avR --delete --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $pfad | sed 's/\//-/g').log $remoteuser@$remoterechner:$pfad $sicherungspfad/$sicherungsordner/$remoterechner
+ for pfad in $(cat pfad-$remoterechner.txt); do
+ printf "\nRechner %s; Pfad %s wird gesichert\n\n" "$remoterechner" "$pfad"
+ rsync --archive --verbose --relative --delete --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $pfad | sed 's/\//-/g').log $remoteuser@$remoterechner:$pfad $sicherungspfad/$sicherungsordner/$remoterechner
done
done
#!/bin/bash
+### Script legt ein Backup mit dem heutigen Datum an
+### macht Hardlinks auf unveränderte Daten zum
+### vorhaerigen Backup
# Informationen fuer den Sicherungsserver
sicherungspfad="/images/backup"
# und Vorsicherungsordnername ermitteln
sicherungsordner="$(date +%Y-%m-%d)"_"$sicherungsname"
vorsicherungsordner="$(date -d "1 Day ago" +%Y-%m-%d)"_"$sicherungsname"
-if [ ! -d $sicherungspfad/$vorsicherungsordner ]
-then
- tmpordner=$(find $sicherungspfad -maxdepth 1 -type d -name "*_"$sicherungsname"" | sort | tail -n 1)
+if [ ! -d $sicherungspfad/$vorsicherungsordner ]; then
+ tmpordner=$(find $sicherungspfad -maxdepth 1 -type d -name "*_"$sicherungsname"" | sort | tail --lines=1)
vorsicherungsordner=${tmpordner##*/}
fi
# Sicherungsordner auf dem Sicherungsserver erstellen
mkdir $sicherungspfad/$sicherungsordner
-for remoterechner in $(cat rechner.txt)
-do
+for remoterechner in $(cat rechner.txt); do
remoteuser="root"
# Sicherungsordner fuer den Remote-Host erstellen
mkdir $sicherungspfad/$sicherungsordner/$remoterechner
# Sicherung fuer die jeweils angegebenen Pfade
# in pfad.txt erstellen inkl. logs
# bzw. KVM HD Sicherung erstellen
- for pfad in $(cat pfad-$remoterechner.txt)
- do
- if [ "$pfad" == "virsh" ]
- then
+ for pfad in $(cat pfad-$remoterechner.txt); do
+ if [ "$pfad" == "virsh" ]; then
# Sicherung von KVM virtuellen Maschinen
# Online VMs werden heruntergefahren, gesichert und dann wieder hochgefahren
# Offline VMs werden direkt gesichert
onlineVM=$(ssh $remoteuser@$remoterechner virsh list --name)
offlineVM=$(ssh $remoteuser@$remoterechner virsh list --all | grep 'shut off' | awk '{print $2}')
- for VM in $onlineVM
- do
- echo "Rechner $remoterechner; $VM ist online"
- echo "Fahre $VM herunter"
- echo
+ for VM in $onlineVM; do
+ printf "Rechner %s; %s ist online\n" "$remoterechner" "$VM"
+ printf "Fahre %s herunter\n\n" "$VM"
ssh $remoteuser@$remoterechner virsh shutdown $VM | while [ "$(ssh $remoteuser@$remoterechner virsh list --name | grep $VM)" != "" ]; do sleep 2 ; done
Disks=$(ssh $remoteuser@$remoterechner virsh domblklist $VM --details | grep disk | awk '{print $4}')
- for Disk in $Disks
- do
- echo "Disk $Disk von $VM wird gesichert"
- echo
- rsync -avR --progress --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $Disk | sed 's/\//-/g').log --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$Disk $sicherungspfad/$sicherungsordner/$remoterechner
+ for Disk in $Disks; do
+ printf "Disk %s von %s wird gesichert\n\n" "$Disk" "$VM"
+ rsync --archive --verbose --relative --progress --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $Disk | sed 's/\//-/g').log --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$Disk $sicherungspfad/$sicherungsordner/$remoterechner
done
- echo
- echo "Fahre $VM hoch"
+ printf "\nFahre %s hoch\n" "$VM"
ssh $remoteuser@$remoterechner virsh start $VM
done
- for VM in $offlineVM
- do
- echo "Rechner $remoterechner; $VM ist offline"
- echo
+ for VM in $offlineVM; do
+ printf "Rechner %s; %s ist offline\n\n" "$remoterechner" "$VM"
Disks=$(ssh $remoteuser@$remoterechner virsh domblklist $VM --details | grep disk | awk '{print $4}')
- for Disk in $Disks
- do
- echo "Disk $Disk von $VM wird gesichert"
- echo
- rsync -avR --progress --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $Disk | sed 's/\//-/g').log --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$Disk $sicherungspfad/$sicherungsordner/$remoterechner
+ for Disk in $Disks; do
+ printf "Disk %s von %s wird gesichert\n\n" "$Disk" "$VM"
+ rsync --archive --verbose --relative --progress --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $Disk | sed 's/\//-/g').log --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$Disk $sicherungspfad/$sicherungsordner/$remoterechner
done
done
else
# Dateipfade werden gesichert
# Es werden Dateien mit *.qcow2 und *.raw ingnoriert
- echo
- echo "Rechner $remoterechner; Pfad $pfad wird gesichert"
- echo
- rsync -avR --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $pfad | sed 's/\//-/g').log --filter="- *.qcow2" --filter="- *.raw" --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$pfad $sicherungspfad/$sicherungsordner/$remoterechner
+ printf "\nRechner %s; Pfad %s wird gesichert\n\n" "$remoterechner" "$pfad"
+ rsync --archive --verbose --relative --log-file=$sicherungspfad/$sicherungsordner/$remoterechner/backup-$(echo $pfad | sed 's/\//-/g').log --filter="- *.qcow2" --filter="- *.raw" --link-dest=$sicherungspfad/$vorsicherungsordner/$remoterechner $remoteuser@$remoterechner:$pfad $sicherungspfad/$sicherungsordner/$remoterechner
fi
done
done
# Die Anzahl der Backups wird ermittelt
# Alte Backups werden geloesch
# falls mehr als die Wunschanzahl vorhanden sind
-backupanzahl=$(ls -d $sicherungspfad/*/ | grep "_$sicherungsname" | sort | wc -l)
+backupanzahl=$(ls --directory $sicherungspfad/*/ | grep "_$sicherungsname" | sort | wc --lines)
loeschanzahl=$(($backupanzahl - $wunschanzahl))
if [ $backupanzahl -gt $wunschanzahl ]
then
- echo
- echo "Es sind $backupanzahl Sicherungen vorhanden."
- echo "Es werden $loeschanzahl Sicherungen gelöscht."
- echo
- ls -d $sicherungspfad/*/ | grep "_$sicherungsname" -m $loeschanzahl | xargs rm -r
+ printf "\nEs sind %i Sicherungen vorhanden.\n" $backupanzahl
+ printf "Es werden %i Sicherungen gelöscht.\n\n" $loeschanzahl
+ ls -d $sicherungspfad/*/ | grep "_$sicherungsname" --max-count=$loeschanzahl | xargs rm --recursive
else
- echo
- echo "Es sind $backupanzahl Sicherungen vorhanden."
- echo
+ printf "\nEs wird %i Sicherungen vorhanden.\n" $backupanzahl
fi