# BackupGuard

Automatisches Windows-11-Backup-Tool mit grafischer Oberfläche, flexibler Zeitplanung und inkrementeller Sicherungsstrategie.

---

## Überblick

BackupGuard ist ein lokales Backup-Programm für Windows 11, das vollständig ohne Cloud-Dienste auskommt. Es sichert Dateien und Ordner auf lokale Laufwerke, externe Festplatten oder Netzlaufwerke (UNC-Pfade). Die Bedienung erfolgt über eine moderne grafische Oberfläche (CustomTkinter), während im Hintergrund der Windows-Aufgabenplaner (`schtasks.exe`) für zuverlässige automatische Ausführung sorgt.

---

## Features

- **Drei Backup-Typen**: Vollsicherung, inkrementell und differenziell
- **Flexible Zeitplanung**: Einmalig, stündlich, täglich, wöchentlich, monatlich oder beim Windows-Anmelden
- **Dateisegmentierung**: Große Backups werden in konfigurierbare Teilstücke aufgeteilt
- **VSS-Unterstützung**: Volume Shadow Copy Service für konsistente Sicherungen geöffneter Dateien (erfordert Administratorrechte)
- **Komprimierung**: ZIP-basierte Archivierung mit einstellbarer Komprimierungsstufe
- **Systemtray-Integration**: Läuft dezent im Hintergrund mit Tray-Icon und Benachrichtigungen
- **Windows-Benachrichtigungen**: Native Toast-Benachrichtigungen über winotify
- **Profilverwaltung**: Mehrere unabhängige Backup-Profile verwaltbar
- **Fortschrittsanzeige**: Echtzeit-Fortschrittsbalken und Geschwindigkeitsanzeige
- **Protokollierung**: Detaillierte Log-Dateien pro Backup-Lauf
- **Aufbewahrungsregeln**: Automatisches Löschen alter Backups nach konfigurierbarer Anzahl
- **Filterregeln**: Einschließen und Ausschließen von Dateitypen oder Ordnern per Muster
- **Startbedinugngen**: Immer mit Adminstrator starten um alle Datein lesen zu können (wurde vom User später dazu getragen)

---

## Systemvoraussetzungen

| Anforderung | Minimum |
|---|---|
| Betriebssystem | Windows 11 (Windows 10 ab Build 1903 wird ebenfalls unterstützt) |
| Python | 3.11 oder neuer |
| Freier Arbeitsspeicher | 256 MB |
| Speicherplatz | 50 MB für die Anwendung (Backup-Ziel separat) |
| Rechte | Standardbenutzer; für VSS werden Administratorrechte benötigt |

---

## Installation

### Schritt 1 – Repository klonen oder entpacken

```bat
git clone https://github.com/example/BackupGuard.git
cd BackupGuard
```

Alternativ das ZIP-Archiv herunterladen und in einen Ordner entpacken.

### Schritt 2 – Abhängigkeiten installieren

```bat
install_deps.bat
```

Das Skript führt intern aus:
```bat
pip install -r requirements.txt
pip install pyinstaller
```

### Schritt 3 – Anwendung starten

```bat
python src/main.py
```

Beim ersten Start öffnet sich der Einrichtungsassistent.

---

## Build zur .exe (standalone)

Um BackupGuard in eine eigenständige `.exe` ohne Python-Installation zu packen:

```bat
build.bat
```

Die fertige Datei liegt anschließend unter:
```
dist\BackupGuard.exe
```

> **Hinweis**: Das Icon `assets\icon.ico` muss vor dem Build existieren. Führe dazu einmalig aus:
> ```bat
> python assets\create_icon.py
> ```

---

## Erststart und Konfiguration

1. **BackupGuard starten** – entweder `python src/main.py` oder `dist\BackupGuard.exe`
2. **Neues Profil anlegen** – Schaltfläche „Neues Profil" in der Seitenleiste
3. **Quellordner wählen** – einen oder mehrere Ordner als Backup-Quelle hinzufügen
4. **Zielordner wählen** – lokaler Pfad, externer Datenträger oder UNC-Pfad (z. B. `\\NAS\Backup`)
5. **Backup-Typ wählen** (siehe unten)
6. **Zeitplan einrichten** (optional)
7. **Profil speichern** – der Zeitplan wird automatisch im Windows-Aufgabenplaner registriert
8. **Erstes Backup starten** – Schaltfläche „Jetzt sichern"

---

## Backup-Typen

### Vollsicherung (`full`)

Sichert alle Quelldateien vollständig, unabhängig davon, ob sie sich seit dem letzten Backup geändert haben. Benötigt den meisten Speicherplatz, ist aber vollständig in sich und ermöglicht die schnellste Wiederherstellung.

- **Geeignet für**: Erstbackup, wöchentliche Archivsicherung
- **Speicherbedarf**: Hoch

### Inkrementelle Sicherung (`incremental`)

Sichert nur Dateien, die sich seit dem **letzten Backup** (egal ob voll oder inkrementell) geändert haben. Spart Speicherplatz und ist schnell, erfordert aber bei der Wiederherstellung alle vorherigen inkrementellen Backups.

- **Geeignet für**: Tägliche oder stündliche Sicherungen
- **Speicherbedarf**: Niedrig

### Differenzielle Sicherung (`differential`)

Sichert alle Dateien, die sich seit dem **letzten Vollbackup** geändert haben. Mittelweg zwischen Voll- und inkrementeller Sicherung: Die Wiederherstellung benötigt nur das letzte Vollbackup und das letzte differenzielle Backup.

- **Geeignet für**: Tägliche Sicherungen mit wöchentlichem Vollbackup
- **Speicherbedarf**: Mittel

---

## Zeitplan-Typen

| Typ | Beschreibung | Beispiel |
|---|---|---|
| `once` | Einmalige Ausführung zu festem Datum und Uhrzeit | `2026-06-01` um `14:00` |
| `hourly` | Stündlich | Jede volle Stunde |
| `daily` | Täglich zur konfigurierten Uhrzeit | Täglich um `02:00` |
| `weekly` | Wöchentlich an einem bestimmten Wochentag | Jeden Montag um `02:00` |
| `monthly` | Monatlich an einem bestimmten Tag des Monats | Am 1. des Monats um `03:00` |
| `on_login` | Bei jeder Windows-Anmeldung | Beim Start der Windows-Sitzung |

Der Zeitplan wird als Windows-Aufgabe in der Aufgabenplanung (Task Scheduler) eingetragen und ist auch dann aktiv, wenn BackupGuard nicht manuell gestartet ist.

---

## Segmentierung

Für große Backups oder Zieldatenträger mit Dateigrößenbeschränkung (z. B. FAT32: max. 4 GB) kann die Segmentierung aktiviert werden. Das Backup-Archiv wird dann in mehrere Teile aufgeteilt:

```
Backup_2026-05-09_020000/
  archive.zip.001   (z. B. 2 GB)
  archive.zip.002   (z. B. 2 GB)
  archive.zip.003   (z. B. 1,3 GB)
  manifest.json
```

- **Segmentgröße**: Konfigurierbar in MB (Standard: 2048 MB)
- **Wiederherstellung**: Alle Segmente müssen im selben Ordner liegen; BackupGuard fügt sie automatisch zusammen

---

## Verzeichnisstruktur der Backups

Jedes Backup wird in einem eigenen Unterordner abgelegt:

```
<Zielordner>/
  <Profilname>/
    2026-05-09_020000_full/
      archive.zip          (oder segmentierte Teile)
      manifest.json        (Dateiliste, Prüfsummen, Metadaten)
      backup.log           (Protokoll dieses Laufs)
    2026-05-10_020000_incr/
      archive.zip
      manifest.json
      backup.log
    2026-05-11_020000_incr/
      ...
```

**`manifest.json`** enthält:
- Backup-Typ und Zeitstempel
- Liste aller gesicherten Dateien mit Pfad, Größe und SHA-256-Prüfsumme
- Referenz auf das Basis-Backup (bei inkrementell/differenziell)
- Versionsnummer des BackupGuard-Formats

---

## Bekannte Einschränkungen

- **VSS (Volume Shadow Copy)**: Nur mit Administratorrechten verfügbar. Ohne VSS können geöffnete/gesperrte Dateien (z. B. Outlook-PST, Datenbanken) übersprungen werden.
- **Aufgabenplaner**: Die automatische Zeitplanung funktioniert nur unter Windows. Unter anderen Betriebssystemen (Entwicklungsumgebung) werden Scheduler-Operationen protokolliert aber nicht ausgeführt.
- **UNC-Pfade**: Netzwerkpfade (`\\Server\Share`) funktionieren nur, wenn der Nutzer beim Ausführen des Tasks angemeldet und der Netzwerkpfad erreichbar ist. Für Sicherungen im Hintergrund (z. B. `on_login`) empfiehlt sich ein dauerhaft eingebundenes Netzlaufwerk.
- **FAT32-Zieldatenträger**: Maximale Dateigröße 4 GB – Segmentierung aktivieren.
- **Passwortgeschützte Archive**: Aktuell nicht unterstützt (geplant für eine spätere Version).
- **Wiederherstellungs-Assistent**: Die Wiederherstellung erfolgt aktuell manuell durch Entpacken der ZIP-Archive; ein integrierter Assistent ist in Vorbereitung.

---

## Lizenz

MIT License – siehe `LICENSE`-Datei für Details.
