Automatisiertes Backup auf externe RAID

B

bikkuri

Aktives Mitglied
Thread Starter
Dabei seit
11.03.2009
Beiträge
3.990
Reaktionspunkte
504
Ich habe ein RAID-Array an meinem Mac Mini, das bestimmte Daten speichert. Diese Daten werden manuell abgelegt.
Zur Datensicherung betreibe ich einen weiteren Array, der aber nicht immer angeschaltet ist.
Daten werden mit ChronoSync auf den zweiten Array uebertragen. Dafuer habe ich verschiedene Action-Files, die diese Aufgabe ausfuehren.
Jetzt habe ich vor, das alles zu automatisieren. D.h. ich will synchronisieren, sobald sich einer der bertoffenen Ordner aendert. Weiterhin soll die Aktion nicht ausgefuehrt werden, wenn das zweite Laufwerk nicht in Betrieb ist.

Wie kann ich das am kluegsten bewerkstelligen? Automator, Apple Script, Shell Script oder?

Danke!
 
So könnte ein AppleScript aussehen (ungetestet):

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#0016B0][b]adding folder items to[/b][/color] [color=#3F7F00]this_folder[/color] [color=#0016B0]after receiving[/color] [color=#3F7F00]these_items[/color]
	[b]if[/b] "Name_von_RAID2" [b]is[/b] [b]in[/b] ([color=#0016B0][b]list disks[/b][/color]) [b]then[/b] [color=#4C4D4D]--Prüft, ob das Volume gemountet ist[/color]
		[b]tell[/b] [color=#0000FF][i]application[/i][/color] "ChronoSync" [color=#4C4D4D]--Sync wird gestartet[/color]
			[color=#0000FF][b]activate[/b][/color]
			[color=#0000FF][b]open[/b][/color] [color=#0000FF][i]alias[/i][/color] ":Pfad:Zum:Backup.sync"
			[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#3F7F00]Synchronize[/color]
			[b]repeat[/b] [b]while[/b] [color=#3F7F00]syncStatus[/color] [b]of[/b] [color=#0000FF][i]document[/i][/color] 1 [b]is[/b] [b]not[/b] 0 [color=#4C4D4D]--warten, bis der Sync fertig ist[/color]
			[b]end[/b] [b]repeat[/b]
			[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#0000FF][b]save[/b][/color] [color=#4C4D4D]--sichern und schließen[/color]
			[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#0000FF][b]close[/b][/color]
			[color=#0000FF][b]quit[/b][/color]
		[b]end[/b] [b]tell[/b]
	[b]end[/b] [b]if[/b]
[b]end[/b] [color=#0016B0][b]adding folder items to[/b][/color][/size][/FONT]

Wenn dir eine Ordneraktion zu unsicher ist, dann kannst du das Skript auch per cronjob regelmäßig aufrufen und die Ordner überprüfen lassen.
 
  • Gefällt mir
Reaktionen: bikkuri
Danke, werde ich mir mal ansehen. Ich melde mich dann wieder.
 
Soweit kann ich das script, denke ich, nachvollziehen. Was ich nicht verstehe, ist, "this_folder" u. "these_items". Sind die beiden Platzhalter fuer den Pfad des betroffenen Ordners bzw. der betroffenen Dateien? Oder einfach generische Begriffe, und ich muss den Pfad vorher festlegen?
Weiterhin, sind "these items" Dateien, die ich naeher spezifizieren muss?

Ich versuche mich hin und wieder in Apple Script etc. reinzuarbeiten, aber mir fehlt immer noch das grobe 101. Sorry also fuer etwaige unbeholfene Fragen.
 
"on adding folder items to this_folder after receiving these_items" ist der Folder Action Handler. Ein Handler führt Code aus, wenn eine bestimmte Situation eintritt, es gibt z.B. on run, on open usw.
Der Folder Action Handler "on adding folder items" tritt in Aktion, wenn Dateien in den Ordner hinzugefügt werden. Dabei ist "this_folder" ein alias zum Ordner und "these_items" eine alias Liste zu den Dateien, die hinzugefügt wurden. Wie der Variablenname ist, ist dabei völlig egal, man könnte auch schreiben "on adding folder items to Mein_Ordner after receiving Meine_Dateien".
Du musst daran also nichts ändern. Das einzige, was du ändern solltest, sind 2 Werte:

"Name_von_RAID2": Hier musst du den Namen deines 2. RAIDs eintragen, so wie es im Finder erscheint.

":pfad:Zum:Backup.sync": Hier muss der Pfad zu der Backup Datei eingetragen werden. Statt / wird in AppleScript : verwendet.
 
  • Gefällt mir
Reaktionen: bikkuri
Wow, klappt perfekt!

Vielen Dank!
 
Jetzt habe ich doch eine Frage.

Wie kann man es erreichen, dass das script auch Aenderungen in den subfoldern erkennt? D.h. ich habe ein action folder setup auf Ordner A mit jenem script, wobei Ordner A einen Unterordner B (C,D et cetera) hat.
 
Ich würde das ganze dann nicht mit Folder Actions machen, sondern das Skript die Ordnergröße in regelmäßigen Abständen überprüfen lassen:

Code:
[FONT="Verdana"][size=2][b]property[/b] [color=#3F7F00]pathToFolder[/color] : ""
[b]property[/b] [color=#3F7F00]folderSize[/color] : ""

[b]if[/b] [color=#3F7F00]pathToFolder[/color] [b]is[/b] "" [b]then[/b]
	[b]set[/b] [color=#3F7F00]pathToFolder[/color] [b]to[/b] [color=#0016B0][b]choose folder[/b][/color]
[b]end[/b] [b]if[/b]

[b]repeat[/b]
	[b]if[/b] "Name_von_RAID2" [b]is[/b] [b]in[/b] ([color=#0016B0][b]list disks[/b][/color]) [b]then[/b] [color=#4C4D4D]--Prüft, ob das Volume gemountet ist[/color]
		[b]set[/b] [color=#3F7F00]newFolderSize[/color] [b]to[/b] [color=#0016B0][b]do shell script[/b][/color] "du -sk " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]pathToFolder[/color] & " | cut -f1"
		[b]if[/b] [color=#3F7F00]folderSize[/color] [b]is not[/b] [b]equal to[/b] [color=#3F7F00]newFolderSize[/color] [b]then[/b]
			[b]tell[/b] [color=#0000FF][i]application[/i][/color] "ChronoSync" [color=#4C4D4D]--Sync wird gestartet[/color]
				[color=#0000FF][b]activate[/b][/color]
				[color=#0000FF][b]open[/b][/color] [color=#0000FF][i]alias[/i][/color] ":Pfad:Zum:Backup.sync"
				[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#3F7F00]Synchronize[/color]
				[b]repeat[/b] [b]while[/b] [color=#3F7F00]syncStatus[/color] [b]of[/b] [color=#0000FF][i]document[/i][/color] 1 [b]is[/b] [b]not[/b] 0 [color=#4C4D4D]--warten, bis der Sync fertig ist[/color]
				[b]end[/b] [b]repeat[/b]
				[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#0000FF][b]save[/b][/color] [color=#4C4D4D]--sichern und schließen[/color]
				[b]tell[/b] [color=#0000FF][i]document[/i][/color] 1 [b]to[/b] [color=#0000FF][b]close[/b][/color]
				[color=#0000FF][b]quit[/b][/color]
			[b]end[/b] [b]tell[/b]
			[b]set[/b] [color=#3F7F00]folderSize[/color] [b]to[/b] [color=#3F7F00]newFolderSize[/color]
		[b]end[/b] [b]if[/b]
	[b]end[/b] [b]if[/b]
	[color=#0016B0][b]delay[/b][/color] 5
[b]end[/b] [b]repeat[/b][/size][/FONT]

Ich habe das hier mit einer repeat-Dauerschleife gemacht, sodass alle 5 Sekunden die Größe des Ordners überprüft wird. Etwas effizienter wäre ein launchd-Eintrag, falls du dich damit auskennst.

Das Skript kannst du als Programm speichern (wieder nach Anpassung) und dann in die Anmeldeobjekte ziehen, dann wird es gestartet, wenn du dich am PC anmeldest.
 
  • Gefällt mir
Reaktionen: bikkuri
Zurück
Oben Unten