]> gitweb.hhaalo.de Git - simple-backup.git/commitdiff
change: backup bash conventionen
authorBastian Dehn <hhaalo@arcor.de>
Wed, 18 Jan 2017 08:09:41 +0000 (09:09 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 18 Jan 2017 08:56:19 +0000 (09:56 +0100)
backup-einfach.sh
backup.sh

index 33aa9f04f94bd13b14c3d937bccd8fb8df54910f..e4456221ac5e3ea12fba237cc33ce4d613fd43c3 100755 (executable)
@@ -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
index e9d39e7b1d70acdaffad328a69ede81237d41310..2bbda44bbd0b386c0cbec807213d1d514840d901 100755 (executable)
--- 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