Brauche Tipps für ein Script

Status
Für weitere Antworten geschlossen.

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Hallo,

als Linux-Laie wäre ich dankbar wenn ihr mir mit einem vermutlich ziemlich einfachen Script etwas auf die Sprünge helfen könntet. :)

Ich habe auf Linux noch nie einen Script geschrieben (und auf Windows auch nicht allzu oft) und keine Ahnung wie ich das hier anfange. Könnt ihr mir dazu evtl. ein für Anfänger geeignetes Tutorial empfehlen?

Der Script soll eigentlich nur zwei Dinge tun: Zuerst einen Ordner verschieben und dann einen Ordner löschen, und zwar:

Per Time Backup wird per Zeitplan ein Backup angelegt, dieses befindet sich dann zum Beispiel in dem Ordner:

/Volume2/TimeBackup/DS1513-HA-0131324BCC4/task7/20140321-0305/data1

wobei der rote Teil des Pfades der das Sicherungsdatum repräsentiert sich natürlich täglich ändert und darum dem Script nicht bekannt ist.

Nun soll der Script den Ordner "data1" verschieben in den existierenden Ordner /volume2/backupsource und dort den Ordner data1 von gestern überschreiben. Dann soll er den nun leeren, roten Ordner unter /Volume2/TimeBackup/DS1513-HA-0131324BCC4/task7/ löschen.

Damit ist der Script fertig, er soll nur am nächsten Tag wieder das selbe tun.

Sollten im Ordner /Volume2/TimeBackup/DS1513-HA-0131324BCC4/task7/ je mehrere Versionen, also Ordner vorhanden sein, dann sollte data1 aus dem letzten der Ordner entnommen und dann alle Ordner gelöscht werden.

Vom Ordner /volume2/backupsource wird data1 dann mittels Onboard-Volumendatensicherung endgültig als Versionen auf Blockebene gesichert.



Falls es jemand interessiert WARUM ich das machen will:

Ich will einen 900 GB Truecrypt-Container als tägliche Versionen sichern. Zu dem Zweck will ich Time-Backup und Onboard-Volumen-Datensicherung hintereinander schalten, denn ich brauche vom Time Backup die Snapshot-Fähigkeit und von der Volumensicherung die Fähigkeit Versionen auf Blockebene zu herzustellen.

Mit anderen Worten: Würde ich die Originaldaten direkt mit der Volumensicherung sichern, dann dürfte ich mangels Snapshot-Fähigkeit während des Kopierens nicht hinein schreiben, daher zuerst Time Backup. Würde ich aber mit Time Backup die Versionen anlegen lassen, dann würde mir mangels der Fähigkeit nur geänderte Blöcke zu sichern das Datenvolumen in wenigen Tagen mein Volume sprengen, denn bei der kleinsten Änderung legt Time Backup die 900 GB-Datei neu an. Schalte ich aber beides hintereinander, dann habe ich beide Probleme gelöst.

Manuell habe ich das ausprobiert, es funktioniert. Zur Automation fehlt mir nun nur noch der Script zum Verschieben, den ich dann im Aufgabenplaner anlegen könnte.
 
Zuletzt bearbeitet:

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Nur als Hinweis: Der Snapshot vom TB hilft Dir hier überhaupt nix. So lange TrueCrypt nicht weiß (und das tut es nun mal nicht), dass jetzt ein Snapshot gemacht wird, gibt es auch keine Garantie, dass der Container gerade auch in einem konsistenten Zustand ist.

Ansonsten http://www.synology-forum.de/showthread.html?19102-Shell-Workshop-(1) als Basiseinführung.
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Danke dir!

Der Snapshot vom TB hilft Dir hier überhaupt nix. So lange TrueCrypt nicht weiß (und das tut es nun mal nicht), dass jetzt ein Snapshot gemacht wird, gibt es auch keine Garantie, dass der Container gerade auch in einem konsistenten Zustand ist.
Mir ist klar, dass ich manuell darauf achten muss, dass direkt beim Starten von TB der Container nicht gemounted ist. Das meinst du doch, oder?

Nach fertiger Definition des Snapshots wird TB dann aber einige Stunden laufen, und während dessen kann ich den Container schon wieder mounten und schreiben, das wird das TB-backup nicht beeinflussen, oder wie siehst du das?
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Bisher habe ich so viel zu Stande bekommen:

#!/bin/sh
TBPATH="/volume2/temp/TimeBackup/DS1513-HA_00113224BBC4/task_7"
LOGFILE="/volume2/BackupSource/bkcopy.txt"
echo "Hello World!" > $LOGFILE

cd $TBPATH
if [ $? != "0" ]
then
echo "Verzeichnis nicht gefunden"
echo "Verzeichnis nicht gefunden" >>$LOGFILE
exit 2
fi;
Z=0
echo "Gefundene Unterverzeichnisse"
find . -mindepth 1 -maxdepth 1

for I in `find . -mindepth 1 -maxdepth 1`
do
VZNAME$Z="$I"
Z=$(($Z+1))
done
echo $VZNAME0
echo $VZNAME1
echo $VZNAME2
echo $VZNAME3
Ausgabe:
HA30.png

Wie man vielleicht sieht, versuche ich in der roten Zeile in VZNAME0, VZNAME1 usw. die Namen der Unterverzeichnisse einzusammeln, das scheint aber nicht zu funktionieren. Kann mir jemand sagen warum bzw. was ich ändern muss?
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
So, vorbehaltlicher endgültiger Tests glaube ich es sollte funktionieren.

Wäre cool, wenn da nochmal ein Wissender drauf schauen könnte.

Ich habe das Script nun so realisiert:

Die letzte und vorletzte Version in Time Backup bleibt erhalten. Da die letzte evtl. gerade erst entseht bleibt so mindestens eine komplette Version erhalten. Dies verhindert dass die Folgeversion unnötig geschrieben wird falls sich nichts geändert hat.

Die drittletzte Version wird verschoben um per Volumen-Datensicherung als Version verarbeitet zu werden.

Alle älteren Versionen werden gelöscht.

Rich (BBCode):
TBPATH="/volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_8"
BKPATH="/volume2/V1Backup/dataport"
LOGFILE="/volume2/V1Backup/bkcopy/bkcopy.txt"
echo "V1 Backup" $(date) > $LOGFILE

cd $TBPATH
if [ $? != "0" ]
then
	echo "Verzeichnis nicht gefunden" >>$LOGFILE
	exit 2
fi;
Z=0
echo "Gefundene Unterverzeichnisse" >>$LOGFILE
find . -mindepth 1 -maxdepth 1 | sort >>$LOGFILE

VZ0="";
VZ1="";
VZ2="";
VZ3="";

for I in `find . -mindepth 1 -maxdepth 1 | sort`
do
	VZ3="$VZ2"
	VZ2="$VZ1"
	VZ1="$VZ0"	
	VZ0="$I"	
	if [ "$VZ3" != "" ] 
	then
		echo "Loesche" $VZ3 >>$LOGFILE
		rm -r $VZ3
	fi	
	Z=$(($Z+1))
done

if [ "$VZ2" != "" ] 
then
	cd $VZ2
	echo "Loesche" $BKPATH >>$LOGFILE
        rm -r $BKPATH
        mkdir $BKPATH
	echo "Verschiebe Unterverzeichnisse von" $VZ2  >>$LOGFILE
	mv -f * $BKPATH
	cd $TBPATH
	echo "Loesche" $VZ2 >>$LOGFILE
	rm -r $VZ2    		
fi	
if [ "$VZ1" != "" ] 
then
	echo "Behalte" $VZ1 >>$LOGFILE
fi
if [ "$VZ0" != "" ] 
then
	echo "Behalte" $VZ0 >>$LOGFILE
fi
more $LOGFILE
 
Zuletzt bearbeitet:

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Falls es jemand interessieren sollte:

Hier die (vorläufig) endgültige Version:

Rich (BBCode):
TBPATH="/volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_9"
BKPATH="/volume2/V1Backup/dataport"
#LOGFILE="/volume1/datamain/bkcopy/bkcopy.txt"

echo "-------------------------------------------------------------------------------------"
echo "Verschieben von TimeBackup Daten" $(date) 
echo " "
echo "Quelle: TimeBackup Job" $TBPATH 
echo "Ziel:" $BKPATH
echo " "

cd $TBPATH
if [ $? != "0" ]
then
	echo "TimeBackup Verzeichnis nicht gefunden" $TBPATH
	exit 2
fi;

echo "Gefundene TimeBackup Unterverzeichnisse" 
find . -mindepth 1 -maxdepth 1 | sort 

echo " "
echo "Aktionen" 

VZ0="";
VZ1="";
VZ2="";
VZ3="";
Z=0

for I in `find . -mindepth 1 -maxdepth 1 | sort`
do
	VZ3="$VZ2"
	VZ2="$VZ1"
	VZ1="$VZ0"	
	VZ0="$I"	
	if [ "$VZ3" != "" ] 
	then
		echo "Loesche" $VZ3 
		rm -r $VZ3
	fi	
	Z=$(($Z+1))
done

if [ "$VZ2" != "" ] 
then
	cd $VZ2
	echo "Loesche Inhalt von" $BKPATH 
        rm -r $BKPATH
        mkdir $BKPATH
	echo "Verschiebe Inhalt von" $VZ2 "nach" $BKPATH
	mv -f * $BKPATH
	cd $TBPATH
	echo "Loesche" $VZ2 
	rm -r $VZ2    		
fi	
if [ "$VZ1" != "" ] 
then
	echo "Behalte" $VZ1 
fi
if [ "$VZ0" != "" ] 
then
	echo "Behalte" $VZ0
fi

Sie erzeugt folgende Ausgabe:
-------------------------------------------------------------------------------------
Verschieben von TimeBackup Daten Sat Mar 22 12:43:43 CET 2014

Quelle: TimeBackup Job /volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_9
Ziel: /volume2/V1Backup/dataport

Gefundene TimeBackup Unterverzeichnisse
./20140322-1234
./20140322-1235
./20140322-1242
./20140322-1243

Aktionen
Loesche ./20140322-1234
Loesche Inhalt von /volume2/V1Backup/dataport
Verschiebe Inhalt von ./20140322-1235 nach /volume2/V1Backup/dataport
Loesche ./20140322-1235
Behalte ./20140322-1242
Behalte ./20140322-1243
-------------------------------------------------------------------------------------
Verschieben von TimeBackup Daten Sat Mar 22 12:44:56 CET 2014

Quelle: TimeBackup Job /volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_9
Ziel: /volume2/V1Backup/dataport

Gefundene TimeBackup Unterverzeichnisse
./20140322-1242
./20140322-1243

Aktionen
Behalte ./20140322-1242
Behalte ./20140322-1243
Beim ersten Durchlauf waren 4 TimeBackup Versionen vorhanden (die waren identisch, was aber im Prinzip keinen Unterschied macht). Davon wurden die beiden letzten beibehalten, die drittletzte verschoben zur Versionssicherung und die älteste gelöscht.

Beim zweiten Durchlauf waren dann nur noch die beiden letzten Versionen vorhanden, also keine Aktion.

Frage:

Von Time Backup bin ich damit ja nun gut entkoppelt. Jetzt würde ich gerne noch verhindern, dass der Script ausgeführt wird während das Onboard-Versionsbackup gerade läuft. Ist das machbar?

Momentan sollte das auf Grund des Zeitplans zwar nicht passieren, aber eine explizite Abfrage im Script wäre natürlich besser.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat