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):
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
- 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).
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
- 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.
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
- Erstens müssen die Pfade im obigen Python angepasst werden. Den absoluten Pfad zur git-bash kann wie folgt ermittelt werden: https://fginfo.ksbg.ch/~ivo/videos/informatik/22-23/07-absoluter-pfad-der-gitbash.mp4
- Die Verankerung in der Windows Aufgabenplanung kann wie folgt erledigt werden: https://fginfo.ksbg.ch/~ivo/videos/informatik/22-23/08-python-programm-in-aufgabenplanung-von-windows.mp4