lehrkraefte:blc:informatik:glf22:backup

Einfaches Backup

  • Daten in der Cloud sind nur «ziemlich sicher», aber nicht auf Ihrem Gerät.
  • Daten, die lokal auf Ihrem Gerät gespeichert sind, sind wahrscheinlich auf einem verschlüsselten Datenträger. Wenn Sie den Schlüssel nicht haben, sind die Daten futsch. Hier finden Sie eine Anleitung, wie Sie Ihren Schlüssel sichern können.
  • Ziel: Zusätzliches, lokales Backup auf dem Datenträger Ihrer Wahl.

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

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...
  • In Ordner navigieren, Rechts-Klick, «git-bash here»:

  • Dort das Backup mit
bash stickbackup.bash

starten.

  • In der git-bash kann mit dem Kommando pwd wird der aktuelle Pfad angezeigt werden (oder kopieren aus der FileExplorer Kopfzeile sollte auch gehen).

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
  • Verzeichnisse werden normalerweise nicht kopiert, ausser man gibt die -r Option (rekursiv) an, dann werden auch komplette Ordner mit allen Unterordnern kopiert.
  • Normalerweise wird nichts angezeigt. Mit -v werden die kopierten Dateien ausgegeben.
  • Es werden immer alle Dateien kopiert, ausser man gibt die -u Option (update) an, dann werden nur jene Dateien kopiert, die noch nicht existieren oder deren Originaldatei ein neueres Datum hat.
  • Mit --backup=simple wird von existierenden Dateien ein Kopie erstellt (gleicher Name, mit ~ am Schluss).
  • Mit --backup=numbered wird von exstierenden Dateien eine nummerierte Kopie erstellt.

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

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.

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)   
  • lehrkraefte/blc/informatik/glf22/backup.txt
  • Last modified: 2022/11/30 10:30
  • by Ivo Blöchliger