Benutzer-Werkzeuge

Webseiten-Werkzeuge


backup:halbjahr

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
backup:halbjahr [2025/12/10 14:22] – angelegt ascbackup:halbjahr [2026/07/02 05:59] (aktuell) – [Sicherheit] asc
Zeile 1: Zeile 1:
-====== Halbjahresbackup – Script-Dokumentation (in Arbeit) ======+====== Halbjahres- und Jahresbackup – Script-Dokumentation ======
  
-Diese Seite beschreibt das in Entwicklung befindliche PowerShell-Skript zum automatisierten Halbjahresbackup über einen USB-Netzwerk-Hub (UTN-System).+Diese Seite beschreibt die PowerShell-Scripte zur automatisierten Bereitstellung externer Backupmedien für Veeam.
  
-Ziel ist es, das Backupmedium nur für die Dauer des Kopiervorgangs verfügbar zu machen und dadurch eine zusätzliche Air-Gap-Schutzschicht gegen Ransomware zu schaffen.+Ziel ist es, die Backupmedien nur für die Dauer des jeweiligen Veeam-Backupjobs verfügbar zu machen und dadurch eine zusätzliche Schutzschicht gegen Ransomware, Fehlbedienung oder versehentliches Löschen zu schaffen. 
 + 
 +Es werden zwei externe Sicherungen unterschieden: 
 + 
 +  * **Halbjahresbackup** über USB-Netzwerk-Hub / SEH UTN 
 + 
 +  * **Jahresbackup** über direkt angeschlossene USB-HDD
  
 ===== Zielsetzung ===== ===== Zielsetzung =====
  
-  * Aktivierung eines UTN-USB-Hub-Ports (über .lnk-Verknüpfung) +  *  Halbjahresbackup: 
-  Warten auf das Backup-Laufwerk (G:) + 
-  automatische Halbjahrserkennung (H1/H2) +  - Aktivierung eines SEH UTN USB-Ports 
-  * Kopieren der Backupdaten+  Warten auf das Backup-Laufwerk ''J:'' 
-        D:\Backup +  - Bereitstellung für den Veeam BackupCopy-Job 
-        E:\Backup +  - automatische Deaktivierung des SEH UTN-Ports nach Abschluss 
-  * Zielstruktur: + 
-        G:\Jahr\H1   +  * Jahresbackup
-        G:\Jahr\H2 + 
-  * Logging der Kopiervorgänge +  direkt angeschlossene USB-HDD 
-  * automatische Deaktivierung des USB-Hubs nach Abschluss +  Windows-Disk vor dem Backup online setzen 
-  * optionalVersionierung, Hashprüfung+  - Warten auf das Backup-Laufwerk ''F:'' 
 +  - Bereitstellung für den Veeam BackupCopy-Job 
 +  Windows-Disk nach Abschluss offline setzen 
 + 
 +  * Vermeidung dauerhaft eingebundener Backupmedien 
 + 
 +  * Reduzierung der Angriffsfläche bei Ransomware 
 + 
 +  * klare Trennung zwischen regulären Backups und externen Langzeitkopien 
 + 
 +  * einfache Wiederherstellungsmöglichkeit im IT-Notfall 
 + 
 +===== Übersicht ===== 
 + 
 +^ Sicherung ^ Anschlussart ^ Laufwerk ^ Volume-Label ^ Bereitstellung ^ 
 +| Halbjahresbackup | SEH UTN / USB-over-Network | ''J:'' | ''Halbjahres Backup'' | SEH UTN aktivieren/deaktivieren | 
 +| Jahresbackup | direkt angeschlossene USB-HDD | ''F:'' | ''Jahres Backup'' | Windows-Disk online/offline setzen |
  
 ===== Status ===== ===== Status =====
  
-  * Aktivierung/Deaktivierung via Verknüpfung getestet +  * Halbjahresbackup: 
-  Erkennung G: implementiert +  - Aktivierung/Deaktivierung über SEH UTN getestet 
-  * automatische H1/H2-Logik vorhanden +  Erkennung von ''J:'' implementiert 
-  * robocopy-Kopierlogik im Aufbau +  - Volume-Label-Prüfung implementiert 
-  * Versionierung und Integritätstests geplant+  - Veeam BackupCopy-Job mit Pre-Script und Post-Script vorgesehen bzw. umgesetzt
  
-===== Geplanter Ablauf =====+  * Jahresbackup: 
 +  - direkt angeschlossene USB-HDD vorgesehen 
 +  - Erkennung über Disk ''UniqueId'' vorgesehen 
 +  - Bereitstellung als ''F:'' implementiert 
 +  - Offline-Schaltung nach Backupjob implementiert
  
-  1. Skriptstart (manuell oder Task Scheduler) +  * Versionierung und Integritätstests: 
-  2. Aktivieren des USB-Hub-Ports +  - optional 
-  3. Prüfen, ob G: erscheint +  - gesondert zu dokumentieren 
-  4. Bestimmen von Jahr und Halbjahr +  - Restore-Test empfohlen 
-  5. Anlegen der Zielordner + 
-  6. Kopiervorgang (D:\Backup & E:\Backup) +===== Geplanter Ablauf Halbjahresbackup ===== 
-  7. Logdateien erzeugen + 
-  8. USB-Hub-Port deaktivieren (Air Gap) +1. Veeam BackupCopy-Job startet 
-  9. Abschlussmeldung+ 
 +2. Pre-Script ''SEH-UTN-Mount.ps1'' wird ausgeführt 
 + 
 +3. SEH UTN-Port wird aktiviert 
 + 
 +4. Windows erkennt das USB-Backupmedium 
 + 
 +5. Script wartet auf Volume-Label ''Halbjahres Backup'' 
 + 
 +6. Laufwerksbuchstabe ''J:'' wird gesetzt 
 + 
 +7. Veeam schreibt die Backupdaten auf das Zielrepository 
 + 
 +8. Nach Abschluss startet das Post-Script ''SEH-UTN-Unmount.ps1'' 
 + 
 +9. SEH UTN-Port wird deaktiviert 
 + 
 +10. Laufwerk ''J:'' verschwindet aus Windows 
 + 
 +11. Backupmedium ist im Normalbetrieb nicht erreichbar 
 + 
 +===== Geplanter Ablauf Jahresbackup ===== 
 + 
 +1. Veeam BackupCopy-Job startet 
 + 
 +2. Pre-Script ''Jahresbackup-Mount.ps1'' wird ausgeführt 
 + 
 +3. Jahresbackup-Disk wird anhand der Disk ''UniqueId'' gesucht 
 + 
 +4. Disk wird online gesetzt 
 + 
 +5. ggf. wird der ReadOnly-Status entfernt 
 + 
 +6. Script wartet auf Volume-Label ''Jahres Backup'' 
 + 
 +7. Laufwerksbuchstabe ''F:'' wird gesetzt 
 + 
 +8. Veeam schreibt die Backupdaten auf das Zielrepository 
 + 
 +9. Nach Abschluss startet das Post-Script ''Jahresbackup-Unmount.ps1'' 
 + 
 +10. Jahresbackup-Disk wird offline gesetzt 
 + 
 +11. Laufwerk ''F:'' ist im Normalbetrieb nicht verfügbar
  
 ===== Sicherheit ===== ===== Sicherheit =====
  
-Durch die zeitlich begrenzte Aktivierung entsteht ein vollautomatisches Air-Gap  +Durch die zeitlich begrenzte Aktivierung der Backupmedien sind die externen Sicherungen nicht dauerhaft als beschreibbare Laufwerke im System verfügbar. 
-Während 95–99 % der Zeit ist das Backupmedium nicht erreichbar und nicht angreifbar.+ 
 +Das reduziert das Risiko durch: 
 + 
 +  * Ransomware 
 + 
 +  * versehentliches Löschen 
 + 
 +  * Fehlbedienung 
 + 
 +  * fehlerhafte Prozesse 
 + 
 +  * versehentliches Überschreiben alter Sicherungsstände 
 + 
 +Beim Halbjahresbackup wird das Medium über SEH UTN getrennt. Für Windows wirkt dies ähnlich wie ein entferntes USB-Gerät
 + 
 +Beim Jahresbackup bleibt die HDD physisch angeschlossen, wird jedoch Windows-seitig offline gesetzt. Dadurch ist sie im Normalbetrieb nicht als Laufwerk verwendbar. 
 + 
 +Wichtig: Diese Lösung stellt eine zusätzliche Schutzschicht dar, ersetzt jedoch kein vollständiges physisches Air-Gap. Für maximalen Schutz sollten externe Backupdatenträger zusätzlich räumlich getrennt gelagert werden.
  
 Weitere Übersicht: siehe [[backup:diagramme|Diagramme & Ablauf]] Weitere Übersicht: siehe [[backup:diagramme|Diagramme & Ablauf]]
 +
 +===== Relevante Pfade =====
 +
 +^ Zweck ^ Pfad ^
 +| Halbjahresbackup Mount-Script | ''C:\Scripts\Veeam\SEH-UTN-Mount.ps1'' |
 +| Halbjahresbackup Unmount-Script | ''C:\Scripts\Veeam\SEH-UTN-Unmount.ps1'' |
 +| Jahresbackup Mount-Script | ''C:\Scripts\Veeam\Jahresbackup-Mount.ps1'' |
 +| Jahresbackup Unmount-Script | ''C:\Scripts\Veeam\Jahresbackup-Unmount.ps1'' |
 +| SEH UTN Manager | ''C:\Program Files\SEH Computertechnik GmbH\SEH UTN Manager\utnm.exe'' |
 +
 +===== Technische Daten Halbjahresbackup =====
 +
 +^ Parameter ^ Wert ^
 +| Anschluss | SEH UTN |
 +| SEH UTN IP-Adresse | ''192.168.1.179'' |
 +| SEH UTN Port | ''1'' |
 +| Laufwerk | ''J:'' |
 +| Volume-Label | ''Halbjahres Backup'' |
 +| Bereitstellung | per SEH UTN activate/deactivate |
 +
 +===== Technische Daten Jahresbackup =====
 +
 +^ Parameter ^ Wert ^
 +| Anschluss | direkt angeschlossene USB-HDD |
 +| Laufwerk | ''F:'' |
 +| Volume-Label | ''Jahres Backup'' |
 +| Bereitstellung | Windows-Disk online/offline |
 +| Identifikation | Disk ''UniqueId'' |
 +
 +Die Disk ''UniqueId'' der Jahresbackup-HDD muss einmalig ermittelt und in den beiden Jahresbackup-Scripten hinterlegt werden.
 +
 +==== Disk UniqueId ermitteln ====
 +
 +Ausführen, solange die Jahresbackup-HDD online und als ''F:'' verfügbar ist:
 +
 +<code powershell>
 +$label = "Jahres Backup"
 +
 +$vol  = Get-Volume -FileSystemLabel $label
 +$part = Get-Partition -Volume $vol
 +
 +Get-Disk -Number $part.DiskNumber | Format-List Number,FriendlyName,SerialNumber,UniqueId,BusType </code>
 +
 +Dokumentation:
 +
 +^ Feld ^ Wert ^
 +| Volume-Label | ''Jahres Backup'' |
 +| Laufwerk | ''F:'' |
 +| Disk UniqueId | ''3E543148324B4333'' |
 +| Seriennummer | ''00000000NT1H2KC3'' |
 +| Hersteller / Modell | ''Seagate Expansion HDD'' |
 +| Kapazität | ''9 TB'' |
 +| Aufbewahrungsort | ''Im Serverraum, am Server'' |
 +
 +===== Einbindung in Veeam =====
 +
 +Die Scripte werden im jeweiligen Veeam-Job als Pre- und Post-Scripte hinterlegt.
 +
 +Typischer Pfad in der Veeam-Oberfläche:
 +
 +<code>
 +Job bearbeiten
 +→ Storage
 +→ Advanced
 +→ Scripts
 +→ Run the following script before the job
 +→ Run the following script after the job
 +</code>
 +
 +==== Halbjahresbackup ====
 +
 +^ Script-Typ ^ Pfad ^
 +| Pre-Script | ''C:\Scripts\Veeam\SEH-UTN-Mount.ps1'' |
 +| Post-Script | ''C:\Scripts\Veeam\SEH-UTN-Unmount.ps1'' |
 +
 +==== Jahresbackup ====
 +
 +^ Script-Typ ^ Pfad ^
 +| Pre-Script | ''C:\Scripts\Veeam\Jahresbackup-Mount.ps1'' |
 +| Post-Script | ''C:\Scripts\Veeam\Jahresbackup-Unmount.ps1'' |
 +
 +===== Script-Quelle: SEH-UTN-Mount.ps1 =====
 +
 +<code powershell>
 +# SEH UTN Mount - Halbjahresbackup
 +
 +$SehExe       = "C:\Program Files\SEH Computertechnik GmbH\SEH UTN Manager\utnm.exe"
 +$UtnIp        = "192.168.1.179"
 +$UtnPort      = 1
 +$DriveLetter  = "J"
 +$VolumeLabel  = "Halbjahres Backup"
 +$Timeout      = 60
 +
 +Write-Host "Aktiviere SEH UTN..."
 +
 +if (-not (Test-Path $SehExe)) {
 +Write-Host "FEHLER: utnm.exe wurde nicht gefunden: $SehExe" -ForegroundColor Red
 +exit 100
 +}
 +
 +& $SehExe /c "activate $UtnIp $UtnPort" /q /nw
 +
 +if ($LASTEXITCODE -ne 0) {
 +Write-Host "FEHLER: UTN-Aktivierung fehlgeschlagen. ExitCode: $LASTEXITCODE" -ForegroundColor Red
 +exit $LASTEXITCODE
 +}
 +
 +Write-Host "Warte auf Volume '$VolumeLabel'..."
 +
 +$deadline = (Get-Date).AddSeconds($Timeout)
 +$vol = $null
 +
 +while ((Get-Date) -lt $deadline) {
 +$vol = Get-Volume -FileSystemLabel $VolumeLabel -ErrorAction SilentlyContinue
 +if ($vol) { break }
 +Start-Sleep -Seconds 2
 +}
 +
 +if (-not $vol) {
 +Write-Host "FEHLER: Volume '$VolumeLabel' nicht gefunden." -ForegroundColor Red
 +exit 10
 +}
 +
 +if (@($vol).Count -gt 1) {
 +Write-Host "FEHLER: Mehrere Volumes mit Label '$VolumeLabel' gefunden." -ForegroundColor Red
 +exit 12
 +}
 +
 +$existing = Get-Volume -DriveLetter $DriveLetter -ErrorAction SilentlyContinue
 +
 +if ($existing -and $existing.FileSystemLabel -ne $VolumeLabel) {
 +Write-Host "FEHLER: $DriveLetter`: ist bereits belegt durch '$($existing.FileSystemLabel)'." -ForegroundColor Red
 +exit 11
 +}
 +
 +$part = Get-Partition -Volume $vol
 +
 +if ($part.DriveLetter -ne $DriveLetter) {
 +Write-Host "Setze Laufwerksbuchstaben auf $DriveLetter`: ..."
 +Set-Partition -DiskNumber $part.DiskNumber -PartitionNumber $part.PartitionNumber -NewDriveLetter $DriveLetter
 +}
 +
 +if (Test-Path "$DriveLetter`:\") {
 +    Write-Host "Fertig. Laufwerk $DriveLetter`: ist bereit." -ForegroundColor Green
 +exit 0
 +}
 +
 +Write-Host "FEHLER: Laufwerk $DriveLetter`: nicht erreichbar." -ForegroundColor Red
 +exit 1 </code>
 +
 +===== Script-Quelle: SEH-UTN-Unmount.ps1 =====
 +
 +<code powershell>
 +# SEH UTN Unmount - Halbjahresbackup
 +
 +$SehExe      = "C:\Program Files\SEH Computertechnik GmbH\SEH UTN Manager\utnm.exe"
 +$UtnIp       = "192.168.1.179"
 +$UtnPort     = 1
 +$DriveLetter = "J"
 +$VolumeLabel = "Halbjahres Backup"
 +$Timeout     = 30
 +
 +Write-Host "Pruefe Laufwerk $DriveLetter`: ..."
 +
 +if (-not (Test-Path $SehExe)) {
 +Write-Host "FEHLER: utnm.exe wurde nicht gefunden: $SehExe" -ForegroundColor Red
 +exit 100
 +}
 +
 +$vol = Get-Volume -DriveLetter $DriveLetter -ErrorAction SilentlyContinue
 +
 +if (-not $vol) {
 +Write-Host "Laufwerk $DriveLetter`: ist bereits nicht verbunden." -ForegroundColor Green
 +exit 0
 +}
 +
 +if ($vol.FileSystemLabel -ne $VolumeLabel) {
 +Write-Host "FEHLER: $DriveLetter`: ist vorhanden, hat aber falsches Label: '$($vol.FileSystemLabel)'." -ForegroundColor Red
 +exit 11
 +}
 +
 +Write-Host "Trenne SEH UTN..."
 +& $SehExe /c "deactivate $UtnIp $UtnPort" /q /nw
 +
 +if ($LASTEXITCODE -ne 0) {
 +Write-Host "FEHLER: UTN-Deaktivierung fehlgeschlagen. ExitCode: $LASTEXITCODE" -ForegroundColor Red
 +exit $LASTEXITCODE
 +}
 +
 +Write-Host "Warte auf Entfernen von Laufwerk $DriveLetter`: ..."
 +
 +for ($i = 1; $i -le $Timeout; $i++) {
 +$vol = Get-Volume -DriveLetter $DriveLetter -ErrorAction SilentlyContinue
 +
 +```
 +if (-not $vol) {
 +    Write-Host "Fertig. Laufwerk $DriveLetter`: wurde entfernt." -ForegroundColor Green
 +    exit 0
 +}
 +
 +Start-Sleep -Seconds 1
 +```
 +
 +}
 +
 +Write-Host "FEHLER: Laufwerk $DriveLetter`: ist nach der Deaktivierung noch vorhanden." -ForegroundColor Red
 +exit 1 </code>
 +
 +===== Script-Quelle: Jahresbackup-Mount.ps1 =====
 +
 +Wichtig: Vor Nutzung muss ''HIER-DEINE-DISK-UNIQUEID-EINTRAGEN'' durch die tatsächliche Disk ''UniqueId'' der Jahresbackup-HDD ersetzt werden.
 +
 +<code powershell>
 +# Jahresbackup HDD Mount
 +
 +$DiskUniqueId = "HIER-DEINE-DISK-UNIQUEID-EINTRAGEN"
 +$DriveLetter  = "F"
 +$VolumeLabel  = "Jahres Backup"
 +$Timeout      = 30
 +
 +$disk = Get-Disk | Where-Object { $_.UniqueId -eq $DiskUniqueId }
 +
 +if (-not $disk) {
 +Write-Host "FEHLER: Jahresbackup-Disk nicht gefunden." -ForegroundColor Red
 +exit 10
 +}
 +
 +if (@($disk).Count -gt 1) {
 +Write-Host "FEHLER: Mehrere Disks mit dieser UniqueId gefunden." -ForegroundColor Red
 +exit 13
 +}
 +
 +if ($disk.IsOffline) {
 +Write-Host "Setze Disk online..."
 +Set-Disk -Number $disk.Number -IsOffline $false
 +}
 +
 +if ($disk.IsReadOnly) {
 +Write-Host "Entferne ReadOnly..."
 +Set-Disk -Number $disk.Number -IsReadOnly $false
 +}
 +
 +$deadline = (Get-Date).AddSeconds($Timeout)
 +$vol = $null
 +
 +while ((Get-Date) -lt $deadline) {
 +$vol = Get-Volume -FileSystemLabel $VolumeLabel -ErrorAction SilentlyContinue
 +if ($vol) { break }
 +Start-Sleep -Seconds 2
 +}
 +
 +if (-not $vol) {
 +Write-Host "FEHLER: Volume '$VolumeLabel' nicht gefunden." -ForegroundColor Red
 +exit 11
 +}
 +
 +if (@($vol).Count -gt 1) {
 +Write-Host "FEHLER: Mehrere Volumes mit Label '$VolumeLabel' gefunden." -ForegroundColor Red
 +exit 14
 +}
 +
 +$existing = Get-Volume -DriveLetter $DriveLetter -ErrorAction SilentlyContinue
 +
 +if ($existing -and $existing.FileSystemLabel -ne $VolumeLabel) {
 +Write-Host "FEHLER: $DriveLetter`: ist bereits belegt durch '$($existing.FileSystemLabel)'." -ForegroundColor Red
 +exit 12
 +}
 +
 +$part = Get-Partition -Volume $vol
 +
 +if ($part.DriveLetter -ne $DriveLetter) {
 +Write-Host "Setze Laufwerksbuchstaben auf $DriveLetter`: ..."
 +Set-Partition -DiskNumber $part.DiskNumber -PartitionNumber $part.PartitionNumber -NewDriveLetter $DriveLetter
 +}
 +
 +if (Test-Path "$DriveLetter`:\") {
 +    Write-Host "Jahresbackup-Laufwerk $DriveLetter`: ist bereit." -ForegroundColor Green
 +exit 0
 +}
 +
 +Write-Host "FEHLER: Laufwerk $DriveLetter`: nicht erreichbar." -ForegroundColor Red
 +exit 1 </code>
 +
 +===== Script-Quelle: Jahresbackup-Unmount.ps1 =====
 +
 +Wichtig: Vor Nutzung muss ''HIER-DEINE-DISK-UNIQUEID-EINTRAGEN'' durch die tatsächliche Disk ''UniqueId'' der Jahresbackup-HDD ersetzt werden.
 +
 +<code powershell>
 +# Jahresbackup HDD Unmount
 +
 +$DiskUniqueId = "HIER-DEINE-DISK-UNIQUEID-EINTRAGEN"
 +$DriveLetter  = "F"
 +$VolumeLabel  = "Jahres Backup"
 +
 +$disk = Get-Disk | Where-Object { $_.UniqueId -eq $DiskUniqueId }
 +
 +if (-not $disk) {
 +Write-Host "FEHLER: Jahresbackup-Disk nicht gefunden." -ForegroundColor Red
 +exit 10
 +}
 +
 +if (@($disk).Count -gt 1) {
 +Write-Host "FEHLER: Mehrere Disks mit dieser UniqueId gefunden." -ForegroundColor Red
 +exit 13
 +}
 +
 +if ($disk.IsOffline) {
 +Write-Host "Jahresbackup-Disk ist bereits offline." -ForegroundColor Green
 +exit 0
 +}
 +
 +$vol = Get-Volume -DriveLetter $DriveLetter -ErrorAction SilentlyContinue
 +
 +if ($vol -and $vol.FileSystemLabel -ne $VolumeLabel) {
 +Write-Host "FEHLER: $DriveLetter`: hat falsches Label: '$($vol.FileSystemLabel)'." -ForegroundColor Red
 +exit 11
 +}
 +
 +Write-Host "Setze Jahresbackup-Disk offline..."
 +Set-Disk -Number $disk.Number -IsOffline $true
 +
 +Start-Sleep -Seconds 2
 +
 +$diskCheck = Get-Disk | Where-Object { $_.UniqueId -eq $DiskUniqueId }
 +
 +if ($diskCheck.IsOffline) {
 +Write-Host "Jahresbackup-Disk wurde offline gesetzt." -ForegroundColor Green
 +exit 0
 +}
 +
 +Write-Host "FEHLER: Disk ist nach Set-Disk noch online." -ForegroundColor Red
 +exit 1 </code>
 +
 +===== Optionale CMD-Wrapper =====
 +
 +Falls Veeam PowerShell-Scripte nicht direkt zuverlässig startet, können CMD-Wrapper verwendet werden.
 +
 +==== Halbjahresbackup Mount Wrapper ====
 +
 +<code batch>
 +@echo off
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\SEH-UTN-Mount.ps1"
 +exit /b %ERRORLEVEL%
 +</code>
 +
 +==== Halbjahresbackup Unmount Wrapper ====
 +
 +<code batch>
 +@echo off
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\SEH-UTN-Unmount.ps1"
 +exit /b %ERRORLEVEL%
 +</code>
 +
 +==== Jahresbackup Mount Wrapper ====
 +
 +<code batch>
 +@echo off
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\Jahresbackup-Mount.ps1"
 +exit /b %ERRORLEVEL%
 +</code>
 +
 +==== Jahresbackup Unmount Wrapper ====
 +
 +<code batch>
 +@echo off
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\Jahresbackup-Unmount.ps1"
 +exit /b %ERRORLEVEL%
 +</code>
 +
 +===== Manuelle Prüfung =====
 +
 +==== Halbjahresbackup prüfen ====
 +
 +<code powershell>
 +Get-Volume -DriveLetter J
 +</code>
 +
 +Erwartetes Volume-Label:
 +
 +<code>
 +Halbjahres Backup
 +</code>
 +
 +==== Jahresbackup prüfen ====
 +
 +<code powershell>
 +Get-Volume -DriveLetter F
 +</code>
 +
 +Erwartetes Volume-Label:
 +
 +<code>
 +Jahres Backup
 +</code>
 +
 +Diskstatus prüfen:
 +
 +<code powershell>
 +Get-Disk | Format-Table Number,FriendlyName,SerialNumber,UniqueId,BusType,IsOffline,IsReadOnly -AutoSize
 +</code>
 +
 +===== Manuelle Ausführung =====
 +
 +==== Halbjahresbackup verbinden ====
 +
 +<code powershell>
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\SEH-UTN-Mount.ps1"
 +</code>
 +
 +==== Halbjahresbackup trennen ====
 +
 +<code powershell>
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\SEH-UTN-Unmount.ps1"
 +</code>
 +
 +==== Jahresbackup online setzen ====
 +
 +<code powershell>
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\Jahresbackup-Mount.ps1"
 +</code>
 +
 +==== Jahresbackup offline setzen ====
 +
 +<code powershell>
 +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Veeam\Jahresbackup-Unmount.ps1"
 +</code>
 +
 +===== Prüfung nach Backupjob =====
 +
 +Nach jedem Halbjahres- oder Jahresbackup sind folgende Punkte zu prüfen:
 +
 +^ Prüfung ^ Erwarteter Zustand ^
 +| Veeam-Job | ''Success'' |
 +| Pre-Script | ExitCode ''0'' |
 +| Post-Script | ExitCode ''0'' |
 +| Ziel-Laufwerk während Job verfügbar | Ja |
 +| Ziel-Laufwerk nach Job entfernt/offline | Ja |
 +| Backupdaten vorhanden | Ja |
 +| Repository-Rescan | falls erforderlich erfolgreich |
 +| Test-Restore | stichprobenartig empfohlen |
 +
 +===== Exitcodes =====
 +
 +==== Halbjahresbackup Mount ====
 +
 +^ ExitCode ^ Bedeutung ^
 +| ''0'' | Erfolg |
 +| ''1'' | Laufwerk nach Mount nicht erreichbar |
 +| ''10'' | Volume-Label nicht gefunden |
 +| ''11'' | Laufwerksbuchstabe bereits falsch belegt |
 +| ''12'' | Mehrere Volumes mit gleichem Label gefunden |
 +| ''100'' | ''utnm.exe'' nicht gefunden |
 +
 +==== Halbjahresbackup Unmount ====
 +
 +^ ExitCode ^ Bedeutung ^
 +| ''0'' | Erfolg oder Laufwerk bereits getrennt |
 +| ''1'' | Laufwerk nach Deaktivierung noch vorhanden |
 +| ''11'' | Laufwerk vorhanden, aber falsches Volume-Label |
 +| ''100'' | ''utnm.exe'' nicht gefunden |
 +
 +==== Jahresbackup Mount ====
 +
 +^ ExitCode ^ Bedeutung ^
 +| ''0'' | Erfolg |
 +| ''1'' | Laufwerk nach Mount nicht erreichbar |
 +| ''10'' | Disk anhand UniqueId nicht gefunden |
 +| ''11'' | Volume-Label nicht gefunden |
 +| ''12'' | Laufwerksbuchstabe bereits falsch belegt |
 +| ''13'' | Mehrere Disks mit gleicher UniqueId gefunden |
 +| ''14'' | Mehrere Volumes mit gleichem Label gefunden |
 +
 +==== Jahresbackup Unmount ====
 +
 +^ ExitCode ^ Bedeutung ^
 +| ''0'' | Erfolg oder Disk bereits offline |
 +| ''1'' | Disk ist nach Set-Disk noch online |
 +| ''10'' | Disk anhand UniqueId nicht gefunden |
 +| ''11'' | Laufwerk vorhanden, aber falsches Volume-Label |
 +| ''13'' | Mehrere Disks mit gleicher UniqueId gefunden |
 +
 +===== Wiederherstellung im IT-Notfall =====
 +
 +==== Wiederherstellung aus Halbjahresbackup ====
 +
 +* Backupserver oder Ersatzsystem bereitstellen
 +
 +* SEH UTN-Gerät verfügbar machen
 +
 +* Halbjahresbackup-HDD über SEH UTN verbinden
 +
 +* Script ''SEH-UTN-Mount.ps1'' ausführen
 +
 +* Prüfen, ob ''J:'' verfügbar ist
 +
 +* Veeam öffnen
 +
 +* Repository rescan oder Backup importieren
 +
 +* gewünschten Restorepunkt auswählen
 +
 +* Wiederherstellung starten
 +
 +* Ergebnis fachlich prüfen
 +
 +==== Wiederherstellung aus Jahresbackup ====
 +
 +* Backupserver oder Ersatzsystem bereitstellen
 +
 +* Jahresbackup-HDD anschließen
 +
 +* Script ''Jahresbackup-Mount.ps1'' ausführen
 +
 +* Prüfen, ob ''F:'' verfügbar ist
 +
 +* Veeam öffnen
 +
 +* Repository rescan oder Backup importieren
 +
 +* gewünschten Restorepunkt auswählen
 +
 +* Wiederherstellung starten
 +
 +* Ergebnis fachlich prüfen
 +
 +===== Hinweise =====
 +
 +* Die Scripte müssen lokal auf dem Veeam-Backupserver liegen.
 +
 +* Die Scripte benötigen administrative Rechte.
 +
 +* Der Veeam Backup Service muss die notwendigen Rechte besitzen.
 +
 +* Laufwerksbuchstaben und Volume-Labels dürfen nicht ohne Anpassung der Scripte geändert werden.
 +
 +* Die Jahresbackup-HDD muss eindeutig über die Disk ''UniqueId'' identifiziert werden.
 +
 +* Nach jedem Backupjob muss geprüft werden, ob das Medium wieder getrennt bzw. offline ist.
 +
 +* Für einen höheren Schutzgrad sollten die Datenträger nach erfolgreicher Sicherung zusätzlich physisch getrennt 
 +und räumlich separat gelagert werden.
 +
 +===== Kurzfazit =====
 +
 +Das Halbjahresbackup wird über SEH UTN nur für den Backupjob verbunden und danach wieder getrennt.
 +
 +Das Jahresbackup liegt auf einer direkt angeschlossenen USB-HDD, die nur für den Backupjob online gesetzt und danach wieder offline geschaltet wird.
 +
 +Dadurch sind die externen Sicherungen im Normalbetrieb nicht dauerhaft als aktive Laufwerke verfügbar und bieten eine zusätzliche Wiederherstellungsoption für größere IT-Notfälle.
  
backup/halbjahr.1765376526.txt.gz · Zuletzt geändert: von asc