davidsc
Goto Top

Bash Skript Backup

Guten Morgen zusammen,

ich habe leider keine Erfahrung im skripten, daher benötige ich eure Hilfe.


Systemumfeld und Problem:
SLES 12

12 Systeme werden unter dem Verzeichnis /Backup gesichert.
In jedem Unterverzeichnis sind jeweils 2 Voll und 6 Inkrementelle Backups
1 x Voll Backup Aktuell und 1 x Vorgänger
Vorgänger Backup wird kurzzeitig behalten im Falle, das dass aktuelle Backup fehlschlägt.
Das heißt wenn das aktuelle Backup da ist, kann das alte direkt gelöscht werden.
Hier liegt auch schon das Problem ich weiß nicht wie ich da vorgehen soll.


cd /Backup/

   E11
   EB1
   EBP
   EBQ
   ESM
   IME
   IMP
   P11
   POP
   POQ
   POT
   Q11


cd /Backup/E11

Mar 12 22:17 E11FullBackup_1
Mar  5 22:59 E11FullBackup_2
Mar 13 19:00 E11IncBa_DI
Mar  8 19:01 E11IncBa_DO
Mar  9 19:01 E11IncBa_FR
Mar  7 19:01 E11IncBa_MI
Mar 10 19:01 E11IncBa_SA
Mar 11 19:01 E11IncBa_SO
Mar 10 07:50 E11LOG


Vielen Dank
Gruß
David

Content-Key: 367981

Url: https://administrator.de/contentid/367981

Printed on: April 26, 2024 at 06:04 o'clock

Member: Arano
Arano Mar 14, 2018 at 15:51:24 (UTC)
Goto Top
Hallo,

was spricht denn gegen das einfache löschen nach dem Erstellen des Backups ?
rm -r /Backup/E11/E11FullBackup_2


~Arano
Member: DavidSc
DavidSc Mar 15, 2018 at 06:35:38 (UTC)
Goto Top
Hallo,

das ist genau das wovon ich weg möchte, weil das bei 12 Systemen unnötig viel arbeit ist.

- David
Member: Arano
Arano Mar 15, 2018 at 08:31:18 (UTC)
Goto Top
Moin,

Ähm?
Dann sucht du eher etwas das "von alleine" die einzelnen Verzeichnisse abläuft - etwa so:
for strSystem in `ls /Backup`; do
    # kontrollausgabe
    echo "rm -r \"/Backup/$strSystem/${strSystem}Full2\"";  
    # echtes löschen
    #rm -r "/Backup/$strSystem/${strSystem}Full2"; 
done;


~Arano
Member: DavidSc
DavidSc Mar 15, 2018 at 10:04:15 (UTC)
Goto Top
Danke für deine Antwort

genau so nur mit der Logik, das dass ältere Backup gelöscht wird...

Kann man vlt. sagen:

Prüfe ob Full1 und 2 existiert
wenn Full1 älter ist als Full2 dann lösche Full1
wenn Full2 älter ist als Full1 dann lösche Full2

oder würdest du das eher mit Datum abfrage machen ?
Member: DavidSc
DavidSc Mar 15, 2018 at 10:20:06 (UTC)
Goto Top
*
#Prüfen ob die Verzeichnisse da sind

         if E11FullBackup_1 && E11FullBackup_2  in `ls /Backup`; then
         echo E11FullBackup_1 und E11FullBackup_2 existieren

#Prüfen welches der Backups aktueller ist

       if [[ E11FullBackup_1 -nt E11FullBackup_2  ]]; then
       echo E11FullBackup_1 ist aktueller als E11FullBackup_2 


for strSystem in `ls /Backup`; do

    #löschen 

    rm -r "/Backup/$strSystem/${strSystem}Full2";  


sowas in der art ?
Member: DavidSc
DavidSc Mar 15, 2018 at 11:43:48 (UTC)
Goto Top
ich hab mal bisschen rumgebastelt...

was sagst du dazu ?

#Prüfen ob die Verzeichnisse da sind

if *FullBackup_1 && *FullBackup_2  in `ls /Backup`; then
   
	echo *FullBackup_1 und *FullBackup_2 existieren

#Prüfen welches der Backups aktueller ist

if [[ *FullBackup_1 -nt *FullBackup_2  ]]; then
 
	 echo *FullBackup_1 ist aktueller als *FullBackup_2 

#Löschen

for strSystem in `ls /Backup`; do

	if [[ *FullBackup_1 -nt *FullBackup_2  ]]; then
	
   		 rm -r "/Backup/$strSystem/${strSystem} *FullBackup1";  

	else
	
   		 rm -r "/Backup/$strSystem/${strSystem} *FullBackup2";  
Member: Arano
Solution Arano Mar 15, 2018 at 13:01:56 (UTC)
Goto Top
Hi,

ähm.. ich sage mal nur Danke! zu deinem Versuch face-smile
Immerhin hast du mich so auf -ot -nt aufmerksam gemacht.

Ein Backup hast du ?
Verwendung auf eigene Gefahr ;)
Noch wird das rm nur ausgegeben, wenn du die Zeile 25 entkommentierst, ist es scharf und es wird ohne Nachfrage gelöscht !

Noch eine kleine Erklärung:
7: Mit der for-Schleife wird der Inhalt des Backupverzeichnisses (ls) einzeln verarbeitet. Ein durchlauf mit jedem "Inhalt".
11+12: Es werden die Pfade zusammen gesetzt aus dem aktuellen Schleifenwert ($strSystem) und den Verzeichnisnamen.
14: Prüfe ob beide existieren (und Verzeichnisse sind)
17-22: Ermittle das ältere (-ot) von beiden
25: Lösche das ältere
26+27: Wenn Prüfung in Zeile 14 fehlschlägt, melde es.
29: Ende der for-Schleife bzw. starte nächsten Durchlauf wenn möglich.

Für jedes "System" in /Backup:
  • teste ob beide FullBackups vorhanden sind
  • ermittle das ältere
  • lösche es

#!/bin/bash
# vim: set ts=4:
#

strDir="/Backup";  

for strSystem in `ls "$strDir"`; do  
	# kontrollausgabe
	echo -n "Teste: $strSystem...  ";  
	# Baue Pfade
	strFB1="$strDir/$strSystem/${strSystem}FullBackup_1";  
	strFB2="$strDir/$strSystem/${strSystem}FullBackup_2";  
	# Teste existens
	if [ -d "$strFB1" ] && [ -d "$strFB2" ]; then  
		echo -n "2 existieren, lösche älteres...  ";  
		# Ermittle älteres
		strAelteres="";  
		if [ $strFB1 -ot $strFB2 ]; then
			strAelteres="$strFB1";  
		else
			strAelteres="$strFB2";  
		fi;
		# lösche älteres
		echo "rm -r \"$strAelteres\"";  
		#rm -r "$strAelteres";  
	else
		echo "nur 1 FullBackup vorhanden !";  
	fi;
done;

exit 0;

Testausgabe:
arano@COMPUTER006:~/test$ ./test.sh
Teste: aa...  2 existieren, lösche älteres...  rm -r "/home/arano/test/aa/aaFull1"
Teste: bb...  2 existieren, lösche älteres...  rm -r "/home/arano/test/bb/bbFull2"
Teste: cc...  2 existieren, lösche älteres...  rm -r "/home/arano/test/cc/ccFull1"
Teste: dd...  nur 1 FullBackup vorhanden !
Teste: test.sh...  nur 1 FullBackup vorhanden !
arano@COMPUTER006:~/test$ 
Du siehst das "test.sh" bei mir im gleichen Verzeichnis liegt und deswegen auch "getestet" wird. Die Prüfung auf die Unterverzeichnisse schlägt natürlich fehlt. Nicht schön aber auch nicht schlimm.


~Arano
Member: DavidSc
DavidSc Mar 15, 2018 at 13:40:36 (UTC)
Goto Top
Ich danke dir vielmals für deine Hilfe !!! face-smile