Inhaltsverzeichnis

11.11 Sicherung von Projekten

Der Autor arbeitet seit vielen Jahren unter http://www.gambas-buch.de an der Online-Version des Gambas-Buches. Daher ist die Anzahl der bearbeiteten Gambas-Projekte in den über 30 Buch-Kapiteln sehr groß. Diese Projekte werden deshalb von Anfang an regelmäßig auf mehrere mobile Datenträger gesichert.

11.11.1 Variante 1

In unregelmäßigen Abständen werden die Gambas-Projekte auf DVD gebrannt und gut verwahrt.

11.11.2 Variante 2

Für die regelmäßige Sicherung der Gambas-Projekte wird das Programm 'Datensicherungswerkzeug' (→ Mint 17.3) eingesetzt, das einfach zu bedienen ist und mit den erprobten Einstellungen ein Archiv auf dem Ziel-Datenträger speichert:

B1

Abbildung 11.11.2.1: Datensicherungswerkzeug in Mint 17.3

Hinweise:

B2

Abbildung 11.11.2.2: Archiv-Datei

11.11.3 Variante 3

Favorit bei der Sicherung der Gambas-Projekte ist immer noch ein kleines Shell-Skript für das Programm 'rsync'. Das Skript synchronisiert den Ordner mit allen Gambas-Projekten gegen den (gleichnamigen) Ordner auf einem mobilen Datenträger. Alle Änderungen im Projekt-Ordner werden in einem Backup-Ordner gespeichert, so dass zum Beispiel auch gelöschte Projekte dort mit gesichert werden. Es ist von Vorteil, dass man in der Ordner-Struktur der Sicherung jederzeit nach interessierenden Projekten suchen kann. Der Bash-Quelltext für das Skript (projekte2usbstick.sh) ist erfreulich kurz:

[1] #!/bin/sh
[2] #
[3] # FARB-WERTE:
[4] RO="\033[31m"                 # Schriftfarbe rot
[5] FR="\033[1m\033[31m"          #
[6] FG="\033[1m\033[42m\033[37m"  # Schriftfarbe fett + weiß + grüner Hintergrund
[7] NO="\033[0m"                  # Schriftfarbe normal
[8] #
[9] echo
[10] STICK="16_GB_P" # Geräte-Label USB-Stick (16GB)
[11] #
[12] df -k | grep /media/$USER/$STICK 1>/dev/null 2>/dev/null
[13] if [ $? -gt 0 ];
[14] then
[15]   echo "${RO}Der USB-Stick $STICK muss eingehängt sein!";
[16]   echo "Das Sicherungsprogramm wird deshalb beendet!${NO}";
[17]   echo
[18]   echo "Beenden mit ENTER!";
[19]   read a
[20]   exit 1;
[21] else
[22] echo
[23] echo "${FG}Sicherung Gambas-Projekte auf USB-Stick $STICK mit ENTER starten ...${NO}"
[24] echo "__________________________________________________________________________";
[25] echo
[26] read a
[27] # Muster:
[28] # sudo rsync -ab --progress --delete --backup-dir=BACKUP-DIR SOURCE-DIR/ TARGET-DIR 
[29] sudo rsync -ab --progress --delete --backup-dir=/media/$USER/$STICK/GB3Backup $HOME/GB3Projekte/ /media/$USER/$STICK/GB3Projekte  
[30] #
[31] echo
[32] echo "__________________________________________________________________________";
[33] echo 
[34] echo "${FR}Ende der Sicherung auf $STICK.${NO}"
[35] echo
[36] echo "${FR}Der USB-Stick $STICK wird anschließend ausgehängt!${NO}"
[37] echo "${FR}Abschluss mit ENTER!${NO}"
[38] read b
[39] fi
[40] echo
[41] echo "${FG}Unbedingt warten, bis der USB-Stick $STICK ausgehangen worden ist!${NO}";
[42] echo 
[43] umount /media/$USER/$STICK

Hinweise:

$ sudo rsync -ab --dry-run --progress --delete --backup-dir=/media/$USER/$STICK/GB3Backup $HOME/GB3Projekte/ /media/$USER/$STICK/GB3Projekte

Es folgt die (stark gekürzte) Ausgabe für einen Trocken-Synchronisationsdurchlauf :

Sicherung Gambas-Projekte auf USB-Stick 16_GB_P mit ENTER starten ...
_____________________________________________________________________

[sudo] password for hans: 

sending incremental file list
created directory /media/hans/16_GB_P/GB3Projekte
Created backup_dir /media/hans/16_GB_P/GB3Backup/
./
CSV2XML_WRITER/
CSV2XML_WRITER/.directory
CSV2XML_WRITER/.gitignore
...
CSV2XML_WRITER/Symbols/form_icon.png
CSV2XML_WRITER/Symbols/projekt_icon.png
DATA2XML_WRITER/
DATA2XML_WRITER/.directory
...
DBDATA2XML_WRITER/Symbols/report32.png

sent 3,478 bytes  received 476 bytes  7,908.00 bytes/sec
total size is 424,536  speedup is 107.37 (DRY RUN)
_____________________________________________________________________

Ende der Sicherung auf 16_GB_P.
Der USB-Stick 16_GB_P wird anschließend ausgehängt!
Abschluss mit ENTER!

Unbedingt warten, bis der USB-Stick 16_GB_P ausgehangen worden ist!

Wenn der USB-Stick für die Sicherung nicht eingehängt ist, so wird das erkannt und angezeigt sowie das Skript beendet:

B3

Abbildung 11.11.3.1: Fehleranzeige

Wenn alle Tests ohne Fehler durchgeführt worden sind, dann können Sie Ihre Gambas-Projekte sichern. Nach einem Synchronisationsdurchlauf sind die ausgewählten Ordner auf der Festplatte (Quelle) auch 1:1 auf dem USB-Stick (Ziel). Veränderungen befinden sich im Backup-Ordner auf dem USB-Stick.

Diese Zeile* zur synchronen Sicherung eines Verzeichnisses – mit Backup – leistet die Hauptarbeit:

$ sudo rsync -ab --progress --delete --backup-dir=/media/$USER/$STICK/GB3Backup $HOME/GB3Projekte/ /media/$USER/$STICK/GB3Projekte
Option - ParameterBeschreibung
-aListe erprobter Optionen (→ Manual)
-bBackups werden erstellt.
–dry-run (Kurzform: -n)Es wird eine Synchronisation simuliert. Es erfolgt ein Trocken-Testlauf, der nichts wirklich synchronisiert!
–progressDer Fortschritt während des Synchronisierens wird angezeigt.
–deleteDateien, die in der Quelle nicht mehr existieren, werden auch im Ziel gelöscht.
–backup-dir=
/media/$USER/$STICK/GB3BackupWas nicht synchronisiert werden kann, weil verschoben oder im Original gelöscht, wird im Backup-Verzeichnis aufgehoben.
$HOME/GB3Projekte/Quellverzeichnis im Home-Verzeichnis auf Festplatte. Achten Sie auf das Slash-Zeichen am Ende!
/media/$USER/$STICK/GB3ProjekteZielverzeichnis auf dem USB-Stick im Wurzelverzeichnis.

Tabelle 11.11.3.1 : Übersicht zu Optionen und Parametern in der Kommando-Zeile*

Sie können jederzeit weitere Zeilen in den Skript-Quelltext einfügen, wenn weitere Verzeichnisse mit ihren Unterverzeichnissen und den darin enthaltenen Dateien synchronisiert gesichert werden sollen.

11.11.4 Variante 4

Diese Variante der Datensicherung wurde in Form eines Gambas-Frontends für das Konsolen-Programm 'rsync' realisiert. Diese Anwendung erlaubt das Anlegen und Editieren einer Jobliste für das Synchronisieren von Verzeichnissen oder einzelner Dateien.

Die optionale Anwendung von Root-Rechten bei Shell-Hintergrundprozesse wird durch die Option '-S' des 'sudo'-Kommandos erreicht, die eine Umleitung der Passwortabfrage in die Error-Routine des Prozesses bewirkt, wo das Root-Passwort an den Prozess übergeben werden kann:

Synchronisataion

Abbildung 11.11.4.1: Gambas-Frontend 'gb.rsync'

Beispiel für den Start eines Shell-Prozesses mit Root-Rechten:

SCommand = "LC_ALL=en_GB.utf8 sudo -S rsync -ab --progress --delete /home/user/Documents /media/user/STICK"
 
' Start rsync process with shell command
hShellProcess = Shell sCommand For Read Write As "rsyncShellProcess"

Die Übergabe und Überprüfung des Root-Passwortes erfolgt in der Error-Ereignis-Routine des Shell-Prozesses:

Public Sub rsyncShellProcess_Error(sErr As String)
 
  Dim PW As String
 
  If sErr Like "*password*" Then
     PW = TextBoxPW.Text
     Print #hShellProcess, PW & gb.LF
     PW = ""
  Else If sErr Like "*try again*" Then
     If hShellProcess
        hShellProcess.Close()
        hShellProcess.Kill()
     Endif
     Message.Error(("Wrong sudo password!") & GB.LF & ("Please try again."), "OK")
   Else
     ErrorList &= sErr & gb.Lf
  Endif
End

Da es bei parallel ablaufenden 'rsync'-Hintergrundprozessen zu unberechenbaren Abläufen kommen kann, sorgt das Programm für sequenzielle Shell-Aufrufe. Nur so ist gewährleistet, dass der vollständige Abschluss aller Synchronisierungsaufgaben zuverlässig erkannt wird und auftretende Fehlermeldungen der Reihe nach erfasst werden.

Als Besonderheit ist die Anwendung des ColumnView-Steuerelements zu erwähnen, dem (Pseudo-) Checkboxen in Form von Grafiken hinzu gefügt wurden. Eine Beschreibung der Eigenschaften, Methoden und Ereignisse des Steuerelements ColumnView finden Sie im Kapitel → 17.5 ColumnView.

Hinweise für die Nutzung des Programms:

Beachten Sie: Die Nutzung des Programms gb.rsync erfolgt auf eigene Gefahr!

11.11.5 Variante 5

Wenn Ihnen von einem Anbieter Cloud-Speicher in hinreichender Größe zur Verfügung gestellt wird, dann sollten Sie erwägen, ihre Gambas-Projekte (auch) dort verschlüsselt zu speichern. Das hätte den Vorteil, dass Ihre Daten – im Gegensatz zu den anderen Varianten – an einem unabhängigen Ort gespeichert sind. Bisher wurde diese Variante vom Autor noch nicht umgesetzt – wird aber erwogen.

Download