From 5754709de29f4d36ed5668bbb4c9261a14acd72c Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 18 Jan 2017 09:09:41 +0100 Subject: [PATCH] change: backup bash conventionen --- backup-einfach.sh | 20 ++++++-------- backup.sh | 70 ++++++++++++++++++----------------------------- 2 files changed, 35 insertions(+), 55 deletions(-) diff --git a/backup-einfach.sh b/backup-einfach.sh index 33aa9f0..e445622 100755 --- a/backup-einfach.sh +++ b/backup-einfach.sh @@ -1,32 +1,28 @@ #!/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 diff --git a/backup.sh b/backup.sh index e9d39e7..2bbda44 100755 --- a/backup.sh +++ b/backup.sh @@ -1,4 +1,7 @@ #!/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" @@ -9,17 +12,15 @@ wunschanzahl=20 # 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 @@ -27,51 +28,38 @@ do # 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 @@ -79,18 +67,14 @@ 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 -- 2.39.5