Table of Contents

Einfaches Backup

Auslöser ist folgender Artikel (wobei an unserer Schule auch sonst schon einfach Daten verschwunden sind, bei 1700 Benutzern kommt das schon mal vor):

Einrichten

Erst mal müssen Sie herausfinden, wo genau die Daten gespeichert sind, an denen Sie Interesse haben. Das ist unter Windows nicht einfach, da Daten an verschiedenen Orten gespeichert werden.

Auf dem Datenträger Ihrer Wahl, legen Sie eine Datei .bash Datei an, z.B. stickbackup.bash für ein Backup auf einen Stick. Passen Sie dazu folgendes Script an:

stickbackup.bash
# Achtung: Das Skript muss von der Kommandozeile im Verzeichnis
# gestartet werden, wohin das Backup gemacht werden soll. 
 
makeBackup() {
    local source="$1"
    echo "Backup $source"
    cp -vru "$source" .
    echo "Fertig mit $source"
}
 
makeBackup "/c/Users/Ivo.Bloechliger/OneDrive - Kt. SG BLD/Informatik"
# Hier weitere Verzeichnisse sichern...

git-bash in bestimmtem Ordner öffnen, Verzeichnispfade finden

bash stickbackup.bash

starten.

Hintergrund: der cp-Befehl

Der cp-Befehl kopiert Dateien (lokal). Folgende Varianten sind möglich:

cp DATEI ZIELNAME                  # Macht eine Kopie von DATEI mit Namen ZIELNAME
cp DATEI ZIELNORDNER               # Kopiert die DATEI in den ZIELORNDER
cp DATEI1 DATEI2 ...  ZIELORDNER   # Kopiert die Dateien DATEI1, DATEI2, etc. in den ZIELORDNER

Optionen

Die komplette Liste der Optionen ist auf der man-page zu finden.

Alternativen

Für das Backup auf einen Server empfiehlt sich das Tool rsync, das ähnlich wie cp funktioniert, aber eben auch übers Netz. Plus rsync wurde auf Geschwindigkeit optimiert, dass wirklich nur geänderte Dateien übertragen werden.

Starten aus dem File-Explorer

Windows kann so konfiguriert werden, dass .bash-Dateien direkt mit git-bash gestartet werden können. Dazu muss aber erst der Pfad der git-bash ermittelt werden. Ein Möglichkeit dazu führt über das Start-Menu, Rechts-klick auf den git-bash Icon, «Open containing folder», dort auf Eigenschaften von git-bash (ist nur eine Verknüpfung), und dort kann der effektive Pfad der git-bash.exe Datei kopiert werden.

Dann Rechts-Klick auf eine .bash -Datei, Ausführen mit, Programm auswählen und dort mit den Pfad der git-bash eingeben.

Wenn das funktoniert hat, Rechts-Klick auf eine .bash-Datei und dort einstellen, dass .bash-Dateien mit git-bash geöffnet werden.

Das nächste Problem ist, dass das aktuelle Verzeichnis bei der Ausführung nicht jenes ist, in dem die .bash Datei liegt. Mit folgenden Ergänzungen klappt es aber:

# Pfad von dieser Datei ist in $0
# Konvertieren nach Unix-Pfad (d.h. /d anstatt D:\)
unixname=`cygpath "$0"`
# Nur das Verzeichnis dieser Datei
target=`dirname $unixname`
 
makeBackup() {
    local source="$1"
    echo "Backup $source"
    echo " -> Ziel $target"
    cp -vru "$source" "$target"
    echo "Fertig mit $source"
}
 
makeBackup "/c/Users/Ivo.Bloechliger/OneDrive - Kt. SG BLD/Informatik"
# Hier weitere Verzeichnisse sichern...
 
 
# Warten auf Enter, damit noch angezeigt wird, ausser bei Start auf der Kommandozeile
if [ "$target" != "." ] 
then
    echo "Bitte [Enter] drücken..."
    read
fi

Automatisiertes Backup

Ziel ist es, ein Pythonprogramm zu schreiben, das ständig überprüft, ob der Backup-Stick eingesteckt ist und wenn ja, das Backup ausführt. Dieses Programm soll jeweils automatisch beim Anmelden gestartet werden.

Das python-Programm sieht wie folgt aus (die beiden Pfade müssen wohl noch angepasst werden, siehe die Screencasts unten)

autobackup.py
import os
import subprocess
import time
 
gitbash = r"C:\Program Files\Git\git-bash.exe"   # Eventuell anpassen!
backupscript = r"D:\stickbackup2.bash"           # Eventuell anpassen!
 
while True:
    # Check if stick is present
    if os.path.exists(backupscript):
        print("Stick present")
        # Backup starten
        print("Starte backup...")
        cmd = [gitbash, backupscript]
        subprocess.call(cmd)
        time.sleep(30*60)  # Halbe Stunde
    else:
        print("nix da!")
    time.sleep(10)   

Verankerung in der Windows Aufgabenplanung